Kafka版本變遷以及版本驗證


版本變化:

Kafka總共發布了七個個大版本,分別是0.7.x、0.8.x、0.9.x、0.10.x、0.11.x、1.x及2.x版本。截止2021.04月,最新版本是Kafka 2.7,也是最新穩定版本,建議升級到2.6.1或2.7.0版本.

1.kafka版本號說明:

以kafka_2.13-2.7.0為例,其中2.13標識編譯kafka集群的scala版本號,kafka的服務端編碼語言為scala,一種更加偏向函數式編程的jvm語言,相對java來說,掌握難度較高;2.7.0標識kafka真正的版本號。kafka的版本號從1.0開始由四位版本號改為了三位,既類似0.9.0.0-->1.0.0。

0.7.x-0.11.x:

kafka基於消息隊列的功能基本完善

1.x-2.x:

持續優化kafka的消息隊列功能,但變化不大,主要優化kafka stream相關特性.

2.版本特性詳細說明:

0.7.x:

上古版本,僅提供基本的消息隊列功能,且無副本機制.不做討論,建議立即升級.

0.8.x

1.增加副本機制

2.引入新版的producer但尚不穩定,bug較多

3.更新了消息的數據結構,把數據偏移量從物理偏移改為邏輯偏移量,在壓縮處理偏移量時,會略微加重cpu的負擔.

不做詳細討論,建議立即升級.

0.9.x.x(2015年底發布):

1.增加基礎的安全認證/權限功能

2.使用java重寫了新版的消費者api,去除了zookeeper的依賴

3.新增Kafka Connect組件用於實現高性能數據抽取

4.新版producer開始穩定

5.consumer仍然不穩定,bug較多.

6.kafka-topics.sh腳本棄用,推薦使用kafka-configs.sh

7.kafka-consumer-offset-checker.sh棄用,推薦kafka-consumer-groups.sh

8.不再支持java1.6和scala2.9

9.增加配額限制,既多租戶控制.

0.10.0.x:

1.引入 Kafka Streams,正式升級成分布式流處理平台,但此時該功能尚不能線上使用, 0.10.2.2 中新版消費者開始穩定.

2.消息格式發生變動,增加了時間戳,此版本升級可能會引起消息格式轉換,然后由於轉換可能會導致kafka的0拷貝機制失效,表現為生產環境的性能下降.故該版本升級 需要謹慎操作,確保客戶端和服務端版本號一致.

變動前格式:

 

變動后格式,在record中新增了timestamp字段:

3.新增kafka streams客戶端,此客戶端僅適用於服務端版本0.10.x及以上集群.

0.10.1.x:

1.日志保留時間判斷時從日志段的最后修改時間改為日志段中消息的最大時間戳。

2.日志滾動時,從基於日志段的創建時間改為基於新消息中的時間戳做判斷,既段中第一條消息的時間戳為T,則在新消息時間戳 >= T + log.roll.ms時發生滾動.

3.Kafka Streams升級到0.10.1.x,向下不兼容

4.新版java consumer支持從后台線程維持心跳,可防止consumer阻塞導致的下線及reblance,新增了幾個與此相關的時間配置,詳見官網.新增支持在分區上按照時間戳搜索offset

0.10.2.x

1.該版本的客戶端可支持與0.10.0及以上的集群通信.

2.服務端支持0.8.x及上的客戶端.

0.11.x.x(2017年6月)

1.提供冪等性 Producer API.冪等性用於支持生產者單次會話中在同一個分區上實現exactly once語義.

2.提供事務支持,但存在少量bug.

3.重構了kafka的消息格式,發生重大變動,總的來講,新的消息格式,在消息批量發送時更加節約空間,消息體value越大越節約時間,主要思想是對時間字段和數字字段采用了新的記錄方法,當數字不是特別大的時候,原來用int標識的字段,只占用1-2個字節即可.消息位移改為起始的邏輯位移+本批消息的相對位移等各種手段,有效的降低消息大小.

順帶提下kafka的消息壓縮:

inner:生產者的原始批量消息
wrapper:broker存儲消息
wrapper中的offset為inner中的最大offset,為partion的絕對位移(非磁盤物理地址,邏輯位移),並保存為相對位移,從0開始

4.客戶端需要升級到該版本,舊的被棄用.

5.默認禁用unclean leader選舉(leader崩潰時從非isr的普通副本中選舉leader),既默認必須從isr副本中選舉新的leader,可配置unclean.leader.election.enable=true支持unclean leader

6.生產者配置block.on.buffer.full,metadata.fetch.timeout.ms並timeout.ms被刪除

