0.9.0.0バージョンのKafkaを使用していますが、管理スクリプトkafka-console-consumer.shを使用せずに、トピック内のメッセージの数をカウントしたいです。
私は答えのすべてのコマンドを試してみました Java、Apache kafkaのトピック内のメッセージ数を取得する方法 ですが、結果が得られるものはありません。誰でもここで私を助けることができますか?
以下のコマンドを実行してみてください。
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test-topic --time -1
次に、各パーティションのすべてのカウントを合計します。
技術的に言えば、トピックからのすべてのメッセージを消費して数えることができます:
例:
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
これを使用してすべてのカウントを合計できます:
.../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
これは、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