2015-05-19 4 views
2

В Kafka documentation:Как Apache Kafka может отправлять сообщения нескольким группам потребителей?

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

Тем не менее, после их краткого руководства в том же документе, я легко смог:

  1. Создать тему с одним разделом
  2. Запустите консоль производителя
  3. протолкнуть несколько сообщений
  4. Начать потребитель потреблять --from-beginning
  5. Start другого потребителей --from-beginning

И оба потребителя успешно потребляют из того же раздела.

Но это, похоже, противоречит документации выше?

ответ

3

При использовании разных групп потребителей потребители могут легко использовать одни и те же разделы. Вы можете рассматривать идентификаторы групп как разные приложения, потребляющие тему Кафки. Несколько разных приложений могут захотеть использовать данные в теме Kafka по-разному и, таким образом, не конфликтуют с другими приложениями. Вот почему два потребителя могут потреблять один раздел (фактически единственный способ, которым два потребителя могут потреблять один раздел).

И когда вы запускаете консольного пользователя, он случайно генерирует для него идентификатор группы (link), таким образом, эти потребители делают именно то, что я только что написал.

+0

Я согласен, что это полезно и желательно. Возможно, документация может быть выяснена из «разделена на набор полностью упорядоченных разделов, каждый из которых потребляется одним потребителем в любой момент времени» -> «делится на набор полностью упорядоченных разделов, каждый из которых потребляется один потребитель * в каждой группе потребителей * в любой момент времени? Это правильно? – JKnight

+0

Кроме того, кто несет ответственность за сохранение индекса смещения? Потребитель? Как насчет того, когда он проверяется? – JKnight

+1

@JKnight, да для первого вопроса. Смещения сохраняются в «офсетном хранилище», которое в большинстве случаев является Zookeeper. Другой вариант - хранить смещения в Kafka, но эта функция была добавлена ​​недавно, и я сомневаюсь, что люди ее используют так много. Commit offset имеет некоторые настройки, такие как 'autocommit.enable' и' autocommit.interval.ms'. Когда autocommit разрешен смещения для всех разделов, будет выполняться каждый интервал, упомянутый ранее. Если вы выключите автозапуск, вам придется периодически называть 'commitOffsets()' 'или хранить их где-то еще вдали от Kafka/Zookeeper. – serejja

Смежные вопросы