Kafka訊息積壓,你監控Rebalance了嗎?
需求
《Bug:Zabbix對Kafka topic積壓資料監控》一文我們透過監控lag來對Kafka某個分割槽topic的消費情況進行告警。透過告警我們發現,分割槽topic的消費積壓情況告警非常頻繁,這無疑會引起開發、運維的重點關注。經過一系列的監控、摸索、實踐、總結,我們逐步發現分割槽topic的消費積壓和以下幾種情況有關:
消費者組頻繁出現Rebalance,導致整個消費者組下的topic都無法消費;
消費者效能問題,無法在超時時間內完成消費;
topic分割槽數和消費者數量不均衡,一個消費者需要消費多個分割槽topic,消費緩慢;
topic分割槽數量變化;
等等
從以上幾種情況分析,無論哪種都和消費者組Rebalance有相關性,都是在經過Rebalance後再重新消費。因此我們還得從Rebalance的角度再出發。
Rebalance再出發
其中關於消費者效能問題,這大多和客戶端的引數設定不恰當相關,這是運維比較難覺察導致。但是為了更全面的瞭解Kafka,我們運維還是很有必要去輕瞭解下的。先從相關引數說起:
1、max.poll.interval.ms
這個引數定義了兩次poll()之間的最大間隔,「預設值為5分鐘」。如果業務處理訊息時間過長,則會導致兩次poll()的時間間隔大於超時時間,從而觸發Rebalance。因此我們應該適當調整每次poll()的數量,以保證在規定時間內處理完訊息,這就需要關注max.poll.records引數了。
2、max.poll.records
這個引數定義了poll()方法最多可以返回多少條訊息,「預設值為500」。poll()的數量如何定義,需要根據業務處理邏輯來決定,例如資料要經過多個資料來源進行處理,一旦某一資料來源訪問超時,無疑都會降低消費效率。比較友好的解決方案是,開發可以根據不同的情況實時調整相關引數,應用側動態感知並進行自動熱載入,達到快速調整消費的效果。
3、消費者組劃分
除了對Kafka引數的調整,我們還要根據業務處理邏輯對消費者組進行提前規劃,避免為了方便將業務相關的topic同時劃分到同一個大消費者組,這樣一旦某個消費者出現問題,將會導致整個消費者組重新Rebalace。如果Rebalance時間過長,此時所有的topic無法消費,那麼實時業務將會受到很大的影響。因此我們要合理分配topic到不同的消費者組。
監控
經過以上的探索分析,我們的首要任務應該是監控Kafka消費者組是否處於Rebalance狀態,進而確定:
分割槽消費者是否發生切換,此時消費者數量不變;
分割槽消費者數量是否減少,出現一個消費者同時消費多個分割槽topic;
分割槽數量和消費者是否為1:1關係,避免出現消費者和分割槽數量不一致的情況;
1.監控思路
在多消費者組的情況下,我們不僅要監控每個消費者組的Rebalance的狀態,還要考慮到未來消費者組的擴充套件,因此我們希望可以透過配置檔案的形式對消費者進行自動發現並新增監控。在此我們仍然是透過Zabbix自動發現,實現對每個消費者組的Rebalance狀態進行監控告警。
2.消費者組自動發現
由於此配置檔案和Kafk topic監控複用同一個檔案,透過Zabbix可對特定消費者組(Group)進行去重識別並行自動發現。
3.獲取消費者組Rebalance狀態
4.最終指令碼
5.Zabbix自動發現
1.自動發現配置
2.監控項原型 以消費者組定義監控項名稱,告警資訊中的名稱能夠幫助我們快速定位配置。
3.觸發器配置 告警觸發時,能夠透過告警資訊快速定位kafka 消費者組故障。
4.告警資訊
其他運維問題簡單處理
以上是在使用Kafka過程中比較常用的幾個命令使用方式。
來自 “ https://mp.weixin.qq.com/s/DomqoaQLKfJYXN0jYKSEvw ”, 原文作者:木訥大叔愛運維;原文連結:https://mp.weixin.qq.com/s/DomqoaQLKfJYXN0jYKSEvw,如有侵權,請聯絡管理員刪除。
相關文章
- Kafka叢集訊息積壓問題及處理策略Kafka
- RabbitMQ的 RPC 訊息模式你會了嗎?MQRPC模式
- kafka高吞吐量之訊息壓縮Kafka
- Kafka Consumer 的 Rebalance 機制Kafka
- Kafka 消費者組 RebalanceKafka
- Kafka 訊息遷移工具的壓測與調優Kafka
- 公司內部一次關於kafka訊息佇列消費積壓故障覆盤分享Kafka佇列
- Kafka - 監控軟體Kafka
- Kafka監控系統Kafka Eagle剖析Kafka
- 如何實現MQ佇列訊息監控MQ佇列
- 分散式訊息Kafka分散式Kafka
- kafka 訊息佇列Kafka佇列
- Kafka訊息佇列Kafka佇列
- 線上訊息佇列發生積壓,如何快速解決?佇列
- RabbitMQ:訊息丟失 | 訊息重複 | 訊息積壓的原因+解決方案+網上學不到的使用心得MQ
- KAFKA監控一條龍:史上最強Kafka看板+監控配置與告警規則Kafka
- 關於MQ的幾件小事(六)訊息積壓在訊息佇列裡怎麼辦MQ佇列
- Python向kafka發訊息PythonKafka
- 伺服器當機會導致Kafka訊息丟失嗎伺服器Kafka
- 實現直播帶貨系統推流,你進行推流監控了嗎?
- Kafka 分散式訊息系統Kafka分散式
- PHP Kafka 訊息佇列使用PHPKafka佇列
- Apache Kafka訊息傳遞策略ApacheKafka
- Kafka 訊息儲存機制Kafka
- Kafka萬億級訊息實戰Kafka
- 前端效能監控:你瞭解 Performance Timeline Level 2 嗎?前端ORM
- 關於 RocketMQ 事務訊息的正確開啟方式 → 你學廢了嗎MQ
- 阿里雲訊息佇列 Kafka-訊息檢索實踐阿里佇列Kafka
- 分散式訊息通訊Kafka(二) - 原理分析分散式Kafka
- 建立訊息佇列(Kafka)源表佇列Kafka
- 使用mongodb、Kafka儲存mqtt訊息MongoDBKafkaMQQT
- Kafka -- 訊息傳送儲存流程Kafka
- 監聽微信公眾號訊息,監聽微信訊息推送
- Conntrack 監控,別等故障了再回來加監控
- Kafka如何保證訊息不丟之無訊息丟失配置Kafka
- 如何應對 RocketMQ 訊息堆積MQ
- 運維監控丨16條常用的Kafka看板監控配置與告警規則運維Kafka
- 如何處理RabbitMQ 訊息堆積和訊息丟失問題MQ