騰訊萬億級大數據組件TubeMQ 正式開源
近日,在ApacheCon 2019 上,騰訊開源管理委員會委員、騰訊開源聯盟主席、Apache 軟件基金會Member 堵俊平介紹了騰訊開源路線圖,宣布騰訊萬億級分佈式消息中間件TubeMQ 正式對外開源,併計劃捐贈給Apache 基金會。
▲ 騰訊開源路線圖
TubeMQ 的原型是騰訊數據平台部在2013年自研的分佈式消息中間件系統(MQ),專注於大數據場景下海量數據的高性能存儲和傳輸,長期服務微信支付、騰訊視頻、廣點通等產品。
▲ TubeMQ 項目介紹
TubeMQ 主要特性:
- 純Java 語言實現
- 引入Master協調節點:相比Kafka依賴於Zookeeper完成元數據的管理和實現HA保障不同,TubeMQ系統採用的是自管理的元數據仲裁機制方式進行,Master節點通過採用內嵌數據庫BDB完成集群內元數據的存儲、更新以及HA熱切功能,負責TubeMQ集群的運行管控和配置管理操作,對外提供接口等;通過Master節點,TubeMQ集群裡的Broker配置設置、變更及查詢實現了完整的自動化閉環管理,減輕了系統維護的複雜度
- 服務器側消費負載均衡:TubeMQ採用的是服務側負載均衡的方案,而不是客戶端側操作,提升系統的管控能力同時簡化客戶端實現,更便於均衡算法升級
- 系統行級鎖操作:對於Broker消息讀寫中存在中間狀態的並發操作採用行級鎖,避免重複問題
- Offset管理調整:Offset由各個Broker獨自管理,ZK只作數據持久化存儲用(最初考慮完全去掉ZK依賴,考慮到後續的功能擴展就暫時保留)
- 消息讀取機制的改進:TubeMQ採用的是消息隨機讀取模式,同時為了降低消息時延又增加了內存緩存讀寫,對於帶SSD設備的機器,增加消息滯後轉SSD消費的處理,解決消費嚴重滯後時吞吐量下降以及SSD磁盤容量小、刷盤次數有限的問題,使其滿足業務快速生產消費的需求
- 消費者行為管控:支持通過策略實時動態地控制系統接入的消費者行為,包括系統負載高時對特定業務的限流、暫停消費,動態調整數據拉取的頻率等;
- 服務分級管控:針對系統運維、業務特點、機器負載狀態的不同需求,系統支持運維通過策略來動態控制不同消費者的消費行為,比如是否有權限消費、消費時延分級保證、消費限流控制,以及數據拉取頻率控制等
- 系統安全管控:根據業務不同的數據服務需要,以及系統運維安全的考慮,TubeMQ系統增加了TLS傳輸層加密管道,生產和消費服務的認證、授權,以及針對分佈式訪問控制的訪問令牌管理,滿足業務和系統運維在系統安全方面的需求
- 資源利用率提升改進:相比於Kafka,TubeMQ採用連接復用模式,減少連接資源消耗;通過邏輯分區構造,減少系統對文件句柄數的佔用,通過服務器端過濾模式,減少網絡帶寬資源使用率;通過剝離對Zookeeper的使用,減少Zookeeper的強依賴及瓶頸限制
- 客戶端改進:基於業務使用上的便利性以,我們簡化了客戶端邏輯,使其做到最小的功能集合,我們採用基於響應消息的接收質量統計算法來自動剔出壞的Broker節點,基於首次使用時作連接嘗試來避免大數據量發送時發送受阻
堵俊平介紹,騰訊每天要處理規模驚人的數據。為支持海量業務,騰訊組建了包含存儲層、數據管理層及分析層3 層結構的數據湖協同方案,向下管理多種數據引擎,向上支撐多種數據應用需求。TubeMQ 就是來源於騰訊數據湖存儲層的消息中間件系統,支撐著海量數據的流入和運轉。經過近7年、萬億規模的海量數據沉澱,TubeMQ 目前日均接入量超過25 萬億條消息。
▲ 騰訊數據湖方案,其絕大多數組件由Apache 的開源項目組成
堵俊平介紹到,騰訊計劃將TubeMQ 捐贈給Apache 基金會,目前已經啟動了相關的孵化流程。