Kafka的架構(gòu)

kafka.jpg
Partition 分區(qū)
- 消息日志分區(qū)在集群的服務(wù)器上。
- 一個(gè)topic的消息被分配到不同的分區(qū)中。
- 分區(qū)中消息是順序保存的,通過(guò)offset保持順序。
- 分區(qū)可以設(shè)置備份(Replication),用于容災(zāi)。
- 通過(guò)Zookeeper選舉分區(qū)leader節(jié)點(diǎn)。
- 可以將分區(qū)及備份分配到不同的服務(wù)器,提高可用性。
Topic 消息日志
- 消息在同一個(gè)分區(qū)中保持順序,在不同分區(qū)中無(wú)法保持順序。
- 通過(guò)順序IO讀寫(xiě)磁盤(pán)。
- 消息默認(rèn)保存7天。
- 消息消費(fèi)后并不會(huì)刪除,消費(fèi)者記錄讀取的位置。
Producer 生產(chǎn)者
- 通過(guò)push方式向集群發(fā)送消息。
- 決定消息存儲(chǔ)在哪個(gè)分區(qū)。
- 可以自定義分區(qū)存儲(chǔ)規(guī)則,例如:輪詢(xún)。
Consumer 消費(fèi)者
- 通過(guò)pull方式獲取消息。
- 相同的消費(fèi)組內(nèi),通過(guò)負(fù)載均衡方式消費(fèi)消息,即消息只被組內(nèi)一個(gè)消費(fèi)者消費(fèi)。
- 不同的消費(fèi)組訂閱相同的topic,組間通過(guò)廣播方式獲得消息。即同一條消息,會(huì)被不同消費(fèi)組消費(fèi)。
- 通過(guò)zookeeper記錄消費(fèi)記錄offset。
- 可以通過(guò)設(shè)置offset值,消費(fèi)過(guò)往的消息。