Kafka不是一個單純的消息引擎系統,而是能夠實現精確一次(Exactly-once)處理語義的實時流處理平臺
Storm/Spark Streaming/Flink,在大規模流處理領域主流
Kafka經過這麼長時間不斷的迭代,現在已經能夠稍稍比肩這些框架
- Kafka社區對於這些框架心存敬意
- 目前國內鮮有大廠將Kafka用於流處理的尷尬境地,畢竟Kafka是從消息引擎“半路出家”轉型成流處理平臺的,它在流處理方面的表現還需要經過時間的檢驗。
從流處理平臺擴展到流處理生態圈,Kafka更是還有很長的路要走
Kafka Streams提供了Kafka實時處理流數據的能力
但是其實還有一個重要的組件Kafka Connect
在評估流處理平臺時,框架本身的性能、所提供操作算子(Operator)的豐富程度固然是重要的評判指標,但框架與上下游交互的能力也是非常重要的
能夠與之進行數據傳輸的外部系統越多,圍繞它打造的生態圈就越牢固,因而也就有更多的人願意去使用它,從而形成正向反饋,不斷地促進該生態圈的發展。
就Kafka而言,Kafka Connect通過一個個具體的連接器(Connector),串聯起上下游的外部系統。
- 整個Kafka生態圈如下圖所示
外部系統只是Kafka Connect組件支持的一部分而已
使用Kafka Connect組件的用戶越來越多,相信在未來會有越來越多的人開發自己的連接器
清晰地瞭解Kafka的發展脈絡和生態圈現狀,對於指導我們選擇合適的Kafka版本大有裨益
Kafka門派幾何?
不是指版本,而是指存在多個組織或公司發佈不同的Kafka
你一定聽說過Linux發行版,比如CentOS、RedHat、Ubuntu等,都是Linux系統,但爲什麼有不同的名字呢?
其實就是因爲它們是不同公司發佈的Linux系統,即不同的發行版。雖說在Kafka領域沒有發行版的概念,但你姑且可以這樣近似地認爲市面上的確存在着多個Kafka“發行版”。
下面我就來梳理一下這些所謂的“發行版”以及你應該如何選擇它們。
當然了,“發行版”這個詞用在Kafka框架上並不嚴謹,但爲了便於我們區分這些不同的Kafka,勉強套用
Apache Kafka
最“正宗”的Kafka,也應該是你最熟悉的發行版了。自Kafka開源伊始,它便在Apache基金會孵化並最終畢業成爲頂級項目,它也被稱爲社區版Kafka
它是後面其他所有發行版的基礎。也就是說,後面提到的發行版
- 原封不動地繼承了Apache Kafka
- 在此之上擴展了新功能
總之Apache Kafka是我們學習和使用Kafka的基礎。
Confluent Kafka
2014年,Kafka的3個創始人Jay Kreps、Naha Narkhede和饒軍離開LinkedIn創辦了Confluent公司,專注於提供基於Kafka的企業級流處理解決方案。
2019年1月,Confluent公司成功融資D輪1.25億美元,估值也到了25億美元,足見資本市場的青睞。
還說回Confluent公司,它主要從事商業化Kafka工具開發,並在此基礎上發佈了Confluent Kafka。Confluent Kafka提供了一些Apache Kafka沒有的高級特性,比如跨數據中心備份、Schema註冊中心以及集羣監控工具等。
Cloudera/Hortonworks Kafka
Cloudera提供的CDH和Hortonworks提供的HDP是非常著名的大數據平臺,裏面集成了目前主流的大數據框架,能夠幫助用戶實現從分佈式存儲、集羣調度、流處理到機器學習、實時數據庫等全方位的數據處理
很多創業公司在搭建數據平臺時首選就是這兩個產品。不管是CDH還是HDP裏面都集成了Apache Kafka
2018年10月兩家公司宣佈合併,共同打造世界領先的數據平臺,也許以後CDH和HDP也會合併成一款產品,但能肯定的是Apache Kafka依然會包含其中,並作爲新數據平臺的一部分對外提供服務。
特點比較
Apache Kafka
依然是開發人數最多、版本迭代速度最快的Kafka
在2018年度Apache基金會郵件列表開發者數量最多的Top 5排行榜中,Kafka社區郵件組排名第二位。如果你使用Apache Kafka碰到任何問題並提交問題到社區,社區都會比較及時地響應你。這對於我們Kafka普通使用者來說無疑是非常友好的。
但是Apache Kafka的劣勢在於它僅僅提供最最基礎的組件,特別是對於前面提到的Kafka Connect而言,社區版Kafka只提供一種連接器,即讀寫磁盤文件的連接器,而沒有與其他外部系統交互的連接器,在實際使用過程中需要自行編寫代碼實現,這是它的一個劣勢
Apache Kafka沒有提供任何監控框架或工具。顯然在線上環境不加監控肯定是不可行的,你必然需要藉助第三方的監控框架實現對Kafka的監控。好消息是目前有一些開源的監控框架可以幫助用於監控Kafka(比如Kafka manager)。
如果僅僅需要一個消息引擎系統亦或是簡單的流處理應用場景,同時需要對系統有較大把控度,那麼推薦使用Apache Kafka
Confluent Kafka
Confluent Kafka目前分爲免費版和企業版,前者和Apache Kafka非常相像,除了常規的組件之外,免費版還包含
- Schema註冊中心
幫助你集中管理Kafka消息格式以實現數據前向/後向兼容
- REST proxy
用開放HTTP接口的方式允許你通過網絡訪問Kafka的各種功能
這兩個都是Apache Kafka所沒有的。
免費版包含了更多的連接器,它們都是Confluent公司開發並認證過的,你可以免費使用它們
至於企業版,它提供的功能就更多了
最有用的當屬跨數據中心備份和集羣監控兩大功能了。多個數據中心之間數據的同步以及對集羣的監控歷來是Kafka的痛點,Confluent Kafka企業版提供了強大的解決方案幫助你“幹掉”它們。
不過Confluent Kafka的一大缺陷在於,Confluent公司暫時沒有發展國內業務的計劃,相關的資料以及技術支持都很欠缺,很多國內Confluent Kafka使用者甚至無法找到對應的中文文檔,因此目前Confluent Kafka在國內的普及率是比較低的。
如果需要用到Kafka的一些高級特性,那麼推薦使用Confluent Kafka
CDH/HDP Kafka
大數據雲公司發佈的Kafka(CDH/HDP Kafka)
這些大數據平臺天然集成了Apache Kafka,通過便捷化的界面操作將Kafka的安裝、運維、管理、監控全部統一在控制檯中。如果你是這些平臺的用戶一定覺得非常方便,因爲所有的操作都可以在前端UI界面上完成,而不必去執行復雜的Kafka命令。另外這些平臺提供的監控界面也非常友好,你通常不需要進行任何配置就能有效地監控 Kafka。
但這樣做的結果是
- 直接降低了你對Kafka集羣的掌控程度
畢竟你對下層的Kafka集羣一無所知,你怎麼能做到心中有數呢?
- 滯後性
由於它有自己的發佈週期,因此是否能及時地包含最新版本的Kafka就成爲了一個問題。比如CDH 6.1.0版本發佈時Apache Kafka已經演進到了2.1.0版本,但CDH中的Kafka依然是2.0.0版本,顯然那些在Kafka 2.1.0中修復的Bug只能等到CDH下次版本更新時纔有可能被真正修復。
簡單來說,如果需要快速地搭建消息引擎系統,或者你需要搭建的是多框架構成的數據平臺且Kafka只是其中一個組件,那麼推薦使用這些大數據雲公司提供的Kafka。
總結
Apache Kafka,也稱社區版Kafka
- 優勢在於迭代速度快,社區響應度高,使用它可以讓你有更高的把控度
- 缺陷在於僅提供基礎核心組件,缺失一些高級的特性。
Confluent Kafka,Confluent公司提供的Kafka
- 優勢在於集成了很多高級特性且由Kafka原班人馬打造,質量上有保證
- 缺陷在於相關文檔資料不全,普及率較低,沒有太多可供參考的範例。
CDH/HDP Kafka,大數據雲公司提供的Kafka,內嵌Apache Kafka
- 優勢在於操作簡單,節省運維成本
- 缺陷在於把控度低,演進速度較慢。
參考
- Apache Kafka實戰