Kafka主题中的消息数

时间:2018-08-23 10:27:58

标签: apache-kafka

我需要存储kafka主题中的消息数。 这与是否有消费者使用了邮件无关。

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

上面给出了主题的偏移量编号?

以上内容等于当前存储在kafka主题中的消息数吗?

3 个答案:

答案 0 :(得分:0)

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

您可以运行

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

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

分别计算每个分区的消息计数,方法是从endOffsets中减去beginOffsets,然后将它们加起来以获得该主题的总记录数。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

以上内容是否等于kafka主题中当前存储的消息数? 不,这不是kafka中的邮件数,因为保留期后的邮件将从主题中删除,因此偏移量==邮件数

获取卡夫卡中的邮件数量

    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是当前最小偏移量