Kafka高可用——replica分配方式

Kafka的Replica

概念

kafka的replica指的是消息的備份,為了保證kafka的高可用(當(dāng)leader節(jié)點(diǎn)掛了之后,kafka依然能提供服務(wù))kafka提供了備份的功能。這個(gè)備份是針對(duì)partition的。

可以通過(guò) default.replication.factor 對(duì)replica的數(shù)目進(jìn)行配置,默認(rèn)值為1,表示不對(duì)topic進(jìn)行備份。如果配置為2,表示除了leader節(jié)點(diǎn),對(duì)于topic里的每一個(gè)partition,都會(huì)有一個(gè)額外的備份。

replica分配

為了起到備份的效果,簡(jiǎn)單設(shè)想下,如果讓我們來(lái)分配replica,我們會(huì)怎么分配?
1)replica與所備份的節(jié)點(diǎn)不能再一臺(tái)機(jī)器上,否則就起不到備份的效果
2)replica盡量均勻的分布在集群機(jī)器上,如果replica全部都在某幾臺(tái)機(jī)器上,那么一旦這臺(tái)機(jī)器掛了,會(huì)丟失多個(gè)partition的備份

假設(shè)有3個(gè)broker、一個(gè)topic1、topic1有3個(gè)partition,default.replication.factor被設(shè)置為2,可能會(huì)這樣分配


簡(jiǎn)單的replica分配示意圖(圓角矩形代表replica)

這種分配保證了,任何一臺(tái)機(jī)器掛掉,kafka集群依然有備份可用。

replica分配算法

假設(shè)有5個(gè)broker,10個(gè)partitions,備份數(shù)設(shè)置為3

1、從一個(gè)集群的隨機(jī)節(jié)點(diǎn)開(kāi)始,輪詢(xún)放置第一個(gè)replica

broker-0 broker-1 broker-2 broker-3 broker-4 replica
p0 p1 p2 p3 p4 1st replica
p5 p6 p7 p8 p9 1st replica

2、后面的replica增加一個(gè)偏移量,繼續(xù)放置,比如這里的p0,從broker-0開(kāi)始,下一個(gè)replica就從broker-1開(kāi)始

broker-0 broker-1 broker-2 broker-3 broker-4 replica
p0(start) p1 p2 p3 p4 1st replica
p5(start) p6 p7 p8 p9 1st replica
p4 p0 (start) p1 p2 p3 2nd replica
p8 p9 p5(start) p6 p7 2nd replica
p3 p4 p0(start) p1 p2 3rd replica
p7 p8 p9 p5(start) p6 3rd replica

通過(guò)這種方式,replica盡可能的被均勻分配在多個(gè)broker上

多機(jī)房

上述方法,可以保證多個(gè)broker存在時(shí),哪怕其中一個(gè)broker掛了,kafka依舊能提供服務(wù)。但是,當(dāng)有多個(gè)機(jī)房時(shí)候,這種分配方式,不能保證,跨機(jī)房的高可用。

示例:4個(gè)broker,4個(gè)partition,每個(gè)partition有1個(gè)備份

備份(不考慮機(jī)房)

按照之前的算法,replica會(huì)按照上圖所示設(shè)置備份。這樣假設(shè)機(jī)房1因?yàn)槟硞€(gè)原因掛掉了,partition0的數(shù)據(jù)就會(huì)丟失掉。同理,機(jī)房2掛了,partition2也會(huì)丟失掉。

replica分配算法考慮機(jī)房

kafka可以配置一個(gè)參數(shù)broker.rack說(shuō)明當(dāng)前broker在哪個(gè)機(jī)房。

如上圖,配置
broker0 -> rack1
broker1 -> rack1
broker2 -> rack2
broker3 -> rack2

當(dāng)進(jìn)行replica排序時(shí)候,不會(huì)僅僅按照broker順序進(jìn)行排序,而是會(huì)保證機(jī)房錯(cuò)開(kāi)。比如這種情況的排序可能是
broker0,broker2,broker1,broker3

這樣子排序之后,再次按照上述replica分配算法分配。


replica分配(考慮不同機(jī)房)

這種分配方式,保證了不同機(jī)房之間擁有全部的topic,一個(gè)機(jī)房的數(shù)據(jù)掛掉,仍然有另一個(gè)機(jī)房的數(shù)據(jù)可以使用。(前提條件,replica數(shù)目大于或等于機(jī)房的數(shù)目)

總結(jié)

kafka通過(guò)replica分配的算法保證了當(dāng)某臺(tái)機(jī)器掛掉,甚至某個(gè)機(jī)房掛掉,依然有備份可用。這種分配備份的算法,可以套用在需要有備份的場(chǎng)景,比如hdfs(沒(méi)研究過(guò),不知道是不是一樣的)。

參考資料

https://community.hortonworks.com/questions/71458/can-anyone-explain-kafka-rack-awareness-feature.html
kafka源碼 kafka.admin.AdminUtils#assignReplicasToBrokers

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容