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

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


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

1 Kafka的版本

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

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

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

2 新版本 VS 老版本

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

二、消費(fèi)者組 (Consumer Group)

延伸閱讀

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