Проблема перебалансировки при чтении сообщений в Kafka

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

вот ошибка перебалансировки, которую я получаю:

[2014-03-21 10:10:53,215] ERROR Error processing message, stopping consumer:  (kafka.consumer.ConsoleConsumer$)
kafka.common.ConsumerRebalanceFailedException: topic-1395414642817-47bb4df2 can't rebalance after 4 retries
    at kafka.consumer.ZookeeperConsumerConnector$ZKRebalancerListener.syncedRebalance(ZookeeperConsumerConnector.scala:428)
    at kafka.consumer.ZookeeperConsumerConnector.kafka$consumer$ZookeeperConsumerConnector$$reinitializeConsumer(ZookeeperConsumerConnector.scala:718)
    at kafka.consumer.ZookeeperConsumerConnector$WildcardStreamsHandler.<init>(ZookeeperConsumerConnector.scala:752)
    at kafka.consumer.ZookeeperConsumerConnector.createMessageStreamsByFilter(ZookeeperConsumerConnector.scala:142)
    at kafka.consumer.ConsoleConsumer$.main(ConsoleConsumer.scala:196)
    at kafka.consumer.ConsoleConsumer.main(ConsoleConsumer.scala)
Consumed 0 messages

Я пытался бежать ConsumerOffsetChecker, и это ошибка, которую я получаю. Я понятия не имею, как это решить. Кто-нибудь, какие-нибудь идеи?

./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zkconnect localhost:9092 --topic mytopic --group  topic_group
Group           Topic                          Pid Offset          logSize         Lag             Owner
Exception in thread "main" org.I0Itec.zkclient.exception.ZkNoNodeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /consumers/
        at org.I0Itec.zkclient.exception.ZkException.create(ZkException.java:47)
        at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:685)
        at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:766)
        at org.I0Itec.zkclient.ZkClient.readData(ZkClient.java:761)
        at kafka.utils.ZkUtils$.readData(ZkUtils.scala:459)
        at kafka.tools.ConsumerOffsetChecker$.kafka$tools$ConsumerOffsetChecker$$processPartition(ConsumerOffsetChecker.scala:59)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$kafka$tools$ConsumerOffsetChecker$$processTopic.apply$mcVI$sp(ConsumerOffsetChecker.scala:89)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$kafka$tools$ConsumerOffsetChecker$$processTopic.apply(ConsumerOffsetChecker.scala:89)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$kafka$tools$ConsumerOffsetChecker$$processTopic.apply(ConsumerOffsetChecker.scala:89)
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at kafka.tools.ConsumerOffsetChecker$.kafka$tools$ConsumerOffsetChecker$$processTopic(ConsumerOffsetChecker.scala:88)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$main.apply(ConsumerOffsetChecker.scala:153)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$main.apply(ConsumerOffsetChecker.scala:153)
        at scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
        at scala.collection.immutable.List.foreach(List.scala:45)
        at kafka.tools.ConsumerOffsetChecker$.main(ConsumerOffsetChecker.scala:152)
        at kafka.tools.ConsumerOffsetChecker.main(ConsumerOffsetChecker.scala)
Caused by: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /consumers/
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:102)
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:42)
        at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:927)
        at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:956)
        at org.I0Itec.zkclient.ZkConnection.readData(ZkConnection.java:103)
        at org.I0Itec.zkclient.ZkClient.call(ZkClient.java:770)
        at org.I0Itec.zkclient.ZkClient.call(ZkClient.java:766)
        at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:675)
        ... 16 more

5 ответов


недавно у меня были похожие проблемы. Вы можете попытаться увеличить потребительские конфигурации перебалансировка.отступление.ms и zookeeper.сеанс.тайм-аут.ms до около 5-10 секунд.

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

другие параметры конфигурации можно найти на официальная документация.


Это, вероятно, означает, что брокеры не создали эти узлы правильно при подключении к Zookeeper. Путь / consumer должен существовать при попытке потребления.

вот несколько путей для отладки:

вы создали какие-либо темы?

Если так:

  1. сколько разделов есть в теме?
  2. вы проверили, что метаданные темы были правильно заполнены в zookeeper?
  3. можем ли мы видеть Ваша потребительская конфигурация?

если нет:

  1. затем вам нужно создать тему с помощью скрипта $KAFKA_DIR/bin/kafka-create-topic.sh. Посмотрите внутри сценария для деталей использования.
  2. как только вы создадите тему, вам нужно создать потребителя с идентификатором группы, который ранее не использовался, иначе вы не начнете заново.

в Кафке есть ошибка.инструменты.ConsumerOffsetChecker. Если конкретный узел Zookeeper, содержащий информацию о потребленном смещении, не выходит, инструмент завершает выбрасывание execption.

например, предположим, что у вас есть потребительская группа " mygroup "и тема"topictest". Затем смещение для раздела 2 сохраняется в Znode: / потребители / mygroup / смещения / topictest / 2.

Если нет записи для раздела 2 темы topictest в Znode, то потребитель offsetchecker инструмент выйдет при проверке смещения для раздела 2. В принципе, он потерпит неудачу при проверке первого раздела "n", для которого Znode /consumers/mygroup/offsets/topictest/n отсутствует в Zookeeper.


вероятно, ваши брокеры находятся в автономном режиме, и они не могут подключиться к Zookeeper, вы пробовали запустить скрипт console-consumer, доступный в $KAFKA_ROOT_DIR/bin путь для проверки, можете ли вы потреблять из определенной темы.


другая проблема может быть из-за конфликтов jar. Если у вас есть тот же jar с разными версиями, хранящимися в папке библиотеки. Этот вопрос может возникнуть. банки типа scala-library, zkclient, zookeeper, kafka-client не должны дублироваться с разными версиями.