В Kafka documentation:Как Apache Kafka может отправлять сообщения нескольким группам потребителей?
Кафка обрабатывает это по-разному. Наша тема разделена на набор полностью упорядоченных разделов, каждый из которых потребляется одним потребителем в любой момент времени. Это означает, что позиция потребителя в каждом разделе является всего лишь одним целым числом, а смещение следующего сообщения - . Это делает состояние о том, что потребляется очень мало, всего лишь одно число для каждого раздела. Это состояние может быть периодически зарегистрировано . Это делает эквивалент сообщений подтверждения очень дешево.
Тем не менее, после их краткого руководства в том же документе, я легко смог:
- Создать тему с одним разделом
- Запустите консоль производителя
- протолкнуть несколько сообщений
- Начать потребитель потреблять
--from-beginning
- Start другого потребителей
--from-beginning
И оба потребителя успешно потребляют из того же раздела.
Но это, похоже, противоречит документации выше?
Я согласен, что это полезно и желательно. Возможно, документация может быть выяснена из «разделена на набор полностью упорядоченных разделов, каждый из которых потребляется одним потребителем в любой момент времени» -> «делится на набор полностью упорядоченных разделов, каждый из которых потребляется один потребитель * в каждой группе потребителей * в любой момент времени? Это правильно? – JKnight
Кроме того, кто несет ответственность за сохранение индекса смещения? Потребитель? Как насчет того, когда он проверяется? – JKnight
@JKnight, да для первого вопроса. Смещения сохраняются в «офсетном хранилище», которое в большинстве случаев является Zookeeper. Другой вариант - хранить смещения в Kafka, но эта функция была добавлена недавно, и я сомневаюсь, что люди ее используют так много. Commit offset имеет некоторые настройки, такие как 'autocommit.enable' и' autocommit.interval.ms'. Когда autocommit разрешен смещения для всех разделов, будет выполняться каждый интервал, упомянутый ранее. Если вы выключите автозапуск, вам придется периодически называть 'commitOffsets()' 'или хранить их где-то еще вдали от Kafka/Zookeeper. – serejja