it-swarm.dev

Ribilanciamento del problema durante la lettura dei messaggi in Kafka

Sto cercando di leggere messaggi sull'argomento di Kafka, ma non riesco a leggerlo. Il processo viene ucciso dopo qualche tempo, senza leggere alcun messaggio.

Ecco l'errore di ribilanciamento che ottengo:

[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

Ho provato a eseguire ConsumerOffsetChecker, e questo è l'errore che ottengo. Non ho idea di cosa, come risolvere questo. Qualcuno, qualche idea?

./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$1.apply$mcVI$sp(ConsumerOffsetChecker.scala:89)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$kafka$tools$ConsumerOffsetChecker$$processTopic$1.apply(ConsumerOffsetChecker.scala:89)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$kafka$tools$ConsumerOffsetChecker$$processTopic$1.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$3.apply(ConsumerOffsetChecker.scala:153)
        at kafka.tools.ConsumerOffsetChecker$$anonfun$main$3.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$9.call(ZkClient.Java:770)
        at org.I0Itec.zkclient.ZkClient$9.call(ZkClient.Java:766)
        at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.Java:675)
        ... 16 more
16
divinedragon

Ho avuto problemi simili di recente. Puoi provare ad aumentare le configurazioni del consumatore rebalance.backoff.ms e zookeeper.session.timeout.ms a circa 5-10 secondi.

Il primo parametro dice a Kafka di aspettare di più prima di riprovare il ribilanciamento. Il secondo dice a Kafka di essere più paziente mentre prova a connettersi a Zookeeper.

Altre opzioni di configurazione possono essere trovate su la documentazione ufficiale .

13
Minh-Triet LÊ

Questo probabilmente significa che i broker non hanno creato quei nodi correttamente quando si è connesso a Zookeeper. Il percorso/consumatore deve esistere quando si tenta di consumare. 

Ecco alcuni percorsi per il debug:

Hai creato qualche argomento? 

Se è così:

  1. Quante partizioni ci sono nell'argomento?
  2. Hai controllato che i metadati dell'argomento fossero compilati correttamente nello zookeeper?
  3. Possiamo vedere la configurazione del tuo consumatore?

Altrimenti:

  1. Quindi è necessario creare un argomento utilizzando lo script $KAFKA_DIR/bin/kafka-create-topic.sh. Cerca all'interno dello script i dettagli di utilizzo.
  2. Una volta creato un argomento, è necessario creare un consumatore con un ID di gruppo che non è mai stato utilizzato in precedenza, altrimenti non si avvierà automaticamente.
2
laughing_man

C'è un bug in kafka.tools.ConsumerOffsetChecker. Se un particolare nodo dello Zookeeper che ha consumato le informazioni di offset non esce, lo strumento esce dall'esecuzione.

Ad esempio, supponiamo di avere un gruppo di consumatori "mygroup" e un argomento "topictest". Quindi l'offset per la partizione 2 viene mantenuto in Znode: /Consumer/mygroup/offset/topictest/2. 

Se non vi è alcuna voce per la partizione 2 dell'argomento topictest in Znode, lo strumento consumer offsetchecker uscirà controllando l'offset per la partizione 2 . Fondamentalmente, fallirà durante il controllo della prima partizione "n" per la quale Znode/consumer/mygroup/offset/topictest/n manca su Zookeeper.

1
Nipun Talukdar

Un altro problema potrebbe essere dovuto a conflitti jar. Se hai lo stesso jar con versioni diverse memorizzate nella cartella della libreria. Questo problema potrebbe sorgere . I file jar come scala-library, zkclient, zookeeper, kafka-client non dovrebbero essere duplicati con versioni differenti.

0
charan teja

probabilmente i tuoi broker sono offline e non sono in grado di connettersi a Zookeeper, hai provato a eseguire lo script console-consumatore disponibile nel percorso $KAFKA_ROOT_DIR/bin per verificare se sei in grado di consumare da un argomento specifico.

0
user2720864