2つのブローカーkafka 0.10.2.0クラスターがあります。レプリケーション係数は2です。このKafkaに対して1.0.0 kafkaストリームアプリケーションを実行しています。私のkafkaストリームアプリケーションでは、プロデューサー構成にretries = 10 and retry.backoff.ms = 100
があります
数分実行した後、Kakfa server.logで次のログを確認しました。このため、Kafkaストリームアプリケーションは「NOT_LEADER_FOR_PARTITION」例外をスローします。
考えられる理由は何ですか?私を助けてください。
[2017-12-12 10:26:02,583] ERROR [ReplicaFetcherThread-0-1], Error for partition [__consumer_offsets,22] to broker 1:org.Apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition. (kafka.server.ReplicaFetcherThread)
各トピックは1つまたは複数のブローカーによって提供されます-1つはリーダーで、残りのブローカーはフォロワーです。
プロデューサーは、すべてのフォロワーに内部的にデータを複製するリーダーブローカーに新しいメッセージを送信する必要があります。
あなたのプロデューサークライアントは正しいブローカーに接続せず、リーダーの代わりにフォロワーに接続し、このフォロワーはあなたの送信リクエストを拒否すると思います。
./kafka-topics.sh --zookeeper localhost:2181 --topic your_topic --describe
を実行してみてください
Topic:your_topic PartitionCount:3 ReplicationFactor:1 Configs:retention.ms=14400000
Topic: your_topic Partition: 0 Leader: 2 Replicas: 2 Isr: 2
Topic: your_topic Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: your_topic Partition: 2 Leader: 1 Replicas: 1 Isr: 1
この例では、your_topic
に3つのパーティションがあることがわかります。つまり、3つのブローカーすべてがそれぞれ異なるパーティションでそのトピックのリーダーであり、st broker 2
はpartition 0
とbroker 0
のリーダーです。 broker 1
はpartition 0
のフォロワーです。
これらのプロパティを設定して、問題の解決に役立つかどうかを確認してください。
props.put(ProducerConfig.RETRIES_CONFIG, 10); //increase to 10 from default of 0
props.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG,
Integer.toString(Integer.MAX_VALUE)); // increase to infinity from default of 300 s
( ソース )