1 背景
在讀完kafka官方文檔,kafka設(shè)計(jì)里的消息交付語義一章后,給我的第一印象是內(nèi)容很抽象,于是草擬和總結(jié)了給個副標(biāo)題,并把相關(guān)內(nèi)容進(jìn)行了歸類;有些生澀的句子,盡量用大白話和舉例進(jìn)行說明,并加入了總結(jié)。
消息交付語義的級別有哪些?
消息交付,即消息在生產(chǎn)端,broker端,消費(fèi)者端的傳遞保證。
最多一次——消息可能會丟失,但永遠(yuǎn)不會重新傳送。
至少一次——消息永遠(yuǎn)不會丟失,但可以重新傳送。
恰好一次——這就是人們真正想要的,每條消息都傳遞一次且僅一次。
kafka 支持哪些消息交付語義?
根據(jù)英文文檔,進(jìn)行了總結(jié)
###################以下為個人觀點(diǎn)###################
kafka 真的支持了 最少一次 的交付語義嗎?
我的回答是:不同的條件下,可能支持了,也可能沒支持。
kafka支持最少一次交付的前提條件
生產(chǎn)端:
kafka生產(chǎn)端在發(fā)送消息時,如果遇到底層網(wǎng)絡(luò)問題,可能會導(dǎo)致消息發(fā)送給了broker端,也有可能網(wǎng)絡(luò)閃斷或者丟包,發(fā)送的消息可能丟了;但最后的結(jié)果是,生產(chǎn)端會根據(jù)指定的參數(shù)retries,進(jìn)行一定次數(shù)的重試。以此來保證生產(chǎn)端,做到消息至少傳遞一次。即發(fā)送失敗了,就重試吧。
所以生產(chǎn)端 支持"最少一次"的前提條件 有如下:
生產(chǎn)端的應(yīng)用在重試的時候,沒有重啟,或者宕機(jī)
網(wǎng)絡(luò),或者broker端,需要在生產(chǎn)端重試次數(shù)用完之前恢復(fù)
消費(fèi)者端:
消費(fèi)者端保證消息至少被消費(fèi)一次的建議是:在消費(fèi)者端消費(fèi)完消息后,在手工提交offset;偽代碼如下:
while(true){ consumer.poll(); XXX consumer.commit(); }
具體原因和說明見:juejin.cn/post/729328…
broker端:
broker端,要實(shí)現(xiàn)此交付,主要是保證消息不丟。kafka 數(shù)據(jù)是具備高可靠的,但不代表你的kafka集群就具備了此功能。需要有如下配置:
第一:生產(chǎn)端參數(shù)ack 設(shè)置為all
第二:在broker端 配置min.insync.replicas參數(shù)設(shè)置至少為2
第三:在broker端配置replicator.factor參數(shù)至少3
第四:在broker端配置 unclean.leader.election.enable 參數(shù)建議設(shè)置為false
具體原因和說明見:juejin.cn/post/729328…
不支持的情況下,如何去保證消息交付最少一次的保證
消費(fèi)者端和broker端,可以根據(jù)配置和對應(yīng)代碼編寫順序進(jìn)行解決;但生產(chǎn)端在進(jìn)行重試時,還需依賴生產(chǎn)端應(yīng)用的穩(wěn)定性,底層網(wǎng)絡(luò)和broker端的可用性;
生產(chǎn)端之所以需要這三個條件的支持,還是生產(chǎn)端沒有把待發(fā)送消息進(jìn)行持久化,畢竟待發(fā)送的消息是保存在jvm內(nèi)存中的,jvm重啟或者OOM或者宕機(jī)了,內(nèi)存中的消息也就丟了;
如果把待發(fā)送的消息進(jìn)行了持久化,即使應(yīng)用宕機(jī),網(wǎng)絡(luò)失敗,broker不可用,但在經(jīng)過應(yīng)用重啟,網(wǎng)絡(luò)和broker恢復(fù),也可以保證待發(fā)送消息不丟失,做到消息的至少一次交付。
審核編輯:湯梓紅
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
2947瀏覽量
73730 -
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7443瀏覽量
88444 -
kafka
+關(guān)注
關(guān)注
0文章
50瀏覽量
5200
原文標(biāo)題:kafka的消息交付語義 真的支持了最少一次嗎?
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論