KafkaManager對offset的兩種管理方式
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的兩種管理方式