flink, как гарантировать ровно один раз для записей kafka, несмотря на повторные попытки - PullRequest
0 голосов
/ 06 мая 2020

Мой источник и приемник - обе темы Kafka. Есть ли способ сгенерировать уникальный идентификатор точно один раз для каждой отдельной записи Kafka? Точный раз означает, что в случае повторной попытки та же запись по-прежнему будет использовать тот же ранее сгенерированный идентификатор, а приемник существует только одна запись.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Неясно, что вы надеетесь получить, добавив этот уникальный идентификатор, и не совсем ясны требования к его уникальности.

Но если вас беспокоит, что Flink создаст дублирующиеся записи в выходных файлах topi c из-за повторных попыток, которые происходят во время восстановления после сбоя, вы можете настроить Flink и Kafka так, чтобы этого избежать, и гарантировать одноразовое поведение.

Для достижения единовременных сквозных гарантий:

  • Включить контрольную точку Flink
  • Установить Semantic.EXACTLY_ONCE
  • Увеличить transaction.max.timeout.ms сверх значения по умолчанию (15 минут)
  • Установите для isolation.level у последующих потребителей значение read_committed

Этот подход действительно осуществляется по цене, получаемой нижестоящими потребителями Kafka, имеющими ожидаемые задержка равна интервалу контрольной точки.

Подробнее см. в документации .

0 голосов
/ 06 мая 2020

Самая простая идея, которая приходит в голову, - просто создать функцию, которая генерирует уникальный hashcode() для каждой записи как long. Если хэш-код будет основан на полях, он будет одинаковым для неотличимых записей и должен отличаться для отдельных.

Вы даже можете рассмотреть возможность использования hashcode() из Object в Java.

...