一直以來都想寫一點關于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版本做編譯檢查:
目前廣泛使用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)
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構來看看(二) 2017-07-26