2017-01-22 2 views
4

Я использую версию kafka 0.9.0.0, и я хочу подсчитать количество сообщений в теме kafka без использования сценария администратора kafka-console-consumer.sh. Я пробовал все команды в ответе Java, How to get number of messages in a topic in apache kafka Но ни один из них не дает результата. Может ли кто-нибудь помочь мне здесь.Подсчет Количество сообщений, хранящихся в теме kafka

+0

Вы хотите работать на уплотненных темы, а потому, что устраняет кучу вариантов, как сравнение начала и продлились коррекции. –

+0

См. Мой ответ [здесь] (https://stackoverflow.com/a/47313863/2017567) для решения с использованием клиента Java. –

ответ

26

Вы могли бы попытаться выполнить следующую команду:

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

Затем суммировать все счетчики для каждого раздела.

+0

Когда я получу действительный ответ, я повышу его. Thanks –

3

вы можете суммировать все отсчеты с помощью этого:

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

Спасибо! Немного проще суммировать: kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list $ KAFKA_CLUSTER_HOSTS --topic $ TOPIC_NAME - время -1 | tr ":" "" | awk '{sum + = $ 3} END {print sum}' – ozma

+1

@ozma вместо 'tr' вы также можете использовать' awk -F: ': D –

1

Технически говоря, вы можете просто потреблять все сообщения от темы и сосчитать их:

Пример:

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

+0

Чтение потенциально невыразимых (миллионов?) сообщений из темы в Kafka (которые сохраняются до очистки, а не как JMS - постоянны до чтения) не являются жизнеспособными, если время не является относительным. –

Смежные вопросы