web-dev-qa-db-ja.com

kafkaトピックに保存されているメッセージの数を数える

0.9.0.0バージョンのKafkaを使用していますが、管理スクリプトkafka-console-consumer.shを使用せずに、トピック内のメッセージの数をカウントしたいです。

私は答えのすべてのコマンドを試してみました Java、Apache kafkaのトピック内のメッセージ数を取得する方法 ですが、結果が得られるものはありません。誰でもここで私を助けることができますか?

22

以下のコマンドを実行してみてください。

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test-topic --time -1

次に、各パーティションのすべてのカウントを合計します。

55
amethystic

技術的に言えば、トピックからのすべてのメッセージを消費して数えることができます:

例:

kafka-run-class.sh kafka.tools.SimpleConsumerShell --broker-list localhost:9092 --topic XYZ --partition 0*

ただし、kafka.tools.GetOffsetShellアプローチでは、トピック内の実際のメッセージ数ではなく、オフセットが提供されます。トピックが圧縮された場合、メッセージを消費するかオフセットを読み取ることでメッセージをカウントすると、2つの異なる数値が得られます。

トピックの圧縮: https://kafka.Apache.org/documentation.html#design_compactionbasics

5
Cosmos

これを使用してすべてのカウントを合計できます:

.../bin/kafka-run-class kafka.tools.GetOffsetShell --broker-list <<broker_1>>:9092,<<broker_2:9092>>... --topic <<your_topic_name>> --time -1 | while IFS=: read topic_name partition_id number; do echo "$number"; done | paste -sd+ - | bc
5
Quentin Geff

これは、awkと単純なループを使用して行うこともできます

for i in `kafka-run-class kafka.tools.GetOffsetShell --broker-list broker:9092 --time -1 --topic topic_name| awk -F : '{print $3}'`; do sum=$(($sum+$i)); done
0
Akshay Nagpal