broker在kafka的服務(wù)端運(yùn)行 , 一臺(tái)服務(wù)器相當(dāng)于一個(gè)broker;每個(gè)broker下可以有多個(gè)topic , 每個(gè)topic可以有多個(gè)partition , 在producer端可以對(duì)消息進(jìn)行分區(qū) , 每個(gè)partiton可以有多個(gè)副本 , 可以使得數(shù)據(jù)不丟失 。
通常以集群模式 , 下面來(lái)闡述一下broker的幾個(gè)狀況 。
分區(qū)數(shù)據(jù)與副本kafka的partition有一個(gè)leader的數(shù)據(jù)區(qū)域 , 是為了接收producer端發(fā)送的數(shù)據(jù);也可以通過(guò)克隆leader的方式創(chuàng)建副本 , leader與副本保持?jǐn)?shù)據(jù)同步 , 也就是為了在極端情況下的數(shù)據(jù)備份 , 每個(gè)分區(qū)的副本交錯(cuò)的存在于其它分區(qū)中 , 盡量以平均方式存放于各分區(qū)中 , 也可以手動(dòng)指定存放的分區(qū)(假設(shè)是因服務(wù)器硬件的配置不同) , 當(dāng)極端情況下 , leader宕機(jī)后 , 自動(dòng)啟用副本作為新leader角色 , 負(fù)責(zé)接收消息 。
leader與副本保持通信 , 副本持續(xù)向leader發(fā)送健康請(qǐng)求 , 超過(guò)30秒無(wú)連接的副本 , 從關(guān)聯(lián)的副本中刪除關(guān)系;副本數(shù)據(jù)默認(rèn)為1個(gè) , 通常我們至少設(shè)置為2個(gè) 。
# 副本數(shù)量配置項(xiàng)(默認(rèn)為1)mis.insync.replicasbroker的應(yīng)答機(jī)制在上一章闡述過(guò) , broker是對(duì)producer的應(yīng)答 , 它會(huì)告訴producer , 對(duì)接收到的數(shù)據(jù)處理情況;應(yīng)答等級(jí):(配置項(xiàng)為 acks)
- 0:不用等落地磁盤 , 直接應(yīng)答
- 1:leader落地磁盤后應(yīng)答
- all:leader和副本都落地磁盤后再應(yīng)答(默認(rèn))
- broker單次啟動(dòng)運(yùn)行 , 會(huì)有一個(gè)唯一的運(yùn)行編號(hào)
- 每個(gè)分區(qū)都會(huì)有一個(gè)唯一的分區(qū)編號(hào)
- producer發(fā)送的每條消息都會(huì)有一個(gè)唯一的消息編號(hào)
# 冪等性(默認(rèn)開啟)enable.idempotence=true數(shù)據(jù)防丟失通過(guò)以上內(nèi)容的了解 , 為防止數(shù)據(jù)的丟失 , 這里可以這樣做:1、應(yīng)答機(jī)制設(shè)為-1 , 確保leader和副本都保存完成2、分區(qū)副本至少有兩個(gè) , 確保隨時(shí)有可啟用的副本數(shù)據(jù)當(dāng)做到 數(shù)據(jù)不重復(fù) + 數(shù)據(jù)防丟失 , 體現(xiàn)出數(shù)據(jù)的完整性、安全性、一致性 。
數(shù)據(jù)的按序broker中的leader在接收數(shù)據(jù)時(shí) , 分區(qū)緩存按序最多可存5個(gè)請(qǐng)求數(shù)據(jù) , 成功的消息請(qǐng)求會(huì)落地 , 消息請(qǐng)求按序落地磁盤 , 若一次消息請(qǐng)求失敗 , producer會(huì)嘗試重發(fā) , 此時(shí)leader分區(qū)的數(shù)據(jù)落地動(dòng)作會(huì)暫停 , 但會(huì)緩存新收到的請(qǐng)求數(shù)據(jù) , 積滿5個(gè)后暫停接收 , 直至之前失敗的消息請(qǐng)求成功后 , 再?gòu)拇讼⑻?nbsp;, 重新開始按序落地磁盤 。多分區(qū)按發(fā)送序號(hào)落地磁盤 。
leader分區(qū)緩存接收消息示意圖

文章插圖
這里認(rèn)為:開啟冪等性 + 接收積壓個(gè)數(shù) + 按序落地磁盤 , 可以確保單個(gè)topic多分區(qū)消息不亂序 。
leader partition 的自動(dòng)平衡假如 , 個(gè)別broker中的分區(qū)過(guò)多 , 個(gè)別broker中的分區(qū)過(guò)少 , 這不符合負(fù)載均衡 。kafka默認(rèn)開啟了每間隔一段時(shí)間 , 自動(dòng)檢測(cè)分區(qū)分布的差異值是否超過(guò)了警戒值 , 當(dāng)超過(guò)設(shè)定的警戒值時(shí) , 自動(dòng)觸發(fā)平均分布的動(dòng)作 。
# 開啟自動(dòng)平衡分布(默認(rèn))auto.leader.rebalance.enable=true# 不平衡警戒觸發(fā)值(默認(rèn)1%)leader.imbalance.per.broker.percentage# 檢測(cè)間隔時(shí)間(默認(rèn)300秒)leader.imbalance.check.interval.seconds=300
經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Mobile 我的Vue之旅、05 導(dǎo)航欄、登錄、注冊(cè)
- 父親節(jié)素材
- 我的伯父魯迅先生中的四個(gè)小標(biāo)題
- Docker搭建kafka及監(jiān)控
- 我的 Kafka 旅程 - Consumer
- 電視劇我的莫格利男孩一共多少集?
- 我的莫格利男孩高婕結(jié)局是什么?
- 我的鄰居睡不著宋米哆身世是什么?
- 電視劇我的體育老師結(jié)局怎樣?
- 我的莫格利男孩儲(chǔ)時(shí)和誰(shuí)在一起?
