一直以來都想寫一點關于kafka consumer的東西,特別是關于新版consumer的中文資料很少。最近Kafka社區(qū)郵件組已經(jīng)在討論是否應該正式使用新版本consumer替換老版本,筆者也覺得時機成熟了,于是寫下這篇文章討論并總結(jié)一下新版本consumer的些許設計理念,希望能把consumer這點事說清楚,從而對廣大使用者有所幫助。

在開始之前,我想花一點時間先來明確一些概念和術語,這會極大地方便我們下面的討論。另外請原諒這文章有點長,畢竟要討論的東西很多,雖然已然刪除了很多太過細節(jié)的東西。


一、 誤區(qū)澄清與概念明確

1 Kafka的版本

很多人在Kafka中國社區(qū)(替群主做個宣傳,QQ號:162272557)提問時的開頭經(jīng)常是這樣的:“我使用的kafka版本是2.10/2.11, 現(xiàn)在碰到一個奇怪的問題。。。?!?無意冒犯,但這里的2.10/2.11不是kafka的版本,而是編譯kafka的Scala版本。Kafka的server端代碼是由Scala語言編寫的,目前Scala主流的3個版本分別是2.10、2.11和2.12。實際上Kafka現(xiàn)在每個PULL request都已經(jīng)自動增加了這三個版本的檢查。下圖是我的一個PULL request,可以看到這個fix會同時使用3個scala版本做編譯檢查:

平面設計培訓,網(wǎng)頁設計培訓,美工培訓,游戲開發(fā),動畫培訓

目前廣泛使用kafka的版本應該是這三個大版本:0.8.x, 0.9.x和0.10.* 。 這三個版本對于consumer和consumer group來說都有很大的變化,我們后面會詳談。

2 新版本 VS 老版本

“我的kafkaoffsetmonitor為什么無法監(jiān)控到offset了?”——這是我在Kafka中國社區(qū)見到最多的問題,沒有之一!實際上,Kafka 0.9開始提供了新版本的consumer及consumer group,位移的管理與保存機制發(fā)生了很大的變化——新版本consumer默認將不再保存位移到zookeeper中,而目前kafkaoffsetmonitor還沒有應對這種變化(雖然已經(jīng)有很多人在要求他們改了,詳見https://github.com/quantifind/KafkaOffsetMonitor/issues/79),所以很有可能是因為你使用了新版本的consumer才無法看到的。關于新舊版本,這里統(tǒng)一說明一下:kafka0.9以前的consumer是使用Scala編寫的,包名結(jié)構是kafka.consumer.*,分為high-level consumer和low-level consumer兩種。我們熟知的ConsumerConnector、ZookeeperConsumerConnector以及SimpleConsumer就是這個版本提供的;自0.9版本開始,Kafka提供了java版本的consumer,包名結(jié)構是o.a.k.clients.consumer.*,熟知的類包括KafkaConsumer和ConsumerRecord等。新版本的consumer可以單獨部署,不再需要依賴server端的代碼。

二、消費者組 (Consumer Group)

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式