導語:本文介紹了騰訊雲消息隊列 CKafka 監控的最佳實踐指南,幫助開發者免除繁瑣的運維工做,並快速發現問題,提升工做效率。web
消息隊列 CKafka(Cloud Kafka)是基於開源 Apache Kafka 消息隊列引擎,提供高吞吐性能、高可擴展性的消息隊列服務。消息隊列 CKafka 完美兼容 Apache Kafka 0.九、0.十、1.一、2.4 版本接口,在性能、擴展性、業務安全保障、運維等方面具備超強優點,讓您在享受低成本、超強功能的同時,免除繁瑣運維工做。緩存
產品特色:安全
收發解耦:有效解耦生產者、消費者之間的關係。在確保一樣的接口約束的前提下,容許獨立擴展或修改生產者 / 消費者間的處理過程。服務器
削峯填谷:消息隊列 CKafka 可以抵擋突增的訪問壓力,不會由於突發的超負荷的請求而徹底崩潰,有效提高系統健壯性。微信
順序讀寫:消息隊列 CKafka 可以保證一個 Partition 內消息的有序性。和大部分的消息隊列一致,消息隊列 CKafka 能夠保證數據按照順序進行處理,極大提高磁盤效率。網絡
異步通訊:不少時候,用戶不想也不須要當即處理消息。消息隊列提供了異步處理機制,容許用戶把一個消息放入隊列,但並不當即處理它。想向隊列中放入多少消息就放多少,而後在須要的時候再去處理它們。session
Producer 和 Consumer架構
Producer (生產者):生產者即數據的發佈者,該角色將消息發佈到 Kafka 的 topic 中。broker 接收到生產者發送的消息後,broker 將該消息追加到當前用於追加數據的 segment 文件中。生產者發送的消息,存儲到一個 partition 中,生產者也能夠指定數據存儲的 partition。app
Consumer (消費者):消費者能夠從 broker 中讀取數據。消費者能夠消費多個 topic 中的數據。
運維
Broker 與 Cluster
Broker:Kafka 集羣包含一個或多個服務器,服務器節點稱爲 broker。
Cluster:多個 Broker 組成一個 Cluster。
Topic 與 Partition
Topic:(主題)是一個邏輯的概念,就是做爲消息的歸類,每一條發送到 Kafka 的消息都有一個類別,這就是 topic。producer 負責將消息發送到特定的 topic(發送到 Kafka 集羣中的每一條消息都必須指定一個 topic),而 consumer 負責訂閱 topic 並進行消費。
Partition:(分區)是物理的概念,每一個 topic 包含一個或多個 Partition。一個分區只屬於一個主題。
高吞吐
消息隊列 CKafka 中存在大量的網絡數據持久化到磁盤和磁盤文件經過網絡發送的過程。這一過程的性能直接影響 Kafka 的總體吞吐量,主要經過如下幾點實現:
1. 高效使用磁盤:磁盤中順序讀寫數據,提升磁盤利用率。
寫 message:消息寫到 page cache,由異步線程刷盤。
讀 message:消息直接從 page cache 轉入 socket 發送出去。
當從 page cache 沒有找到相應數據時,此時會產生磁盤 IO,從磁盤加載消息到 page cache,而後直接從 socket 發出去。
2. Broker 的零拷貝(Zero Copy)機制:使用 sendfile 系統調用,將數據直接從頁緩存發送到網絡上。
3. 減小網絡開銷
數據壓縮下降網絡負載。
批處理機制:Producer 批量向 Broker 寫數據、Consumer 批量從 Broker 拉數據。
數據持久化
消息隊列 CKafka 的數據持久化主要經過以下原理實現:
Topic 中 Partition 存儲分佈
在消息隊列 CKafka 文件存儲中,同一 Topic 有多個不一樣 Partition,每一個 Partition 在物理上對應一個文件夾,用戶存儲該 Partition 中的消息和索引文件。例如,建立兩個 Topic,Topic1 中存在 5 個 Partition,Topic2 中存在 10 個 Partition,則整個集羣上會相應生成 5 + 10 = 15 個文件夾。
Partition 中文件存儲方式
Partition 物理上由多個 segment 組成,每一個 segment 大小相等,順序讀寫,快速刪除過時 segment, 提升磁盤利用率。
水平擴展(Scale Out)
一個 Topic 可包含多個 Partition,分佈在一個或多個 Broker 上。
一個消費者可訂閱其中一個或者多個 Partition。
Producer 負責將消息均衡分配到對應的 Partition。
Partition 內消息是有序的。
Consumer Group
消息隊列 CKafka 不刪除已消費的消息。
任何 Consumer 必須屬於一個 Group。
同一 Consumer Group 中的多個 Consumer 不一樣時消費同一個 Partition。
不一樣 Group 同時消費同一條消息,多元化(隊列模式、發佈訂閱模式)。
多副本
多副本設計可加強系統可用性、可靠性。
[1] 架構圖 & 監控指標
相關概念:
Broker:kafka 服務器
Topic:消息類別
Partition:物理上的概念,一個 Topic 能夠包含多個 Partition
Offset:消息在 partition 的惟一序號
Producer:生產者,負責發佈消息
Consumer:消費者,負責消費消息
Consumer Group:消費者分組,消費者標籤,用於將消費者分類
Zookeeper 集羣:存儲 meta 數據、leader 選舉、故障容錯等
[2] 全量指標列表
Period 爲 60 秒和 5min
注:上方表格加粗的爲核心指標
[3] 告警核心指標 & 最佳閾值
1. 消息服務 CKafka - 實例
磁盤使用百分比 > 80%
注:表明集羣容量使用率,集羣容量使用率達到 100% 會被寫封禁,影響用戶寫入,因此須要用戶注意提早擴容。
實例鏈接數百分比 > 80%
注:預防實例鏈接數過多,致使實例沒法創建更多鏈接形成客戶端沒法訪問 Ckafka 集羣。
實例生產帶寬百分比 > 80%
注:實例生產帶寬百分比 (佔用配額百分比),預防生產帶寬太高,致使生產消息失敗。
實例消費帶寬百分比 > 80%
注:實例消費帶寬百分比 (佔用配額百分比),預防消費帶寬太高,致使消費消息失敗。
2. CKafka-Topic
Topic 生產流量 > 6000MB
注:按照所選擇的時間粒度統計求和,須要根據需求來設置閾值的大小,預防消息生產速度過慢。
Topic 消費流量 > 6000MB
注:按照所選擇的時間粒度統計求和,須要根據需求來設置閾值的大小,預防消息消費速度過慢,同時預防客戶端出現 Rebalance。
3. CKafka-ConsumerGroup-Topic
主題級別未消費消息個數 > 100000
注:須要根據需求來設置閾值的大小,防止消費數據過慢,致使消息積壓,預防業務中消費消息的實時性。
4. CKafka-ConsumerGroup-Partition
消費分組未消費消息數 > 100000
注:須要根據需求來設置閾值的大小,防止消費數據過慢,致使消息積壓,預防業務中消費消息的實時性,同時預防客戶端出現 Rebalance。
注意:如何避免客戶端出現 Rebalance?
消息隊列 Kafka 的 Consumer 沒有獨立線程維持心跳,而是把心跳維持與 poll 接口耦合在一塊兒,若是用戶消費出現卡頓會致使心跳超時,引起 Rebalance。
解決方案:
1. 儘可能提升消費速度;
2. max.poll.records 設置小一點,這個參數是配置控制心跳的超時事件,能夠由客戶端自行設置;
3. session.timeout.ms 設置大一點,這個參數控制每次 poll 返回的最大消息數量。
1. 配置告警
https://console.cloud.tencent.com/monitor/overview 進入騰訊雲監控,選擇告警配置下告警策略,並新建告警策略。
設置消息隊列告警:
1. 輸入策略名稱
2. 輸入備註
3. 選擇策略類型
4. 選擇消息隊列 Ckafka 實例
5. 設置告警指標及觸發條件
6. 選擇告警渠道,包括接收對象,接收渠道,有效時段,接收語言
7. 保存
配置的 Ckafka 實例告警總覽
2. 配置 Dashboard
騰訊雲監控 Dashboard 提供了消息隊列 CKafka 的預設面板,點擊https://console.cloud.tencent.com/monitor/overview 進入騰訊雲監控,選擇 Dashboard,而後選擇預設 Dashboard 下的消息隊列 CKafka 預設面板。
設置 CKafka 的 Dashboard:
1. 選擇 CKafka 實例
2. 選擇 CKafka-Topic
3. 選擇 CKafka-ConsumerGroup-Topic
4. 選擇 CKafka-ConsumerGroup-Partition
選擇完 CKafka 實例,CKafka-Topic,CKafka-ConsumerGroup-Topic,CKafka-ConsumerGroup-Partition 以後,會自動展現出預設的 Dashboard。
消息隊列 CKafka 預設面板 總覽:
《不要再亂下載JDK了:Elasticsearch在國產化ARM環境下的首個大坑》
《騰訊雲中間件團隊在Service Mesh中的實踐與探索》
掃描下方二維碼關注本公衆號,
瞭解更多微服務、消息隊列的相關信息!
本文分享自微信公衆號 - 騰訊雲中間件(gh_6ea1bc2dd5fd)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。