Глубокое понимание Kafka [четыре] потребительского управления компенсацией

задняя часть


1. Тема смещения

Потребитель записывает последнюю позицию текущего потребления, отправив смещение, так что потребитель может сбиваться или новый потребитель присоединиться к группе потребителей, и каждый потребитель может быть назначен на другой раздел из-за операции по восстановлению раздела. Проверенная версия KAFKA: 0.11.0.2, и потребители отправляют сообщения на специальную тему «_Consumer_offset», как показано на рисунке:

offset topic.png

Содержание сообщения включает в себя:

fields content
Key Consumer Group, topic, partition
Payload Offset, metadata, timestamp

Сообщения, отправленные в тему «_consumer_offset», будут разделены в соответствии с ключом группы потребителей, и все сообщения в группе потребителей будут отправлены в уникальный раздел.

offset topic-逻辑图.png

2. Смещение коммита

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

2.1 Потребитель

Когда потребитель запускается, создан встроенный производитель для темы «_Consumer_offset» для подачи данных смещения.

2.2, брокер

То есть отправка Offset рассматривается как обычный производственный запрос, а логика остается неизменной.

offset topic commit.png

Тема «_consumer_offset» создается автоматически при отправке первого запроса смещения в кластере.

3. Как отправить компенсацию

При отправке Offset возникают две проблемы: повторное потребление и отсутствие потребления.

  • Когда отправленное смещение меньше, чем смещение последнего сообщения, обработанного клиентом, произойдет повторное потребление. Сценарий: сначала потребляйте, затем отправьте смещение.Если потребление прошло успешно, а отправка не удалась, смещение, полученное потребителем в следующий раз, будет таким же, как и в предыдущий раз, поэтому это приведет к повторному потреблению.
  • Когда отправленное смещение больше, чем смещение последнего сообщения, обработанного клиентом, потребление будет пропущено. Сценарий: сначала отправьте смещение, а затем используйте его.Если отправка прошла успешно, а потребление не удалось, смещение, полученное потребителем в следующий раз, уже будет новым, поэтому это приведет к пропущенному потреблению.

Согласно конкретной деловой ситуации, выбирая соответствующий способ представления может эффективно решить проблему повторного потребления и пропущенного потребления.

3.1. Автоматическая отправка

Автоматическая отправка — самый простой способ отправки.Установив параметры, вы можете включить автоматическую отправку или установить временной интервал для отправки. Недостатком является то, что после потребления некоторых данных время автоматической отправки еще не наступило, и в это время, если новый потребитель присоединится или текущий потребитель повесит трубку, произойдет операция перебалансировки раздела, а затем потребитель будет перераспределен. отправить в последний раз. Смещение начинает потребляться, что приводит к повторному потреблению. Хотя интервал автокоммита можно сократить, он все равно не решает эту проблему.

3.2 Синхронно отправить текущее смещение

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

3.3 Асинхронно отправить текущее смещение

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

3.4, комбинация синхронного и асинхронного представления

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

3.5. Отправьте указанное смещение

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

tencent.jpg