物聯網雲平臺開發武器庫 https://www.yuque.com/shizhiy...前端
咱們談了 Kafka 當前的定位問題,Kafka 再也不是一個單純的消息引擎系統,而是可以實現精確一次(Exactly-once)處理語義的實時流處理平臺。數據庫
你可能據說過 Apache Storm、Apache Spark Streaming 亦或是 Apache 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 不是一個開源框架嗎,什麼叫有幾種 Kafka 啊? 實際上,Kafka 的確有好幾種,這裏我不是指它的版本,而是指存在多個組織或公司發佈不一樣的 Kafka。你必定據說過Linux 發行版吧,好比咱們熟知的 CentOS、RedHat、Ubuntu 等,它們都是 Linux 系統,但爲何有不一樣的名字呢?其實就是由於它們是不一樣公司發佈的 Linux 系統,即不一樣的發行版。雖然說在 Kafka 領域沒有發行版的概念,但你姑且能夠這樣近似地認爲市面上的確存在着多個 Kafka「發行版」。
下面我就來梳理一下這些所謂的「發行版」以及你應該如何選擇它們。固然了,「發行版」這個詞用在 Kafka 框架上並不嚴謹,但爲了便於咱們區分這些不一樣的 Kafka,我仍是勉強套用一下吧。不過切記,當你之後和別人聊到這個話題的時候最好不要說起「發行版」這個詞 ,由於這種提法在 Kafka 生態圈很是陌生,說出來不免貽笑大方。機器學習
Apache Kafka 是最「正宗」的 Kafka,也應該是你最熟悉的發行版了。自 Kafka 開源伊始,它便在 Apache 基金會孵化並最終畢業成爲頂級項目,它也被稱爲社區版 Kafka。我們就是以這個版本的 Kafka 做爲模板來學習的。更重要的是,它是後面其餘全部發行版的基礎。也就是說,後面提到的發行版要麼是原封不動地繼承了 Apache Kafka,要麼是在此之上擴展了新功能,總之 Apache Kafka 是咱們學習和使用 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 公司吧。2014 年,Kafka 的 3 個創始人 Jay Kreps、NahaNarkhede 和饒軍離開 LinkedIn 創辦了 Confluent 公司,專一於提供基於 Kafka 的企業級流處理解決方案。2019 年 1 月,Confluent 公司成功融資 D 輪 1.25 億美圓,估值也到了 25 億美圓,足見資本市場的青睞。性能
這裏說點題外話, 饒軍是咱們中國人,清華大學畢業的大神級人物。咱們已經看到愈來愈多的 Apache 頂級項目創始人中出現了中國人的身影,另外一個例子就是 Apache Pulsar,它是一個以戰勝 Kafka 爲目標的新一代消息引擎系統。至於在開源社區中活躍的國人更是數不勝數,這種現象實在使人振奮。還說回 Confluent 公司,它主要從事商業化 Kafka 工具開發,並在此基礎上發佈了Confluent Kafka。Confluent Kafka 提供了一些 Apache Kafka 沒有的高級特性,好比跨數據中心備份、Schema 註冊中心以及集羣監控工具等。
下面來看 Confluent Kafka。Confluent Kafka 目前分爲免費版和企業版兩種。前者和Apache Kafka 很是相像,除了常規的組件以外,免費版還包含 Schema 註冊中心和 RESTproxy 兩大功能。前者是幫助你集中管理 Kafka 消息格式以實現數據前向 / 後向兼容;後者用開放 HTTP 接口的方式容許你經過網絡訪問 Kafka 的各類功能,這兩個都是 ApacheKafka 所沒有的。
除此以外,免費版包含了更多的鏈接器,它們都是 Confluent 公司開發並認證過的,你能夠無償使用它們。至於企業版,它提供的功能就更多了。在我看來,最有用的當屬跨數據中心備份和集羣監控兩大功能了。多個數據中心之間數據的同步以及對集羣的監控從來是Kafka 的痛點,Confluent Kafka 企業版提供了強大的解決方案幫助你「幹掉」它們。
不過 Confluent Kafka 的一大缺陷在於,Confluent 公司暫時沒有發展國內業務的計劃,相關的資料以及技術支持都很欠缺,不少國內 Confluent Kafka 使用者甚至沒法找到對應的中文文檔,所以目前 Confluent Kafka 在國內的普及率是比較低的。
一言以蔽之,若是你須要用到 Kafka 的一些高級特性,那麼推薦你使用 Confluent Kafka
Cloudera 提供的 CDH 和 Hortonworks 提供的 HDP 是很是著名的大數據平臺,裏面集成了目前主流的大數據框架,可以幫助用戶實現從分佈式存儲、集羣調度、流處理到機器學習、實時數據庫等全方位的數據處理。我知道不少創業公司在搭建數據平臺時首選就是這兩個產品。不論是 CDH 仍是 HDP 裏面都集成了 Apache Kafka,所以我把這兩款產品中的Kafka 稱爲 CDH Kafka 和 HDP Kafka。固然在 2018 年 10 月兩家公司宣佈合併,共同打造世界領先的數據平臺,也許之後 CDH和 HDP 也會合併成一款產品,但能確定的是 Apache Kafka 依然會包含其中,並做爲新數
據平臺的一部分對外提供服務。
大數據雲公司發佈的 Kafka(CDH/HDP Kafka)。這些大數據平臺自然集成了 Apache Kafka,經過便捷化的界面操做將 Kafka 的安裝、運維、管理、監控所有統一在控制檯中。若是你是這些平臺的用戶必定以爲很是方便,由於全部的操做均可以在前端 UI 界面上完成,而沒必要去執行復雜的 Kafka 命令。另外這些平臺提供的監控界面也很是友好,
你一般不須要進行任何配置就能有效地監控 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
咱們今天討論了不一樣的 Kafka「發行版」以及它們的優缺點,根據這些優缺點,咱們能夠有針對性地根據實際需求選擇合適的 Kafka。下一期,我將帶你領略 Kafka 各個階段的發展歷程,這樣咱們選擇 Kafka 功能特性的時候就有了依據,在正式開啓 Kafka 應用之路以前也夯實了理論基礎。
最後咱們來複習一下今天的內容: