Подсчет Количество сообщений, сохраненных в теме кафки
Я использую 0.9.0.0 версию Kafka и хочу подсчитать количество сообщений в теме без использования административного скрипта kafka-console-consumer.sh.
Я перепробовал все команды в ответе Java, Как получить количество сообщений в теме в apache kafka, но ни одна из них не дает результата. Может кто-нибудь помочь мне здесь?
Ответы
Ответ 1
Вы можете попробовать выполнить следующую команду:
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test-topic --time -1
Затем суммируем все подсчеты для каждого раздела.
Ответ 2
вы можете суммировать все счета, используя это:
.../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
Ответ 3
С технической точки зрения вы можете просто использовать все сообщения из темы и считать их:
Пример:
kafka-run-class.sh kafka.tools.SimpleConsumerShell --broker-list localhost:9092 --topic XYZ --partition 0*
Однако подход kafka.tools.GetOffsetShell
даст вам смещения, а не фактическое количество сообщений в теме. Это означает, что если тема уплотняется, вы получите два разных номера, если вы будете считать сообщения, потребляя их или читая смещения.
Тематическое уплотнение: https://kafka.apache.org/documentation.html#design_compactionbasics
Ответ 4
Вы также можете сделать это, используя 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