1. 程式人生 > >KafkaManager對offset的兩種管理方式

KafkaManager對offset的兩種管理方式

維護 com leader 轉變 blog replica pic 保存 實例

OffsetManager主要提供對offset的保存和讀取,每個broker都有一個OffsetManager實例,kafka管理topic的偏移量有2種方式:

1、ZookeeperOffsetManager:調用zookeeper來存儲和接收offset

Consumer offset:
/consumers/[groupId]/offsets/[topic]/[partitionId] /offset number

2、DefaultOffsetManager:提供消費者offsets內置的offset管理,即把偏移量提交至kafka內部,主要由offsets.storage參數決定,默認為zookeeper。也就是說如果配置offsets.storage= kafka,則kafka會把這種offsetcommit請求轉變為一種Producer,保存至topic為“__consumer_offsets”的log裏面。

offsets是怎麽保存到DefaultOffsetManager?

除了將offset作為logs保存到磁盤上,DefaultOffsetManager維護了一張能快速服務於offset抓取請求的consumer offsets表.
broker在offsets表(緩存)中包含僅僅是”offsets topic”的partitions中屬於leader partition對應的條目(存儲的是offset).
(即這些partitions的replicas只會在他們自己的logs中有offset信息,並不會對應offset表中的條目).

offsets topic的logs的segment大小相比正常的topics設置的很低,默認”offsets.topic.segment.bytes”=10MB.
這樣LogCleaner會更快地選出未清理的segments,結果就是能夠更頻繁地清理. 同樣log的大小設置的越小也有助於
減少讀取logs的時間,在把讀取出來的logs信息放到offsets緩存中也更快(比如重啟kafka時會重新加載日誌文件).

KafkaManager對offset的兩種管理方式