2016-06-15 10 views
1

AWS上の1つのZookeeperインスタンスを持つ2つのブローカー設定で、カフカに奇妙な問題が発生しました。各ブローカーは別個のアベイラビリティゾーン(AZ)にあります。孤独なZookeeperインスタンスは、ブローカーの1人とAZを共有します。 私は、ブローカがダウンしているときでも、データがカフカに流れるようにするために、ロールバック再起動の状況を模索しようとしています。AWSのカフカ消費問題

他のAZブローカーが削除されたとき、私はZookeeperとAZを共有するブローカーへのスムーズな移行を見ることができます。しかし、私がZookeeperと共有しているAZ上のKafkaブローカーを取り除くと、他のAZブローカーはデータを消費しません。しかし、私はリーダーの割り当てが起こっているのを見ている。これが私たちのセットアップ、Kafka、またはZookeeperに問題があるかどうかはわかりません。

私たちは、ブローカ間通信のためにSSLを有効にしています。また、プロデューサはSSLを使用してKafkaと通信します。 Here is the server.propertiesは、ブローカーID以外の両方のブローカーで同一です。 here is our Kafka setupもあります。

EDIT:別のコンシューマ(Logstashを使用)で同じ結果が得られます。

Broker-1は、ZookeeperとAZを共有します。 Broker-0は他のAZ上に単独で存在します。


パート1:ブローカー-1にブローカー-0

/opt/kafka/bin/kafka-topics.sh --zookeeper 10.0.1.x:2181 --describe 
Topic:test PartitionCount:1  ReplicationFactor:2  Configs: 
    Topic: test Partition: 0 Leader: 0  Replicas: 0,1 Isr: 1,0 

実行消費者にカフカを停止します。

/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic test --new-consumer --consumer.config client.ssl 

リーダーはBroker-0です。 Broker-1のデータを消費できます Broker-0でKafkaサービスを停止します。 Broker-1でデータを消費/読み取りできるかどうか。ブローカー-0

/opt/kafka/bin/kafka-topics.sh --zookeeper 10.0.1.x:2181 --describe 
Topic:test PartitionCount:1  ReplicationFactor:2  Configs: 
    Topic: test Partition: 0 Leader: 1  Replicas: 0,1 Isr: 1 

からブローカー-1へのリーダーの変更パート2:ブローカー-0に

スタートカフカ

/opt/kafka/bin/kafka-topics.sh --zookeeper 10.0.1.x:2181 --describe 
Topic:test PartitionCount:1  ReplicationFactor:2  Configs: 
    Topic: test Partition: 0 Leader: 1  Replicas: 0,1 Isr: 1,0 

Part-を実行し、両方のブローカーを持っています3:ブローカー1でKafkaを停止する

ランニングコンシューマーo nブローカー-0

/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic test --new-consumer --consumer.config client.ssl 

リーダーはブローカー - 1です。 Broker-0のデータを消費することができる Broker-1でKafkaサービスを停止する Broker-0でデータを消費/読み込めない。

/opt/kafka/bin/kafka-topics.sh --zookeeper 10.0.1.x:2181 --describe 
Topic:test PartitionCount:1  ReplicationFactor:2  Configs: 
    Topic: test Partition: 0 Leader: 0  Replicas: 0,1 Isr: 0 

パート4:瞬時にデータの消費を再開しますバックアップブローカー-1のカフカを開始

を実行し、両方のブローカーを持っています。不思議なことに、見かけの「非消費」段階で送信されたメッセージも、Broker-1 Kafkaがオンラインに戻ったときに表示されます。

/opt/kafka/bin/kafka-topics.sh --zookeeper 10.0.1.x:2181 --describe 
Topic:test PartitionCount:1  ReplicationFactor:2  Configs: 
    Topic: test Partition: 0 Leader: 0  Replicas: 0,1 Isr: 0,1 

任意の洞察力?

+0

ちょうど3人の動物園で同じシナリオを試みました。ちょうど基本的に、前にもなかったAZに2人の動物園の飼育係を追加しました。同じ結果が得られました。 – urover

+0

また、両方のAZからKafkaに生産を試みて、サブネットを使って問題を解決しようとしました。 – urover

答えて

1

残念ながら長い調査の後、この問題は、Kafka> 0.9がカフカに消費者オフセットを保存し、もはや飼い葉桶ではないという事実に起因するように思われます。これをZookeeper(ala Kafka 0.8)に変更するオプションはありません。

カフカはコンシューマオフセットを「__consumer_offsets」というトピックに格納します。デフォルトでは、カフカはこのトピックを複製係数0で作成します。したがって、このトピックはONEブローカとONEブローカにのみ存在します。だから、このブローカーがダウンしたら、何を推測しますか?データは依然としてINTO Kafkaになりますが、コンシューマのオフセットに到達できないため、コンシューマはデータを読み取ることができなくなります。

ここでは、私がしたことがあります。私は手動でこのトピックの50個の各パーティションの複製要因を1つずつ変更し、テストを再実行しました。あなたは上からのルーチンを知っている - ブローカー0を殺し、それを元に戻し、ブローカ1を殺す。そして、何を推測する?すべてが期待どおりに機能しました。今問題が何だったのか知っている!このトピックは1よりも大きいの複製因子を使用して作成していると

、我々はカフカconfにこのプロパティを追加する必要があります。

offsets.topic.replication.factor = 2

そして、より多くのを持っていますこのトピックのためのパーティションの合理的な数:

offsets.topic.num.partitions = 5

しかし、ひどい部分は、この内部トピックが作成されると、複製因子またはパーティションを変更する方法がないということですカウントする、unlあなたはインフラストラクチャ全体(Kafka + Zookeeper)を分解し、新たに始める。恐ろしい! (私がここで間違っていることを願っています)

これはバグですか、機能ですか?知りません。いずれにせよ、それは私たちのために吸う。

+0

興味深いことに、https://issues.apache.org/jira/browse/KAFKA-1864がパッチ適用されて以来、修正されているはずです。ただし、単一のブローカでクラスタを作成して後で展開すると、デフォルトでは1になります。 – C4stor

+0

はい、@ C4stor、そうです。私たちは1つのブローカーから始め、別のブローカーを後で追加しました。 – urover

関連する問題