7.自動創建主題時,集群broke數量不滿足副本因子offsets.topic.replication.factor配置時,將創建失敗.

8.當使用消息壓縮功能時,提高默認壓縮塊的大小.總之修改了壓縮相關的幾個配置用於提高性能.

9.kafka stream相關的升級,升級時盡量把客戶端版本和服務端保持一致

建議最起碼升級到該版本.

1.0.x

1.默認開啟主題刪除功能.若是不想開啟則delete.topic.enable=false.主題刪除后會刪除數據並且不可逆.

2.對於支持時間戳搜索(如果找不到某個分區的偏移量)的主題,該分區現在包含在搜索結果中,且偏移量值為空。以前,該分區未包含在地圖中。進行此更改是為了使搜索行為與不支持時間戳搜索的主題一致.

3.實現了磁盤故障轉移當Broker的某一塊磁盤損壞時數據會自動轉移到其他正常的磁盤上,Broker還會正常工作,這在之前版本中則會直接導致Broker宕機,因此Kafka的可用性與可靠性得到了提升;開始支持副本跨路徑遷移,分區副本可以在同一Broker不同磁盤目錄間進行移動,這對於磁盤的負載均衡非常有意義

4.添加了KafkaStorageException,它是可重試的異常。如果客戶端的FetchRequest或ProducerRequest的版本不支持KafkaStorageException,則會在響應中將KafkaStorageException轉換為NotLeaderForPartitionException.

5.在默認的JVM設置中,-XX:+ DisableExplicitGC被-XX:+ ExplicitGCInvokesConcurrent代替。在某些情況下,這有助於避免在通過直接緩沖區分配本機內存的過程中出現內存不足異常.

6.java客戶端和工具現在可以接受任何字符串作為客戶端ID

7.kafka-consumer-offset-checker.sh被刪除.使用kafka-consumer-groups.sh獲取消費者群組的詳細信息.

8.kafka stream做了相應升級.

1.1.x

1.kafka默認日志組件依賴修改,用戶可以選擇slf4j logback等.

2.增強kafka stream

3.增強kafka connect,支持消息頭

2.0.0

1.offset默認保留時間從1天改為7天

2.不再支持java7,最低支持到java8.

3.安全相關修改

4.客戶端scala相關一些不再支持或已被刪除,更推薦java相關的客戶端

5.Connect組件默認json轉換器.

6.其他一些細節修改.

2.1.x:

改動了一些細節

開始支持ZStandard的壓縮方式,提升消息壓縮比,顯著減少磁盤空間和網絡io消耗.

2.2.x

1.Kafka Streams 2.2.1需要0.11或更高的消息格式,並且不適用於較舊的消息格式

2.從此版本開始必須顯式設置消費者組id,否則將無法訂閱主題和提交offset.建議組id不要使用空字符串.

3.kafka-topics.sh可以直接連接--bootstrap-server,舊的--zookeeper選項仍然可用.

2.3.x

1.kafka connect引入新的基於增量協作式重新平衡的重新平衡協議.

2.消費者引入靜態成員,以減少滾動升級期間的reblance.

3.Kafka Streams 2.3.0需要0.11或更高的消息格式,並且不適用於較早的消息格式

2.4.x

1.zookeeper依賴升級到3.5.7

2.該bin/kafka-preferred-replica-election.sh命令行工具已被棄用。已由代替bin/kafka-leader-election.sh

3.生產者默認分區策略改為粘性分區策略,這意味着具有空鍵且沒有分配分區的特定主題的記錄將被發送到同一分區,直到准備好發送批次為止。創建新批次時,將選擇一個新分區。這樣可以減少產生的延遲,但是在極端情況下,可能會導致記錄在分區之間的分布不均。通常,用戶不會受到影響,但是這種差異在測試和其他情況下會在很短的時間內生成記錄可能會很明顯。

4.優化consumer重平衡相關特性.

2.5.x-2.7.x

1.簡化kafka事務的擴展實現,改進exactly once語音.

2.其他細節修改

綜述:

從上面的版本迭代可以看出主要是以下幾個版本可以作為分水嶺:

0.11.x擁有的特性:

傳統消息隊列及副本容災功能

支持exactly once 恰好一次語義

事務支持.

kafka stream支持.

consumer 消息拉取線程和心跳線程分開

截止到0.11.x,kafka作為傳統的發布訂閱功能基本完善,建議至少升級到該版本.

1.0.x

新增磁盤故障轉移

新增跨副本路徑遷移

2.x

2.1.x支持ZStandard的壓縮,提高吞吐性能

優化生產者和消費者

其中2.6.1修復了2.6.0的41個問題,建議生產環境可升級到2.6.1或2.7.0。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM