天天看點

檢視kafka消息消費情況檢視主題指令檢視kafka消息消費情況

檢視主題指令

#展示topic清單
 ./kafka-topics.sh --list --zookeeper 172.18.153.12:2188
#描述topic
 ./kafka-topics.sh --describe --zookeeper 172.18.153.12:2188 --topic test
#檢視topic某分區偏移量最大(小)值
 ./kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -1 --broker-list 10.1.3.84:9098 --partitions 0
#增加topic分區數
 ./kafka-topics.sh --zookeeper 172.18.153.12:2188 --alter --topic test --partitions 10
#删除topic:慎用,隻會删除zookeeper中的中繼資料,消息檔案須手動删除
 方法一:
 ./kafka-topics.sh --delete --zookeeper 172.18.153.12:2188 --topic test
 方法二:待驗證
 ./kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper 172.18.153.12:2188 --topic test
#檢視topic消費進度,必須參數為–group, 不指定–topic,預設為所有topic,
 ./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group group1
#列出所有主題中的所有使用者組:
 ./kafka-consumer-groups.sh --bootstrap-server 10.1.3.84:9098 --list
#要使用ConsumerOffsetChecker檢視上一個示例中消費者組的偏移量,我們按如下所示“describe”消費者組:
 ./kafka-consumer-groups.sh --bootstrap-server 10.1.3.84:9098 --describe --group group1
#-members: 此選項提供使用者組中所有活動成員的清單。
 ./kafka-consumer-groups.sh --bootstrap-server 10.1.3.84:9098 --describe --group group1 --members           

複制

檢視kafka消息消費情況

消息堆積是消費滞後(Lag)的一種表現形式,消息中間件服務端中所留存的消息與消費掉的消息之間的內插補點即為消息堆積量,也稱之為消費滞後(Lag)量。

對于Kafka而言,消息被發送至Topic中,而Topic又分成了多個分區(Partition),每一個Partition都有一個預寫式的日志檔案,雖然Partition可以繼續細分為若幹個段檔案(Segment),但是對于上層應用來說可以将Partition看成最小的存儲單元(一個由多個Segment檔案拼接的“巨型檔案”)。

每個Partition都由一系列有序的、不可變的消息組成,這些消息被連續的追加到Partition中。我們來看下圖,其就是Partition的一個真實寫照:

檢視kafka消息消費情況檢視主題指令檢視kafka消息消費情況

上圖中有四個概念:

LogStartOffset:表示一個Partition的起始位移,初始為0,雖然消息的增加以及日志清除政策的影響,這個值會階段性的增大。

ConsumerOffset:消費位移,表示Partition的某個消費者消費到的位移位置。

HighWatermark:簡稱HW,代表消費端所能“觀察”到的Partition的最高日志位移,HW大于等于ConsumerOffset的值。

LogEndOffset:簡稱LEO, 代表Partition的最高日志位移,其值對消費者不可見。

比如在ISR(In-Sync-Replicas)副本數等于3的情況下(如下圖所示),消息發送到Leader A之後會更新LEO的值,Follower B和Follower C也會實時拉取Leader A中的消息來更新自己,HW就表示A、B、C三者同時達到的日志位移,也就是A、B、C三者中LEO最小的那個值。由于B、C拉取A消息之間延時問題,是以HW必然不會一直與Leader的LEO相等,即LEO>=HW。

檢視kafka消息消費情況檢視主題指令檢視kafka消息消費情況

要計算Kafka中某個消費者的滞後量很簡單,首先看看其消費了幾個Topic,然後針對每個Topic來計算其中每個Partition的Lag,每個Partition的Lag計算就顯得非常的簡單了,參考下圖:

檢視kafka消息消費情況檢視主題指令檢視kafka消息消費情況

由圖可知消費Lag=HW - ConsumerOffset。Kafka中自帶的kafka-consumer_groups.sh腳本中就有Lag的資訊,示例如下:

[root@node2 kafka_2.12-1.0.0]# bin/kafka-consumer-groups.sh --describe --bootstrap-server localhost:9092 --group CONSUMER_GROUP_ID
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
 topic-test1 0 1648 1648 0 CLIENT_ID-e2d41f8d-dbd2-4f0e-9239-efacb55c6261 /192.168.92.1 CLIENT_ID
 topic-test1 1 1648 1648 0 CLIENT_ID-e2d41f8d-dbd2-4f0e-9239-efacb55c6261 /192.168.92.1 CLIENT_ID
 topic-test1 2 1648 1648 0 CLIENT_ID-e2d41f8d-dbd2-4f0e-9239-efacb55c6261 /192.168.92.1 CLIENT_ID
 topic-test1 3 1648 1648 0 CLIENT_ID-e2d41f8d-dbd2-4f0e-9239-efacb55c6261 /192.168.92.1 CLIENT_ID           

複制

參考:

Kafka的Lag計算誤區及正确實作:https://blog.csdn.net/u013256816/article/details/79955578

如何使用JMX監控Kafka:https://blog.csdn.net/u013256816/article/details/53524884