讀文筆記:Kafka 官方設(shè)計文檔
數(shù)據(jù)持久化
不用懼怕文件系統(tǒng)
對象的內(nèi)存開銷非常高,通常是實際數(shù)據(jù)大小的2倍(甚至更多) 隨著堆上數(shù)據(jù)量增大,Java 的 GC 表現(xiàn)也會更糟糕
常量時間就能搞定
效率
操作系統(tǒng)從磁盤將數(shù)據(jù)讀到內(nèi)核空間的內(nèi)存頁緩存(pagecache) 應(yīng)用程序從內(nèi)核空間將數(shù)據(jù)讀到用戶空間緩沖區(qū) 應(yīng)用程序?qū)?shù)據(jù)從用戶空間緩沖區(qū)讀到內(nèi)核空間的套接字緩沖區(qū) 操作系統(tǒng)將數(shù)據(jù)從套接字緩沖區(qū)讀到 NIC 緩沖區(qū),網(wǎng)卡從 NIC 緩沖區(qū)讀取數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)出去
生產(chǎn)者(The Producer)
負(fù)載均衡
消息交付語義
最多消費(fèi)一次 - 消息可能會丟失,但不會被重復(fù)消費(fèi)
最少消費(fèi)一次 - 消息不會丟,但可能被重復(fù)消費(fèi)
僅消費(fèi)一次 - 每個消息都會被消費(fèi)且僅消費(fèi)一次
acks:acks=0:表示 producer 不需要等分區(qū) leader broker 返回任何響應(yīng),將消息存入套接字緩沖區(qū)(socket buffer)就當(dāng)做消息已經(jīng)發(fā)送成功。所以可靠性是沒有保證的。 acks=1:表示 分區(qū) leader broker 將消息寫入自己的本地日志文件,就向 producer 響應(yīng)成功,不必等待分區(qū)副本 broker 同步好消息。 acks=-1 或 acks=all:表示 分區(qū) leader broker 需要等待所有同步副本 broker 同步好消息并響應(yīng)成功,才向 producer 響應(yīng)成功
節(jié)點必須維持與 Zookeeper 的 session 連接(通過 Zookeeper 的心跳機(jī)制) 如果是一個從節(jié)點(follower),則必須不斷從 leader 節(jié)點同步消息數(shù)據(jù),且同步進(jìn)度沒有落后太多
如果 consumer 讀取消息后,先向 kafka 提交消費(fèi)位置,再處理消息;如果該 consumer 掛掉或重啟,會可能導(dǎo)致丟消息,從而只能滿足“最多處理一次”交付語義。 如果 consumer 讀取消息后,是先處理,再提交消費(fèi)位置;如果該 consumer 掛掉或重啟,則可能導(dǎo)致重復(fù)消費(fèi)消息,從而只能滿足“最少處理一次”交付語義。
復(fù)制
replica.lag.time.max.ms?配置參數(shù)判定。日志數(shù)據(jù)復(fù)制:仲裁成員集(Quorums)、同步中副本集(ISRs)和狀態(tài)機(jī)
(備注:這一節(jié)我理解得還不太透徹。)
可用性和持久性保證
acks=all?并不是要求所有的副本都確認(rèn)寫入成功,而是在當(dāng)前同步中副本(ISR)都確認(rèn)寫入成功時,分區(qū) leader 就向 producer 響應(yīng)成功。例如:某個 topic 被設(shè)置為 2 個副本,然后其中一個副本節(jié)點掛掉,此時要求?acks=all?的寫操作也會成功。如果剩下的副本節(jié)點也掛了,那么就會丟消息啦。禁用臟 leader 選舉 指定一個最小 ISR 集大?。?/span> min.insync.replicas?參數(shù)設(shè)置):只有當(dāng) ISR 集大小大于設(shè)定的最小值,分區(qū) [leader] 才會接受消息寫入。這個設(shè)置只有當(dāng) producer 使用?acks=all?時才會生效。(注:在我們生產(chǎn)環(huán)境中,分區(qū)副本數(shù)通常申請為 3(包含 leader),那么?min.insync.replicas?應(yīng)該設(shè)定為 2,但默認(rèn)是 1。使用 1,那么當(dāng)分區(qū)只有一個副本(即 leader),producer 也能寫入成功,但如果這個副本又掛了,就會丟數(shù)據(jù)。)
副本管理
消費(fèi)者消費(fèi)進(jìn)度跟蹤
如喜歡本文,請點擊右上角,把文章分享到朋友圈
如有想了解學(xué)習(xí)的技術(shù)點,請留言給若飛安排分享
·END·
作者:xiayf
來源:http://blog.xiayf.cn/2019/10/13/reading-kafka-design/
版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認(rèn),我們都會標(biāo)明作者及出處,如有侵權(quán)煩請告知,我們會立即刪除并表示歉意。謝謝!
推薦:
評論
圖片
表情
