Как kafka обрабатывает упорядочение разных пакетов?

#apache-kafka #kafka-producer-api

#apache-kafka #kafka-producer-api

Вопрос:

В документации kafka о повторных попытках говорится:

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

Согласно параграфу, если два пакета отправляются в один и тот же раздел, kafka может зафиксировать второй пакет, в то время как сбой первого пакета.
Но это, похоже, противоречит гарантии кафки о заказе в том же разделе. Потому что обычно, если один пакет не удался, все последующие пакеты должны завершиться неудачей, иначе как это может гарантировать упорядочение? Кроме того, как kafka гарантирует, что порядок пакетов, отправляемых производителем, совпадает с порядком, обнаруженным брокером.

Итак, мой вопрос: как kafka гарантирует упорядочение разных пакетов (одного и того же раздела) или просто не гарантирует.

Ответ №1:

как kafka гарантирует упорядочение разных пакетов (одного и того же раздела) или просто не гарантирует.

Это гарантирует упорядочение внутри раздела либо путем установки

  • retries=0 или
  • retries>0 и max.in.flight.requests.per.connection=1 .

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

Как описано в приведенном параграфе документации, это может означать, что ваши пакеты B1, B2, B3, B4, B5 могут быть отправлены параллельно. Если отправка B3 завершается неудачно, и у вас есть повторные попытки> 0, то это потенциально может быть записано брокеру после B5.