Я использую версию kafka 0.9.0.0, и я хочу подсчитать количество сообщений в теме kafka без использования сценария администратора kafka-console-consumer.sh. Я пробовал все команды в ответе Java, How to get number of messages in a topic in apache kafka Но ни один из них не дает результата. Может ли кто-нибудь помочь мне здесь.Подсчет Количество сообщений, хранящихся в теме kafka
ответ
Вы могли бы попытаться выполнить следующую команду:
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test-topic --time -1
Затем суммировать все счетчики для каждого раздела.
Когда я получу действительный ответ, я повышу его. Thanks –
вы можете суммировать все отсчеты с помощью этого:
.../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
Спасибо! Немного проще суммировать: kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list $ KAFKA_CLUSTER_HOSTS --topic $ TOPIC_NAME - время -1 | tr ":" "" | awk '{sum + = $ 3} END {print sum}' – ozma
@ozma вместо 'tr' вы также можете использовать' awk -F: ': D –
Технически говоря, вы можете просто потреблять все сообщения от темы и сосчитать их:
Пример:
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
Чтение потенциально невыразимых (миллионов?) сообщений из темы в Kafka (которые сохраняются до очистки, а не как JMS - постоянны до чтения) не являются жизнеспособными, если время не является относительным. –
Вы хотите работать на уплотненных темы, а потому, что устраняет кучу вариантов, как сравнение начала и продлились коррекции. –
См. Мой ответ [здесь] (https://stackoverflow.com/a/47313863/2017567) для решения с использованием клиента Java. –