建議從頭閱讀:
銀行系統(tǒng)中的消息分發(fā)利器Kafka(一)
銀行系統(tǒng)中的消息分發(fā)利器Kafka(二)
銀行系統(tǒng)中的消息分發(fā)利器Kafka(三)
這次我們來介紹一下Kafka內(nèi)部是如何實(shí)現(xiàn)高可用的。
上次我們介紹到妆距,Kafka會(huì)把數(shù)據(jù)拆分到不同的Partition中辨萍。以達(dá)到分布式集群管理的目的凯楔。
但當(dāng)集群中的部分服務(wù)器故障時(shí)沦泌,怎么辦烙常?
為了解決每一個(gè)節(jié)點(diǎn)的單點(diǎn)問題荆永,Kafka內(nèi)部會(huì)把數(shù)據(jù)拷貝多份朝捆,存儲(chǔ)在不同的服務(wù)器中般渡。下圖展示了對(duì)于Partition1(P1)的數(shù)據(jù),我在P2右蹦、P5的服務(wù)器上分別建立了1份拷貝诊杆。
當(dāng)所有拷貝過P1的節(jié)點(diǎn),只要期中有一個(gè)是正常工作的何陆,我們就可以正常讀取到數(shù)據(jù)晨汹。
在Kafka中,有一個(gè)專門的參數(shù)代表數(shù)據(jù)拷貝的數(shù)量——replication factor贷盲。如果replication factor為3淘这,就意味著在整個(gè)集群中,數(shù)據(jù)有3份拷貝巩剖。
一般而言铝穷,會(huì)把replication factor設(shè)置為3,這是一個(gè)比較合理的參數(shù)佳魔,可以充分的容災(zāi)曙聂,也不會(huì)浪費(fèi)太多的服務(wù)器。有一點(diǎn)需要說明的是鞠鲜,replication factor不是針對(duì)Partition的宁脊,而是針對(duì)Topic的,因此如果一個(gè)Topic的replication factor為3贤姆,那就意味著Topic下所有Partition的拷貝數(shù)量都為3榆苞。
下面詳細(xì)解釋一下實(shí)現(xiàn)機(jī)制:Kafka內(nèi),每一個(gè)partition內(nèi)部會(huì)選出一個(gè)Broker作為L(zhǎng)eader霞捡,然后Leader負(fù)責(zé)一切與Producer與Consumer的交互坐漏。
當(dāng)我們把replication factor設(shè)置為3時(shí),Kafka就知道每個(gè)Partition的數(shù)據(jù)還要有2份拷貝,因此會(huì)為每個(gè)Partition找到另外兩個(gè)Broker做數(shù)據(jù)備份赊琳。同時(shí)街夭,數(shù)據(jù)會(huì)先存在Leader上,然后同步機(jī)制會(huì)把數(shù)據(jù)從Leader不斷同步到備份用的Broker慨畸。
我們?cè)诜?wù)終端的命令行下可以調(diào)出目前的Topic莱坎、Partition衣式,以及副本配置情況寸士。
我們看到,上面示例中:
Topic是TestTopicXYZ
PartitionCount是這個(gè)Topic共有多少個(gè)分區(qū)碴卧,示例中共有2個(gè)分區(qū)弱卡,下面列出了兩個(gè)分區(qū)的情況:一個(gè)是Partition0,一個(gè)是Partition1住册。
Replicationfactor是3婶博,說明這個(gè)Topic的所有分區(qū)都有3個(gè)副本,下面列出了Leader節(jié)點(diǎn)是誰:Partition0的Leader節(jié)點(diǎn)是1荧飞,Partition1的leader節(jié)點(diǎn)是2凡人。
最后一列下面展現(xiàn)了整個(gè)Partition的節(jié)點(diǎn)分布情況:Replicas是說明有3個(gè)節(jié)點(diǎn),第一叹阔、第二挠轴、第三分別是誰《保可以看到第一節(jié)點(diǎn)與前面的leader節(jié)點(diǎn)是對(duì)應(yīng)上的岸晦。因?yàn)閘eader節(jié)點(diǎn)就是第一節(jié)點(diǎn),數(shù)據(jù)最先記錄在Leader節(jié)點(diǎn)睛藻,然后同步給第二启上、第三節(jié)點(diǎn)。Isr則是說明三個(gè)節(jié)點(diǎn)中有幾個(gè)節(jié)點(diǎn)目前數(shù)據(jù)已經(jīng)同步了店印,示例中的兩個(gè)Partition冈在,每個(gè)Partition的3個(gè)節(jié)點(diǎn)都展現(xiàn)出來了,說明他們上面的數(shù)據(jù)都已經(jīng)同步了按摘。