2

次のように、kafka-console-consumer.sh を使用してメッセージを消費している場所から Kafka アプリケーションがあります。

$./kafka-console-consumer.sh --zookeeper zookeeperhost:2181 --topic myTopic

これにより、私が Kafka コンシューマーを介して Kafka ブローカーに書き込むすべてのメッセージが見落とされずに提供されます。

最近、zookeeperhost にアクセスできない (何らかの理由で) 別の環境にアプリケーションをデプロイしました。したがって、代わりに以下のように kafka-simple-consumer-shell.sh を使用しています。

$./kafka-simple-consumer-shell.sh --broker-list brokerhost:9092 --topic myTopic --partition 0 --max-messages 1

しかし、これを使用すると、ほとんどのメッセージ (5000 件中 2 ~ 4 件) が見落とされます。誰かが kafka-simple-consumer-shell.sh がメッセージを読み取る方法を説明してください。

おそらくいくつかのメッセージが別のパーティションに送られているのではないかと疑っています.パーティション0から読み取っているだけなので、毎回すべてのメッセージを取得しているわけではありません. しかし、パーティションの数を確認する方法がわかりませんか? 他のパーティションのIDは何ですか?1でやってみましたがダメでした。

誰か助けてください。

4

1 に答える 1

3

kafka-simple-consumer.sh1 つのパーティションからメッセージを読み取るコンシューマを作成するだけです。partition 0 of myTopicしたがって、コマンドはfrom から1 つのメッセージを読み取るだけですbrokerhost:9092。パーティション 1 が同じブローカーにない場合は、以前と同じように機能しません。(詳細については、GitHub のコードを確認してください)

Zookeeper ホストにアクセスできる場合は、クラスター内でパーティションがどのように分散されているかを簡単に確認できます。

bin/kafka-topics.sh --describe --zookeeper zookeeperhost:2181 --topic myTopic

しかし、Zookeeper ホストにアクセスできない場合は、2 つの方法が考えられます。

  1. パラメータとしてすべてのブローカーを含むリストを提供し、0 から N までのパーティション番号を試してください。複数のブローカーを--broker-listの形式で提供できますbroker1:port2,broker2:port2,broker3:port3。次に、クラスター全体に存在するパーティションの数を把握できますが、どのブローカーがどのパーティションを持っているかはまだわかりません。
  2. 各ブローカーのログ ディレクトリを手動で確認します。チェック/tmp/kafka-logsします (デフォルトのログ ディレクトリを使用している場合)。myTopic-0、、 ...のようなディレクトリmyTopic-1があり、形式はtopic-partition#. これにより、どのブローカーがどのパーティションを持っているかを手動で確認できます。
于 2015-03-24T05:00:28.843 に答える