消費模塊已經(jīng)運行一段時間了,如何查看消費的狀況呢?
KafkaOffsetMonitor
KafkaOffsetMonitor是一個可以用于監(jiān)控Kafka的Topic及Consumer消費狀況的工具。
- Visualizations選項卡 > Cluster Overview:查看當(dāng)前Kafka集群的Broker情況;
- Topic List選項卡:查看當(dāng)前Kafka集群上topic列表

有兩個Consumer正在消費當(dāng)前topic.png
點擊進(jìn)入Consumer可以查看該Consumer當(dāng)前的消費狀況。
- 左上角顯示了當(dāng)前Topic的生產(chǎn)速率
- 右上角顯示了當(dāng)前Consumer的消費速率。
- 藍(lán)色線條表示當(dāng)前Topic中的Message數(shù)目
- 灰色線條表示當(dāng)前Consumer消費的offset位置;
- 紅色線條表示藍(lán)色灰色的差值,即當(dāng)前Consumer滯后于Producer的message數(shù)目。

image.png

image.png
- Consumer Groups項卡:查看各partition中的message消費情況
- topic:創(chuàng)建時topic名稱
- partition:分區(qū)編號
- offset:表示該parition已經(jīng)消費了多少條message
- logSize:表示該partition已經(jīng)寫了多少條message
- Lag:表示有多少條message沒有被消費。
- Owner:表示消費者
- Created:該partition創(chuàng)建時間
- Last Seen:消費狀態(tài)刷新最新時間。
當(dāng)前有4個Partition,每個Partition中的message數(shù)目分布均勻。其各Partition的Lag(消息堆積)幾乎為0,表示該消費者組的消費能力是可以的。刷新頁面會發(fā)現(xiàn)Lag全變成0,說明消息很快就被消費掉了。

image.png

消息堆積嚴(yán)重情況.png
查看Kafka Topic流量 可以知道當(dāng)前服務(wù)狀態(tài),上報數(shù)據(jù)量的具體情況。

image.png

image.png
總結(jié)
- 根據(jù)上述數(shù)據(jù),生成速率和消費速率基本一致,目前狀態(tài)一個消費者完全hold??;
Q:如果消息堆積嚴(yán)重,消費速率遠(yuǎn)遠(yuǎn)低于生產(chǎn)速度,如何提升呢?
在當(dāng)前消費組中創(chuàng)建4個消費者,指定每個消費者消費其中一個分區(qū)的消息,在保證消息不會被重復(fù)消費的前提下提升消費速率。 - 生成時消息丟失:當(dāng)重啟服務(wù)的時候,服務(wù)會重新實例化會導(dǎo)致日志被清空,如果此時Flume沒有上報會導(dǎo)致部分?jǐn)?shù)據(jù)丟失。但Flume秒級別的延遲這種清空丟失的數(shù)據(jù)非常非常少。我們系統(tǒng)對數(shù)據(jù)有一定的容錯率。
- 消費時消息丟失:初始化ConsumerGroup的時候我們設(shè)置 fromOffset值為 latest。
默認(rèn)情況下,當(dāng)消費者拉取到了分區(qū)的某個消息之后,消費者會自動提交了 offset。設(shè)置為latest:當(dāng)各分區(qū)下有已提交當(dāng)offset時,從提交的offset開始消費;無提交的offset時,消費新產(chǎn)生的該分區(qū)下的數(shù)據(jù)。
??? 如果消費者剛拿到這個消息準(zhǔn)備進(jìn)行真正消費的時候,突然掛掉了,消息實際上并沒有被消費,但是 offset 卻被自動提交了... 這怎么辦呢?關(guān)閉閉自動提交 offset,每次在真正消費完消息之后之后再自己手動提交 offset 。 - 如何避免重復(fù)消費?同一主題的一條消息只能被同一個消費組下的某一個消費者消費