Подсчет Количество сообщений, сохраненных в теме кафки

Я использую 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