消息队列(4):Kafka
介紹
kafka是一個支持分布式的消息系統(tǒng),基于發(fā)布/訂閱模式。
kafka由LinkedIn公司開發(fā),2010年成為Apache頂級項(xiàng)目。
源碼是由java寫的。
基本概念
1、Broker
kafka集群中的每臺機(jī)器,都叫一個broker.
2、Topic(主題)
一個topic代表著一類消息,不同類型的消息,就用不同的topic區(qū)分。
3、Partition(分區(qū))
一個Partition就是一個隊(duì)列。一個topic可以由多個Partition組成。
一個topic的多個partition可能會放在多個Broker上。
4、Producer(生產(chǎn)者)
向kafka發(fā)消息的客戶端
5、Consumer(消費(fèi)者)
從kafka拉消息的客戶端
6、Consumer Group(消費(fèi)者組)
這個相當(dāng)于給消費(fèi)者分了個組,在注冊消費(fèi)者的時候,要先指定是哪個消費(fèi)者組。
這個概念,主要是為了kafka實(shí)現(xiàn)廣播和單播的區(qū)分。
每多一個消費(fèi)者組,topic的消息就會多復(fù)制一份給這個消費(fèi)者組。
消費(fèi)者組只會把消息發(fā)給本組的一個消費(fèi)者。
這樣的話,如果實(shí)現(xiàn)單播,那就一個消費(fèi)者一個消費(fèi)者組;如果要廣播,那就多個消費(fèi)者用一個消費(fèi)者組。
7、Zookeeper
zk主要就是集群管理,包括Broker和Consumer。
圖解
發(fā)現(xiàn)有網(wǎng)友畫的一張很好的圖,把kafka的數(shù)據(jù)流畫的很清晰。
如上圖,簡單解釋下:
有兩個producer,producer0發(fā)topic0的消息,producer1發(fā)topic0和topic1的消息。
有3個broker作為一個集群,由zk管理,上圖沒畫zk,自行腦補(bǔ)。
我們看到數(shù)據(jù)存儲的最小單位是topic的某個partition。
這個圖,為每個Partition做了兩個副本,我們稱為一主兩從。
主用紅色標(biāo)識,從用黑色標(biāo)識。
producer發(fā)消息都是發(fā)到主上,然后由主復(fù)制消息到從上。
消費(fèi)者拉消息,也是從主上拉。
主從關(guān)系由zk來管理,基本上就是zk選舉那一套。
consumer group0有一個消費(fèi)者consumer0。
consumer0消費(fèi)topic0的消息,所以我們看到consumer0從topic0的兩個partition上同時拉消息。
consumer group1有三個consumer,012。
這里先指出一個上圖的問題,一般一個consumer group是只消費(fèi)一個topic的,我理解的是作者為了畫出消費(fèi)者數(shù)量與partition數(shù)據(jù)的關(guān)系,才這么畫的,我們一個一個講。
首先看consumer group1消費(fèi)topic0的情況,topic0有兩個partition,但consumer group1有三個consumer,所以consumer0負(fù)責(zé)拉topic0partiton0隊(duì)列的消息,consumer1負(fù)責(zé)拉topic0partition1隊(duì)列的消息。
再看consumer group1消費(fèi)topic1的情況。由于topic1只有一個partition0,所以consumer group1也就只派出consumer0來拉這個topic1partition0的消息。
如果你認(rèn)認(rèn)真真把上面的看完,那么你應(yīng)該能理解,所謂的一個topic多少個partition對于多少個consumer了吧。還是以3個為例,理想狀況下,就是3個broker,對于一個tipic的3個partition的主分別部署在不同的broker上,主對于的兩個從分別不在其他兩個broker上。同時consumer group對應(yīng)有3個consumer,分別從3個partition主上拉消息。
總結(jié)
以上是生活随笔為你收集整理的消息队列(4):Kafka的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 战地体能训练模拟器
- 下一篇: 动力环境监控系统论文_浅谈动力环境监控系