資料內(nèi)容:
2. 架構(gòu)
Kafka 存儲(chǔ)的消息來自任意多被稱為 Producer 生產(chǎn)者的進(jìn)程。數(shù)據(jù)從而可以被發(fā)布到不同的 Topic 主題下
的不同 Partition 分區(qū)。在一個(gè)分區(qū)內(nèi),這些消息被索引并連同時(shí)間戳存儲(chǔ)在一起。其它被稱為 Consumer
消費(fèi)者的進(jìn)程可以從分區(qū)訂閱消息。Kafka 運(yùn)行在一個(gè)由一臺(tái)或多臺(tái)服務(wù)器組成的集群上,并且分區(qū)可以跨
集群結(jié)點(diǎn)分布。
下面給出 Kafka 一些重要概念,讓大家對(duì) Kafka 有個(gè)整體的認(rèn)識(shí)和感知,后面還會(huì)詳細(xì)的解析每一個(gè)概念的
作用以及更深入的原理。
● Producer: 消息生產(chǎn)者,向 Kafka Broker 發(fā)消息的客戶端。
● Consumer: 消息消費(fèi)者,從 Kafka Broker 取消息的客戶端。
● Consumer Group: 消費(fèi)者組(CG),消費(fèi)者組內(nèi)每個(gè)消費(fèi)者負(fù)責(zé)消費(fèi)不同分區(qū)的數(shù)據(jù),提高消費(fèi)能
力。一個(gè)分區(qū)只能由組內(nèi)一個(gè)消費(fèi)者消費(fèi),消費(fèi)者組之間互不影響。所有的消費(fèi)者都屬于某個(gè)消費(fèi)者組,即
消費(fèi)者組是邏輯上的一個(gè)訂閱者。
● Broker: 一臺(tái) Kafka 機(jī)器就是一個(gè) broker。一個(gè)集群由多個(gè) broker 組成。一個(gè) broker 可以容納多個(gè)
topic。
● Topic: 可以理解為一個(gè)隊(duì)列,topic 將消息分類,生產(chǎn)者和消費(fèi)者面向的是同一個(gè) topic。
● Partition: 為了實(shí)現(xiàn)擴(kuò)展性,提高并發(fā)能力,一個(gè)非常大的 topic 可以分布到多個(gè) broker (即服務(wù)器)
上,一個(gè) topic 可以分為多個(gè) partition,每個(gè) partition 是一個(gè) 有序的隊(duì)列, 可以理解為將標(biāo)準(zhǔn) MQ 的
Queue 的消息進(jìn)行拆分, 來實(shí)現(xiàn)高可用
Producer 發(fā)送的 Message, 根據(jù) key 和 partition 數(shù)進(jìn)行 hash, 然后進(jìn)行投遞,一個(gè)分區(qū)只能被同一個(gè)
Consumer Group 中的一個(gè) Consumer 消費(fèi). 分區(qū)內(nèi)消費(fèi)有序 。
● Replica: 副本,為實(shí)現(xiàn)備份的功能,保證集群中的某個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),該節(jié)點(diǎn)上的 partition 數(shù)據(jù)不丟
失,且 Kafka 仍然能夠繼續(xù)工作,Kafka 提供了副本機(jī)制,一個(gè) topic 的每個(gè)分區(qū)都有若干個(gè)副本,一個(gè)
leader 和若干個(gè) follower。
● Leader: 每個(gè)分區(qū)多個(gè)副本的“主”副本,生產(chǎn)者發(fā)送數(shù)據(jù)的對(duì)象,以及消費(fèi)者消費(fèi)數(shù)據(jù)的對(duì)象,都是
leader。
● Follower: 每個(gè)分區(qū)多個(gè)副本的“從”副本,實(shí)時(shí)從 leader 中同步數(shù)據(jù),保持和 leader 數(shù)據(jù)的同步。
leader 發(fā)生故障時(shí),某個(gè) follower 還會(huì)成為新的 leader。
● offset: 消費(fèi)者消費(fèi)的位置信息,監(jiān)控?cái)?shù)據(jù)消費(fèi)到什么位置,當(dāng)消費(fèi)者掛掉再重新恢復(fù)的時(shí)候,可以從消
費(fèi)位置繼續(xù)消費(fèi)。
● Zookeeper: Kafka 集群能夠正常工作,需要依賴于 zookeeper,zookeeper 幫助 Kafka 存儲(chǔ)和管理集
群信息。