我需要存储kafka主题中的消息数。 这与是否有消费者使用了邮件无关。
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test-topic
上面给出了主题的偏移量编号?
以上内容等于当前存储在kafka主题中的消息数吗?
答案 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是当前最小偏移量