買了極客時間胡夕老師的課,上面講到kafka各版本之間的差異,在這裏總結一下,時機應用的時候該如何去選擇kafka版本。
Kafka 版本命名
kafka版本已經更新到2.5了
我們看下kafka版本號的組成kafka_2.12-2.5.0.tgz前面的2.12表示的是kafka開發語言Scala的版本,後面的2.5.0纔是kafka版本。
作爲Javaer Scala我們都熟悉,JVM系的語言。設計上很有優勢,以至於java的很多新特性都跟Scala靠攏,比如Lambda表達式,函數式編程等。現在kafka客戶端都用java語言開發了。據說是kafka團隊進了一批javaer的原因。
言歸正傳,kafka_2.12-2.5.0.tgz我們說2.5.0是kafka版本號,前面的2表示大版本號(Minor Version),5表示修訂版本號(Patch)
Kafka 版本演進
Kafka 目前總共演進了 7 個大版本,分別是 0.7、0.8、0.9、0.10、0.11、1.0 和 2.0,其中的小版本和 Patch 版本很多。哪些版本引入了哪些重大的功能改進?
0.7 版本
上古版本,沒接觸過,也沒用過,相信現在也很少有人在用了。因爲它只提供了消息隊列的功能,連副本都沒有。所以對古老的東西我們心存敬意就好了。
0.8版本
引入了副本機制,這是kafka變成真正的高可用分佈式消息隊列解決方案。消費者,生產者用的還是老API,老API有個特徵就是需要指定Zookeeper地址,而非broker地址。生產者API用的是同步消息機制,可見吞吐量肯定很一般。雖然也支持了異步方式,但會導致消息的丟失。
0.8.2.0:引入了新版本 Producer API,即需要指定 Broker 地址的 Producer。
0.8.2.2:建議使用該版本老的消費者API,因爲比較穩定。不建議使用改版本新的生產者API,我們不但要對古老的東西表示敬畏,還要對新的東西保持懷疑,因爲新代表着不穩定,代表着BUG。
0.9版本
2015 年 11 月更新了重量級版本0.9.0.0.
- 加了基礎的安全認證 / 權限功能
- 用 Java 重寫了新版本消費者 API
- 引入了 Kafka Connect 組件用於實現高性能的數據抽取
建議:
- 使用該版本新的Producer API,因爲已經迭代的比較穩定了
- 不建議使用該版本新的Consumer API,因爲還不穩定。
0.10版本
這是一個里程碑式的版本發佈,因爲該版本引入了 Kafka Streams,kafka成爲了真正的分佈式流處理平臺。
0.10 大版本包含兩個小版本:0.10.1 和 0.10.2,這兩個版本的更新都在kafka Streams上,如果當做消息引擎,並沒有做什麼改變。
建議:
0.10.2.2版本我們終於等來了穩定的新Consumer API,而且Producer API也修復了一些影響性能的bug。所以強烈建議升級該版本的新Consumer API和Producer API。
0.11版本
2017 年 6 月發佈了0.11版本,該版本有兩個重量級更新:
- 提供冪等性 Producer API 以及事務(Transaction) API
- 對 Kafka 消息格式做了重構。
這兩個更新,我覺得第一個更加讓人振奮一點。畢竟 Producer 實現冪等性以及支持事務都是 Kafka 實現流處理結果正確性的基石。沒有它們,Kafka Streams 在做流處理時無法向批處理那樣保證結果的正確性。同樣是新的,事務 API 有一些 Bug,不算十分穩定。另外事務 API 主要是爲 Kafka Streams 應用服務的,實際使用場景中用戶利用事務 API 自行編寫程序的成功案例並不多見。
第二個改變。由於消息格式的改變,引起消息格式轉換帶來的性能問題,所以要謹慎選擇該版本。如果選擇該版本建議選擇0.11.0.3版本,因爲該版本的消息引擎功能已經非常完善了。
1.0 和 2.0 版本
兩個大版本主要還是 Kafka Streams 的各種改進,在消息引擎方面並未引入太多的重大功能特性。
總結:要對古老版本心存敬意,敬而遠之。對新版本不要做測試bug的小白鼠。