Горизонтально масштабированные потребители Кафки, потребляющие различные смещения

#apache-kafka #confluent-platform

Вопрос:

Я разрабатывал потребительское приложение kafka (C# в kubernetes) и некоторое время запускал его как один узел, используя одну тему.

Сегодня я заметил, что тема, из которой я потреблял, была довольно полной — я выполнял непрерывную обработку и имел смещения около ~38 тыс. (в общем, не зависел от раздела), но записи, которые мой продюсер включал в тему (также игнорируя различия в разделах), были около смещений ~58 тыс.

Я решил расширить другой модуль для потребителей — тот же код и конфигурация (идентификатор группы и т. Д.)

Когда он вышел в Сеть, он зарегистрировал, что обрабатывает сообщения в диапазоне смещения ~58 тыс. Я подумал, что это, возможно, просто другой раздел, но я могу видеть один и тот же раздел в обоих журналах (с разными смещениями).

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

Другими словами, почему бы моему второму (или n-му) потребителю не выйти в Сеть и не обработать сообщения в том же диапазоне смещения, что и моему первому потребителю, который работает уже несколько дней?

Я посмотрел некоторые настройки IConsumer, такие как:

который, по-видимому, указывает минимальное количество сообщений для хранения в «локальной очереди потребителей» (по умолчанию: 100 000), но я не знаю, действительно ли это указывает на то, что ConsumerA претендует на 100 тыс. сообщений, а ConsumerB, естественно, начинает 100 тыс. в будущем

Другие примечания:

  • То, что у меня ограниченный доступ к инструментам администрирования (Центр управления), показывает, что мой идентификатор группы потребителей отстает примерно на 900 тысяч сообщений.
  • Центр управления говорит, что в моей теме 60 разделов
  • Автоматическая фиксация не отключена (по умолчанию: true)
  • Независимо от настройки автоматической фиксации, я все еще выполняю _consumer.Фиксация(msg) в блоке finally{} после обработки каждого отдельного сообщения
  • Я не хочу убивать своего давнего потребителя (который все еще обрабатывает как чемпион) в случае, если возникнет проблема с сохранением смещения, и я «пропущу» все сообщения в дельте между этими двумя

Комментарии:

1. Итак, вы не можете запустить kafka-consumer-groups CLI?

2. @OneCricketeer правильно, к сожалению, у меня нет доступа к CLI. Я мог бы попросить команду поддержки сделать это, но предпочел бы просить об этом только в том случае, если она обязательно даст ответы.