關於Kafka在360的商業化實踐分享

本文參考閆鎖鵬老師在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 架構簡單一覽

關於Kafka在360的商業化實踐分享


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在360的商業化實踐分享


數據生產端: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邏輯

關於Kafka在360的商業化實踐分享


關於Kafka在360的商業化實踐分享


把消費線程和處理線程分開,分開配置。同時 blocking queue 起到了反壓的效果。

數據高可用

replica + isr 是遠遠不夠的,replica rack aware (機架感知)

關於Kafka在360的商業化實踐分享


這樣我們可以容忍兩個機架的宕機。

負載均衡


關於Kafka在360的商業化實踐分享


關於Kafka在360的商業化實踐分享


基於虛擬節點的一致性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 和視頻。



關於Kafka在360的商業化實踐分享




分享到:


相關文章: