web-dev-qa-db-ja.com

Kafka特定のノードでパーティションが同期していません

3つのEC2インスタンスでKafkaクラスターを実行しています。各インスタンスはkafka(0.11.0.1)とzookeeper(3.4)を実行しています)。それぞれに20個のパーティションと3個のReplicationFactorがあります。

今日、一部のパーティションが3つのノードすべてへの同期を拒否していることに気付きました。次に例を示します。

bin/kafka-topics.sh --zookeeper "10.0.0.1:2181,10.0.0.2:2181,10.0.0.3:2181" --describe --topic prod-decline
Topic:prod-decline    PartitionCount:20    ReplicationFactor:3    Configs:
    Topic: prod-decline    Partition: 0    Leader: 2    Replicas: 1,2,0    Isr: 2
    Topic: prod-decline    Partition: 1    Leader: 2    Replicas: 2,0,1    Isr: 2
    Topic: prod-decline    Partition: 2    Leader: 0    Replicas: 0,1,2    Isr: 2,0,1
    Topic: prod-decline    Partition: 3    Leader: 1    Replicas: 1,0,2    Isr: 2,0,1
    Topic: prod-decline    Partition: 4    Leader: 2    Replicas: 2,1,0    Isr: 2
    Topic: prod-decline    Partition: 5    Leader: 2    Replicas: 0,2,1    Isr: 2
    Topic: prod-decline    Partition: 6    Leader: 2    Replicas: 1,2,0    Isr: 2
    Topic: prod-decline    Partition: 7    Leader: 2    Replicas: 2,0,1    Isr: 2
    Topic: prod-decline    Partition: 8    Leader: 0    Replicas: 0,1,2    Isr: 2,0,1
    Topic: prod-decline    Partition: 9    Leader: 1    Replicas: 1,0,2    Isr: 2,0,1
    Topic: prod-decline    Partition: 10    Leader: 2    Replicas: 2,1,0    Isr: 2
    Topic: prod-decline    Partition: 11    Leader: 2    Replicas: 0,2,1    Isr: 2
    Topic: prod-decline    Partition: 12    Leader: 2    Replicas: 1,2,0    Isr: 2
    Topic: prod-decline    Partition: 13    Leader: 2    Replicas: 2,0,1    Isr: 2
    Topic: prod-decline    Partition: 14    Leader: 0    Replicas: 0,1,2    Isr: 2,0,1
    Topic: prod-decline    Partition: 15    Leader: 1    Replicas: 1,0,2    Isr: 2,0,1
    Topic: prod-decline    Partition: 16    Leader: 2    Replicas: 2,1,0    Isr: 2
    Topic: prod-decline    Partition: 17    Leader: 2    Replicas: 0,2,1    Isr: 2
    Topic: prod-decline    Partition: 18    Leader: 2    Replicas: 1,2,0    Isr: 2
    Topic: prod-decline    Partition: 19    Leader: 2    Replicas: 2,0,1    Isr: 2

ノード2のみがすべてのデータを同期しています。ブローカー0と1を再起動しようとしましたが、状況は改善されませんでした。さらに悪化しました。ノード2を再起動したいのですが、ダウンタイムまたはクラスター障害が発生すると想定しているため、可能であれば回避したいと思います。

ログに明らかなエラーが表示されないため、状況をデバッグする方法を理解するのに苦労しています。ヒントをいただければ幸いです。

ありがとう!

編集:いくつかの追加情報...ノード2(完全なデータを持つもの)のメトリックを確認すると、一部のパーティションが正しく複製されていないことがわかります。

$>get -d kafka.server -b kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions *
#mbean = kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions:
Value = 930;

ノード0と1はそうではありません。彼らはすべてが大丈夫だと思っているようです:

$>get -d kafka.server -b kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions *
#mbean = kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions:
Value = 0;

これは予想される動作ですか?

7
Akarot

replica.lag.time.max.msを増やしてみてください。

説明は次のようになります。

レプリカがreplica.lag.time.max.msより長くフェッチ要求を送信できなかった場合、レプリカは停止していると見なされ、ISRから削除されます。

レプリカがリーダーからreplica.lag.time.max.msより長く遅れ始めた場合、レプリカは遅すぎると見なされ、ISRから削除されます。したがって、トラフィックが急増し、メッセージの大量のバッチがリーダーに書き込まれる場合でも、レプリカが常にreplica.lag.time.max.msのリーダーの後ろに留まらない限り、ISRの内外でシャッフルされません。

1
mukesh210