Кафка фиксирует смещение

В случае ручного смещения фиксации в Kafka, что происходит в случае сбоя? Пример -> Предположим, что зафиксировано смещение 0, зафиксировано смещение 1 — нет, а затем зафиксировано смещение 2. Сообщение по смещению 1 повторяется?

Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Apache Kafka - популярная платформа распределенной потоковой передачи данных, которую можно использовать для построения конвейеров данных в реальном...
0
0
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это зависит от того, как вы совершаете:

В commitSync предполагая, что вы фиксируете каждое смещение отдельно, как в вашем примере, если смещение 1 не зафиксировано, оно будет повторять попытку фиксации этого смещения до тех пор, пока не добьется успеха или пока не столкнется с ошибкой nonRetryable. Одним из недостатков этого механизма является то, что приложение блокируется до тех пор, пока брокер не ответит, что ограничивает пропускную способность приложения.

На commitAsync, с другой стороны, нет повторной попытки, если ему не удалось зафиксировать смещение 1. Причина этого в том, что к тому времени, когда брокер ответит, вернитесь к вашему клиенту Kafka, может быть более поздняя фиксация, которая уже была успешной. Представьте на вашем примере, что фиксация сообщения со смещением 1 не удалась из-за временной проблемы с сетью. Тем временем приложение уже успешно обработало сообщение со смещением 2. Если мы сейчас повторим предыдущую неудачную фиксацию, возможно, удастся зафиксировать смещение 1 после 2 уже зафиксировано. В случае перебалансировки это приведет к большему дублированию.

Из Javadoc — Смещения, совершенные с помощью нескольких вызовов [commitAsync], гарантированно отправляются в том же порядке, что и вызовы.... Таким образом, это означает, что если есть повторная попытка, разве она не должна быть заказана (по крайней мере, в пределах одного и того же экземпляра потребителя)?

OneCricketeer 20.03.2022 16:26

Я не уверен, что понимаю ваш вопрос, поскольку повторной попытки для асинхронного режима нет (как я уже упоминал в своем ответе). Обратите внимание, что вызовы идут в порядке вызовов. Но в моем примере у Kafka были проблемы с сетью, поэтому смещение фиксации 1 так и не поступило к брокеру, в то время как смещение 2 было успешно зафиксировано.

Noam Levy 20.03.2022 17:14

Другие вопросы по теме