2014-10-28 2 views
0

У меня есть следующие Кафки установкавысокого уровень потребительской Неудачи в Кафке

Number of producer : 1 
    Number of topics : 1 
    Number of partitions : 2 
    Number of consumers : 3 (with same group id) 
    Number of Kafka cluster : none(single Kafka server) 
    Zookeeper.session.timeout : 1000 
    Consumer Type : High Level Consumer 

Производитель производит сообщения без какой-либо конкретной логики разделения (логика разделения по умолчанию). Потребитель 1 потребляет сообщение непрерывно. Я внезапно убиваю потребителя 1, и я бы хотел, чтобы потребитель 2 или потребитель 3 потреблял сообщения после отказа потребителя.

В некоторых случаях происходит перебалансировка, и потребитель 2 начинает потреблять сообщения. Это прекрасно. Но в некоторых случаях потребитель 2 или потребитель 3 вовсе не потребляет. Я должен вручную убить всех потребителей и снова запустить всех трех потребителей. Только после перезагрузки потребитель 1 снова начинает потреблять.

Точно перебалансировка успешна в некоторых случаях, тогда как в некоторых случаях перебалансировка не выполняется. Есть ли какая-то конфигурация, которую мне не хватает.

ответ

1

Kafka использует Zookeeper для координации потребления высокого уровня.

http://kafka.apache.org/documentation.html От:

раздела Владелец реестра

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

/потребителей/[group_id]/владельцы/[тема]/[broker_id-partition_id] -> consumer_node_id (эфемерная узел)

Существует известный эфемерные узлы причуда, что они могут задерживаться до Через 30 секунд после внезапного падения ZK-клиента: http://developers.blog.box.com/2012/04/10/a-gotcha-when-using-zookeeper-ephemeral-nodes/

Таким образом, вы можете столкнуться с этим, если вы ожидаете, что потребители 2 и 3 начнут читать сообщения сразу после завершения # 1.

Вы также можете проверить, что/consumer/[group_id]/owner/[topic]/[broker_id-partition_id] содержит правильные данные после перебалансировки.

+0

Спасибо за информацию. У меня есть несколько сомнений. 1) Как я могу убедиться, что эфемерный узел удаляется при запуске нового клиента. Есть ли способ указать это в моей потребительской программе. 2) Где я могу найти каталог/consumer. Я вижу только kafkalogs dir под/tmp (Red hat linux). – Muruga

+0

1) Эфемерные узлы автоматически удаляются серверами Zookeeper при отключении клиента. Я считаю, что разъединение обнаруживается из-за отсутствия сообщений ответа на сердечный ритм в течение 30 секунд. Он должен работать в готовом виде. –

+0

2)/consumer/... не находится в реальной файловой системе. Zookeeper хранит данные во внутренней структуре дерева, подобной структуре, которая похожа на файловую систему. Существует инструмент, который позволяет просматривать и изменять его. Обычно он находится в /opt/zookeeper/current/bin/zkCli.sh в поле, где установлен ZK. zkCli.sh поддерживает команды, такие как ls, get, put rmr и т. д. Подробнее см. http://zookeeper.apache.org/doc/r3.3.4/zookeeperStarted.html. –

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