Обработка Дубликата и Заказа сообщения в Кафке - PullRequest
0 голосов
/ 08 февраля 2020

Попытка понять разницу между следующей конфигурацией для обработки Порядка сообщения и Дублирования сообщения в Кафке. Я нигде не мог найти подробного объяснения. Не могли бы вы помочь мне разобраться с некоторыми вариантами использования.

enable.idempotence=true 

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

max.in.flight.requests.per.connection=1, чтобы гарантировать, что только один запрос может быть отправлен брокеру одновременно. Чтобы сохранить порядок сообщений при разрешении конвейерной обработки запросов, установите параметр конфигурации retries = 0, если приложение может допустить некоторую потерю сообщений

1 Ответ

0 голосов
/ 08 февраля 2020

Когда вы устанавливаете enable.idempotence=true, эти конфигурации устанавливаются автоматически, если вы не устанавливаете их вручную.

retries=Integer.MAX_VALUE

max.in.flight.requests=5 (если версия Kafka> = 1.0 Вы можете проверить this для получения дополнительной информации.)

acks=all

И это идеальная конфигурация для идемпотентного производителя. Если вы установите retries=0, в случае сбоя в сети вы даже не сможете отправить сообщение брокеру.

enable.idempotence: Когда установлено значение «true», производитель гарантирует, что в поток записывается ровно одна копия каждого сообщения. Если установлено значение «false», производитель повторяет попытку из-за сбоев посредника и т. Д. c., Может записать дубликаты повторного сообщения в потоке. Обратите внимание, что для включения идемпотентности необходимо, чтобы значение max.in.flight.requests.per.connection было меньше или равно 5, повторных попыток должно быть больше 0 , а acks должен иметь значение «все» , Если эти значения явно не установлены пользователем, будут выбраны подходящие значения. Если установлены несовместимые значения, создается исключение ConfigException.

...