簡體   English   中英

Kafka 主題中的消息數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM