本文參考閆鎖鵬老師在2019DAMS上海站關於Kafka在360的商業化實踐分享。
關於作者:近10年基礎架構與大數據開發經驗,2013年加入360商業化 團隊,負責消息隊列系統,消息落地系統,實時計算平臺等基礎架構 開發與運維。同時涉及微服務架構,監控系統等基礎設施,致力於為 商業化團隊提供穩定高效的基礎服務。文章大綱
•Why kafka
•360商業化kafka現狀
•kafka client框架
•數據高可用
•負載均衡
•Authorization and ACLs
•Quota機制
•跨IDC數據同步
•監控告警
•Tools
•線上問題與解決
Why Kafka
對比了以下幾個消息隊列,我們最終選擇了 Kafka 做我們的消息中間件。
數據可靠性延遲單機吞吐社區活躍度客戶端ActiveMQ中/萬級不太活躍支持全面RabbitMQ高微秒萬級活躍支持全面Kafka高毫秒十萬級活躍支持全面RocktMQ高毫秒十萬級有待加強有待提升
Kafka 好在哪?
•hight performance : sendfile + pagecage 實現零拷貝。數據寫入按照 apendfile 的方式,這樣普通的磁盤也可以實現很大的吞吐。
•high avaliable : replica + isr•fault tolerance : controler 集群級別管理和 coordinator: 業務級別管理,這兩個角色是由集群中某一個 Broker 擔任,如果這個 Broker 出現故障,會選舉出另一個 Broker 來擔任這兩個角色。有一種去中心化的思想在裡面。
•CAP trade-off(權衡):高一致性或高可用可配置。要麼 CP 要麼 AP, 支持 topic 級別的配置。
•consumers groups : 可獨立重複 消費、可回放。可以根據 offset 開始消費。
kafak 架構簡單一覽
360 kafka 集群現狀
•千億級日誌量,PB級數據量
•集群規模: 100+ 萬兆網卡機器
•topic最大峰值60w
•qps 集群峰值500w qps
物理機配置
•cpu: 24•network: 10Gb/s
•mem: 128GB
•disk: HDD 4TB*12 JBOD/RAID10
kafka版本1.1.1 (0.11+ recommend )
數據生產端:kafka-clients / flume / logstash
數據消費端:Spark/ Flink / Strom / hamal / ES
其中 hamal 是團隊單獨開發的一個 ETL 框架,目的是隻需要消費一次 kafka , 可以把數據從kafka落入到hive、hdfs等不同的應用場景中。開源的框架:kafka connector 等也可以實現,但是不能滿足我們需求。
kafka client 框架
首先我們為什麼要做這個東西?
設計原則:極端情況下可用, 網絡或集群異常 框架處理所有細節,業務接口簡單,減少業務犯錯可能
比如:網絡異常的時候,先把數據存放在本地磁盤,等網絡恢復的時候再發送。
LogProducer Framework at least once語義
LogConsumer Framework at least once語義
exactly once語義: 業務需實現rollback邏輯
把消費線程和處理線程分開,分開配置。同時 blocking queue 起到了反壓的效果。
數據高可用
replica + isr 是遠遠不夠的,replica rack aware (機架感知)
這樣我們可以容忍兩個機架的宕機。
負載均衡
基於虛擬節點的一致性hash
•添加移除節點僅需遷移很小部分數據•通過權重設置支持不同性能機器加入集群(虛擬節點數量作為權重)•replica rack aware
基於disk rebalance與leader負載 kafka支持版本1.1.0+
Authorization and ACLs
1、白名單機制(360在用)
工單流程管理合法topics, consumers, 定期監測非法topics, consumer group 並做deny處理
2、基於用戶鑑權,授權機制(官網提供的)
•基於SSL/SASL 鑑權
•需要客戶端設置支持
•會有一定的性能損耗
Quota(配額) 機制
兩種配額策略:
•限制帶寬
•限制請求速率
三個業務優先級:高、中、低
可批量對某優先級的業務升降機操作。
跨IDC數據同步
•基於mirrormaker
•IDC間數據只同步一份
•所有業務只做本IDC讀寫
•基於mesos + marathon paas化,提高服務SLA
監控告警
•jmx exporter + prometheus + grafana
•kafka manager
•burrow•wonder
Tools
•deploy tool: ansible-playbook
•migration tool•rebalance tool
•offset reset tool
線上問題解決
磁盤故障檢測:
smartctl -a /dev/sda(PASSED && 197 Current_Pending_Sector)
bootstrap.server
性能瓶頸 : vip bind
consumer重啟不消費:
https://issues.apache.org/jira/browse/KAFKA-5413
升級到0.11+版本 使用kafka-offset-reset工具做group遷移
PS:關注文末賬號,後臺回覆 360-kafka 獲取本文 pdf 和視頻。
閱讀更多 大數據與機器學習 的文章