消息生產(chǎn)者:producer
消息消費(fèi)者:consumer
主題:即Topic,由用戶定義并配置在Kafka服務(wù)端,用于建立生產(chǎn)者和消費(fèi)者之間的訂閱關(guān)系:生產(chǎn)者發(fā)送消息到指定Topic下,消費(fèi)者從這個(gè)Topic下消費(fèi)消息。
Broker:即Kafka服務(wù)器,用于存儲(chǔ)消息,在消息中間件中通常被稱為Broker
消費(fèi)者分組:Group
Offset:消息存儲(chǔ)在Kafka的Broker上,消費(fèi)者拉取消息數(shù)據(jù)的過程中需要知道消息在文件中的偏移量,這個(gè)偏移量就是所謂的Offset
ZooKeeper負(fù)責(zé)管理所有Broker服務(wù)器列表,并且建立了對(duì)應(yīng)路徑來對(duì)其進(jìn)行管理/brokers/ids
每個(gè)Broker服務(wù)器在啟動(dòng)時(shí),都會(huì)到ZooKeeper上進(jìn)行注冊,其節(jié)點(diǎn)路徑為/broker/ids/[0...N]
Topic注冊:Kafka當(dāng)中,會(huì)將同一個(gè)Topic的消息分成多個(gè)區(qū),分布到多個(gè)Broker上,這些分區(qū)信息和Broker的對(duì)應(yīng)關(guān)系由ZooKeeper來維護(hù)
ZooKeeper負(fù)載均衡實(shí)現(xiàn):
- 每當(dāng)一個(gè)Broker啟動(dòng)時(shí),會(huì)首先完成Broker注冊過程,在ZooKeeper的節(jié)點(diǎn)列表里保存Broker。
- Kafka的生產(chǎn)者會(huì)對(duì)ZooKeeper上的“Broker的新增與減少”、“Topic的新增和減少”和“Broker和Topic關(guān)聯(lián)關(guān)系的變化”等事件注冊Watcher監(jiān)聽
- 通過ZooKeeper的Watcher通知能夠讓生產(chǎn)者動(dòng)態(tài)的獲取Broker和Topic的變化情況
- Kafka有消費(fèi)者分組的概念,每個(gè)消費(fèi)者分組包含了若干個(gè)消費(fèi)者,每一條消息只會(huì)發(fā)送給分組內(nèi)的一個(gè)消費(fèi)者,不同消費(fèi)者分組消費(fèi)自己特定的Topic下面的消息,互不干擾
- Kafka會(huì)為每個(gè)消費(fèi)者分配全局唯一的Consumer ID,采用“Hostname:UUID”形式來表示
- 每個(gè)消費(fèi)者一旦確定了對(duì)一個(gè)消息分區(qū)的消費(fèi)權(quán)利,ZooKeeper會(huì)將其Consumer ID寫入到對(duì)應(yīng)消息分區(qū)的臨時(shí)節(jié)點(diǎn)上
- 消費(fèi)進(jìn)度管理:Kafka需要定時(shí)地將分區(qū)消息的消費(fèi)進(jìn)度,即Offset記錄到ZooKeeper上去