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