web-dev-qa-db-fra.com

Comptage Nombre de messages stockés dans un sujet kafka

J'utilise la version 0.9.0.0 de Kafka et je souhaite compter le nombre de messages dans une rubrique sans utiliser le script d'administration kafka-console-consumer.sh.

J'ai essayé toutes les commandes de la réponse Java, Comment obtenir le nombre de messages d'un sujet dans Apache kafka Mais aucun ne donne le résultat obtenu ... .. Quelqu'un peut-il m'aider ici?

16
jack AKA karthik

Vous pouvez essayer d'exécuter la commande ci-dessous:

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

Ensuite, résumez tous les comptes pour chaque partition.

48
amethystic

Techniquement, vous pouvez simplement utiliser tous les messages du sujet et les compter:

Exemple:

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

Cependant, l'approche kafka.tools.GetOffsetShell vous donnera les compensations et non le nombre réel de messages dans le sujet. Cela signifie que si le sujet est compacté, vous obtiendrez deux nombres différents si vous comptez les messages en les consommant ou en lisant les décalages.

Compaction de sujet: https://kafka.Apache.org/documentation.html#design_compactionbasics

5
Cosmos

vous pouvez résumer tous les comptes en utilisant ceci: 

.../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

Vous pouvez aussi le faire en utilisant awk et une simple boucle

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