Kafka消費者API簡介
阿新 • • 發佈:2018-12-14
-
舊版消費者
當前kafka版本還保留著Scala版本的兩套消費者,被稱為舊版消費者。舊版消費者屬於kafka核心模組,分別為SimpleConsumer(低階Low-Level)和ZookeeperConsumerConnector(高階High-Level)。
低階API提供對訊息更靈活的控制處理,但實現起來較為複雜,呼叫者需要先自己管理已消費的偏移量以及消費者平衡。
舊版消費者常用場景:
支援訊息重複消費。
新增事務管理機制,保證消費被處理且僅被處理一次。
只消費指定分割槽或者指定分割槽的某些片段。
高階API 提供了一種簡單、方便的對外介面,遮蔽了底層實現細節。消費者無需管理已消費的偏移量,Kafka會將每個分割槽已消費的最後偏移量儲存在Zookeeper的/consumer/${group.id}/offsets/${topicName}/${partitionId}節點中。
-
新版消費者
在kafka0.9版本之後,通過Java語言對消費者進行重新實現,KafkaConsumer,被稱為新版消費者。與舊版高階消費者的最大區別在於其不再強依賴於Zookeeper,消費者提交的偏移量也不再儲存在zk中,而是儲存在Kafka內部主題"__consumer_offsets"之中,該主題預設有50個分割槽(分割槽數由offsets.topic.num.partition設定),每個分割槽3個副本,通過groupId的Hashcode值與offsets.topic.num.partition值取模的方式確定某個消費組已消費的偏移量儲存在該主題的哪個分割槽上。
//(50為 __consumer_offsets partition 數量 offsets.topic.num.partition設定該值)
partition = Math.abs("groupId".hashCode()) % 50