Обычно потребители очереди отслеживают явные подтверждения .То есть потребитель говорит: «Спасибо, я обработал это», а сервер - «Пожалуйста».
Кафка обрабатывает это, сохраняя смещение .Смещение - это позиция потребителей в потоке.Например, допустим, у меня есть поток с четырьмя элементами.
A, B, C, D
На первой позиции A
, поэтому потребитель со смещением 0
будет тянуть A
.Как только они обработают A
, они обновят свое смещение до 1
.Распространенной практикой является сохранение этого на стороне брокера в теме __consumer_offsets
.
Когда их смещение становится 1
, они получают следующее, то есть B
.Они обрабатывают и увеличивают свое смещение в теме __consumer_offsets
, 2. И т. Д. И т. П.
Так что же происходит во время простоя во время чтения?
Естьграфик событий, которые следует учитывать во время этого отключения:
- Потребитель запрашивает следующий элемент в теме, основываясь на его смещении.
- Потребитель начинает чтение следующего элемента в теме.
- Потребитель заканчивает чтение элемента в теме.
- Потребитель обрабатывает элемент в теме.
- Потребитель обновляет свое смещение в теме
__consumer_offsets
. - Вернитесь к 1.
Любая ошибка, произошедшая до и включающая 4
, приведет к простому повторному запросу и повторной обработке.Это означает, что вам нужно обрабатывать что-то наполовину обработанное, если ваш потребитель находится в состоянии.
Ошибка, которая возникает после того, как 4
завершена, но 5
не завершена, NOT приведет кв переработке.Вместо этого он восстановит соединение, обновит смещение и обработает следующий элемент.