[英]Kafka Number of messages in a topic
我需要存儲的 kafka 主題中的消息數。 這與是否有任何消費者消費了消息無關。
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092,localhost:9093,localhost:9094 --topic test-topic
上面給出了主題的偏移量?
以上是否等於kafka主題中當前存儲的消息數?
不完全是。 您得到的數字僅指所有主題分區的當前最大偏移量。 消息計數還取決於該主題的分區的起始偏移量。
你可以跑
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 來計算每個分區的消息數,然后將它們相加以獲得該主題的總記錄數。
是的,如果最早偏移量等於零,則這等於消息數。如果最早偏移量不等於零,則需要計算差異,然后對每個分區求和。
上面給出了主題的偏移量? 是的,它給出了當前的最大偏移量
以上是否等於kafka主題中當前存儲的消息數? 不,這不是 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 是當前最小偏移
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.