Kafka實戰(四) -Kafka門派知多少

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實戰
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章