
Kafka 系統在快手有着很廣泛的應用,随着其業務的高速發展, Kafka 叢集的規模也成指數增長,目前快手 Kafka 叢集日消息處理總量達數萬億級别,峰值超過 1 億 /s。與此同時,快手也面臨了很多新問題與技術挑戰。本文整理自快手進階架構師、大資料架構團隊負責人趙健博在 QCon 北京2019 上的演講,他介紹了 Kafka 系統在快手的應用實踐、遇到的問題以及相應的技術的演進過程。
業務場景
先來看業務場景,在快手,Kafka 被大規模使用着。從場景上看,我們把 Kafka 分成了 3 類叢集。第一類,線上叢集,Kafka 作為消息中間件,為不同線上業務之間提供異步消息通知服務;第二類,LOG 叢集,業務程式直接将 LOG 打給 Kafka,并通過 Kafka 進行傳輸與收集,由于資料不落地,是以這個過程不能出現由于 Kafka 問題導緻業務程式受到影響,這對 Kafka 可用性要求很高,另外,LOG 叢集還為重要的實時計算或者模型訓練提供資料源;第三類,離線叢集,LOG 資料最終的彙聚點,資料會被實時 dump 到 HDFS 中,這部分資料用于離線處理。類似的,離線叢集還為次要的實時計算、實時訓練提供資料源。
技術演進
第一個階段:為了支援業務的快速發展,我們首先做了多叢集建設以及增加了 Kafka 平滑擴容功能;
第二個階段,為了保障業務穩定,我們對 Kafka 的可用性進行了改造,經過改造,我們将由于單點當機發現與恢複的時間從 91s 優化到 6s 左右,有 15 倍的提升;
第三個階段,為了增加系統的可維護性以及提升讀系統的運維效率,我們對資料 Mirror 服務做了叢集化建設并開發了資源管理平台;
第四個階段,為了進一步提升 Kafka 的穩定性、性能,我們做了資源隔離、對 cache 進行了改造、并針對消費者進行了智能限速等。
2019 年,技術疊代還在繼續。接下來,我将會介紹其中 5 點的細節:平滑擴容、Mirror 叢集化、資源隔離、cache 改造、消費智能限速。