kafka不支持讀寫分離原理分析
引言
前段時(shí)間在看 kafka 相關(guān)內(nèi)容,發(fā)現(xiàn) kafka “所有的”讀寫流量都在主 partition 上,從 partition 只負(fù)責(zé)備份數(shù)據(jù)。
那么為什么 kafka 從 partition 不跟其他中間件一樣承接讀流量?
讀寫分離的初衷
讀寫分離的初衷我覺得是利用讀流量 & 寫流量不同的特性做針對(duì)性的優(yōu)化,而這兩種流量我覺得區(qū)別如下
| 讀流量 | 寫流量 | |
|---|---|---|
| 業(yè)務(wù)特性 | 展示類的業(yè)務(wù) | 操作類業(yè)務(wù) |
| 流量占比 | 高 | 低 |
| 可接受數(shù)據(jù)延遲 | 較大 | 非常小 |
| 增長(zhǎng)的可預(yù)見性 | 高峰/安全攻擊可能會(huì)突發(fā)增長(zhǎng) | 總體平穩(wěn) |
使用 kafka 的業(yè)務(wù)特征
- 操作型業(yè)務(wù),consumer 消費(fèi) producer 生產(chǎn)的消息,進(jìn)行自身業(yè)務(wù),這個(gè)消息就類似于 trigger
- 可支撐的流量較大,并且可支撐下游 consumer 較多,rebalance 需要一定的時(shí)間
kafka 架構(gòu)
- 以 topic 為單位,一 topic 可拆分多個(gè) partition,每個(gè) partition 都可以有多個(gè)從 partition,不同 partition 分布在不同 broker 上
以 partition 為單位,形成 AR(Assigned Repllicas),ISR(In Sync Repllicas),OSR(Out Sync Repllicas),主 partition 接收到消息后按照 ack 策略同步到 ISR 中從 partition
ack = 0,producer 發(fā)出消息后就不管了
ack = 1,producer 發(fā)出消息寫入主 partition 所在 broker 的磁盤就算成功
ack = all,producer 發(fā)出消息寫入主 partition 以及 ISR 上所有副 partition 的磁盤才算成功
kafka 沒有主從讀寫分離的原因
不能主從讀寫分離的原因
kafka 承接的大多是操作型業(yè)務(wù),這部分讀操作對(duì)數(shù)據(jù)延遲非常敏感。
kafka 主從同步為半同步復(fù)制,并且有部分 partition 在 OSR 上,數(shù)據(jù)延遲較大
kafka 主 partition 接收到消息后,可以根據(jù) ack 策略落盤,如果不是 all 的話存在數(shù)據(jù)丟失的風(fēng)險(xiǎn)
不需要主從讀寫分離的原因
kafka 本身就是多 partition 的架構(gòu),不同 parition 在不同的 broker 上,多主節(jié)點(diǎn)的結(jié)構(gòu)本身分流了流量
kafka 本身就有成熟的 rebalance 機(jī)制,partition 上線與下線都比較無感
以上就是kafka不支持讀寫分離原理分析的詳細(xì)內(nèi)容,更多關(guān)于kafka不支持讀寫分離的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Git獲取本地分支對(duì)應(yīng)的遠(yuǎn)端服務(wù)器分支名的方法
這篇文章主要介紹了Git獲取本地分支對(duì)應(yīng)的遠(yuǎn)端服務(wù)器分支名的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Git拉取指定文件或者文件夾的實(shí)現(xiàn)方式
Git拉取指定文件或文件夾的步驟包括:初始化倉(cāng)庫(kù)、設(shè)置遠(yuǎn)程倉(cāng)庫(kù)地址、啟用SparseCheckout模式、設(shè)置要拉取的目錄模式、拉取指定目錄,在操作過程中可能會(huì)遇到權(quán)限問題和分支同步問題,需要根據(jù)實(shí)際情況進(jìn)行調(diào)整2025-11-11
關(guān)于base64編碼的原理及實(shí)現(xiàn)方法分享
我們的圖片大部分都是可以轉(zhuǎn)換成base64編碼的data:image。 這個(gè)在將canvas保存為img的時(shí)候尤其有用2012-03-03
Git進(jìn)行版本控制的實(shí)戰(zhàn)指南
Git是一種分布式版本控制系統(tǒng),廣泛應(yīng)用于軟件開發(fā)中,它可以記錄和管理項(xiàng)目的歷史修改,并支持多人協(xié)作開發(fā),通過Git,開發(fā)者可以輕松地跟蹤代碼變更、合并分支、回退版本等操作,所以本文給大家詳細(xì)介紹了Git版本控制的實(shí)戰(zhàn)指南,需要的朋友可以參考下2025-09-09
spark大數(shù)據(jù)任務(wù)提交參數(shù)的優(yōu)化記錄分析
這篇文章主要介紹了spark大數(shù)據(jù)任務(wù)提交參數(shù)的優(yōu)化記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Fiddler?Everywhere?4.0.1的破解及禁止更新的方法(最新推薦)
Fiddler?Everywhere是個(gè)好東西,無論抓包還是調(diào)試接口都很好用,只是現(xiàn)在收費(fèi)了,為了白嫖就決定折騰一下,如果一開始通過設(shè)置文件夾權(quán)限禁止更新,也會(huì)導(dǎo)致進(jìn)不了使用界面而無法使用,下面說一下具體的解決過程2023-11-11

