天天看點

Kafka Consumer各版本分析總結

又是很久沒有寫技術文章了, 平時的東西會記錄在自己的本地, 比較友善; 但是搬上Blog的過程需要重新的總結和回顧甚至排版, 真沒有那麼多時間弄這些. 

進入正題. Kafka從0.7版本到現在的0.10版本, 經曆了巨大的變化; 而其中, 首當其沖的是Consumer的機制.

Kafka最早設計Consumer的時候, 大方向比較明确, 就是同時支援Subscribe功能和Message Queue功能. 語義設計上很清晰,但是實作之後, 發現有一些問題. 主要問題集中在:

1 使用者希望自己能夠控制Offset的儲存和讀取; 

0.8.0 SimpleConsumer Example

2 Offset儲存在Zookeeper中對Zookeeper帶來壓力較大, 需要脫離的ZK的依賴;

Committing and fetching consumer offsets in Kafka

Offset Management

https://issues.apache.org/jira/browse/KAFKA-657

3 使用者希望能獲得Offset并且自行決定儲存的位置;

4 使用者自己控制Offset時, 卻會陷入複雜的異常處理邏輯;

5 老的Consumer會有驚群效應和腦裂問題;

Consumer Client Re-Design

Consumer的改進直到0.9版本, 終于有了一個接近完美的版本; 但是由于向前相容的需要, 以前的Consumer方式正在被使用, 并沒有徹底移除. 由于Consumer的多版本存在, 并且個版本的Consumer變化很大, 這些影響又是對上層可見的, 是以對使用者造成了很大的混淆和困惑.

是以我想在這篇Blog中整理分析一下各Consumer的特點和差別, 讓大家有一個縱觀曆史的認識.

Kafka Consumer各版本分析總結