Apache kafka 卡夫卡:一个主题中的消息数

Apache kafka 卡夫卡:一个主题中的消息数,apache-kafka,Apache Kafka,我需要存储卡夫卡主题中的消息数。 这与是否有消费者消费了这些消息无关 kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test-topic 上面给出了主题的偏移量 上述信息是否等于当前存储在卡夫卡主题中的信息数量?不完全相同。您得到的数字仅指所有主题分区的当前最大偏移量。消息计数还取决于该主题的分区开始偏移量 你可以跑

我需要存储卡夫卡主题中的消息数。 这与是否有消费者消费了这些消息无关

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

上面给出了主题的偏移量


上述信息是否等于当前存储在卡夫卡主题中的信息数量?

不完全相同。您得到的数字仅指所有主题分区的当前最大偏移量。消息计数还取决于该主题的分区开始偏移量

你可以跑

kafka-run-class.sh kafka.tools.GetOffsetShell-代理列表localhost:9092,localhost:9093,localhost:9094-主题测试主题-时间-1

kafka-run-class.sh kafka.tools.GetOffsetShell-代理列表localhost:9092,localhost:9093,localhost:9094-主题测试主题-时间-2


分别计算每个分区的消息计数,方法是从EndOffset中减去BeginingOffset,然后将它们相加,得到该主题的总记录计数。

是,如果最早偏移量等于零,这等于消息数。如果最早偏移量不等于零,您需要计算每个分区的差值,然后求和。

上面给出了主题的偏移量? 是,它给出了当前最大偏移量

上述信息是否等于当前存储在卡夫卡主题中的信息数量? 不,这不是卡夫卡中的邮件数量,因为在保留期之后,邮件将从主题中删除,所以偏移量!=邮件计数

获取卡夫卡中的消息数

    brokers="<broker1:port>"
topic=<topic-name>
sum_1=$(/usr/hdp/current/kafka-broker/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list $brokers --topic $topic --time -1 | grep -e ':[[:digit:]]*:' | awk -F  ":" '{sum += $3} END {print sum}')
sum_2=$(/usr/hdp/current/kafka-broker/bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list $brokers --topic $topic --time -2 | grep -e ':[[:digit:]]*:' | awk -F  ":" '{sum += $3} END {print sum}')
echo "Number of records in topic ${topic}: "$((sum_1 - sum_2))

其中选项-time-1=>当前最大偏移量和-time-2是当前最小偏移量

这对压缩主题不适用这对压缩主题不适用