Kafka消息的可靠性
沒有一個中間件能夠做到百分之百的完全可靠,可靠性更多的還是基于幾個9的衡量指標(biāo),比如4個9、5個9. 軟件系統(tǒng)的可靠性只能夠無限去接近100%,但不可能達(dá)到100%。所以kafka如何是實現(xiàn)最大可能的可靠性呢?
分區(qū)副本, 你可以創(chuàng)建更多的分區(qū)來提升可靠性,但是分區(qū)數(shù)過多也會帶來性能上的開銷,一般來說,3個副本就能滿足對大部分場景的可靠性要求
acks,生產(chǎn)者發(fā)送消息的可靠性,也就是我要保證我這個消息一定是到了broker并且完成了多副本的持久化,但這種要求也同樣會帶來性能上的開銷。它有幾個可選項
1 ,生產(chǎn)者把消息發(fā)送到leader副本,leader副本在成功寫入到本地日志之后就告訴生產(chǎn)者消息提交成功,但是如果isr集合中的follower副本還沒來得及同步leader副本的消息,leader掛了,就會造成消息丟失
-1 ,消息不僅僅寫入到leader副本,并且被ISR集合中所有副本同步完成之后才告訴生產(chǎn)者已經(jīng)提交成功,這個時候即使leader副本掛了也不會造成數(shù)據(jù)丟失。
0:表示producer不需要等待broker的消息確認(rèn)。這個選項時延最小但同時風(fēng)險最大(因為當(dāng)server宕機(jī)時,數(shù)據(jù)將會丟失)。
保障消息到了broker之后,消費者也需要有一定的保證,因為消費者也可能出現(xiàn)某些問題導(dǎo)致消息沒有消費到
enable.auto.commit默認(rèn)為true,也就是自動提交offset,自動提交是批量執(zhí)行的,有一個時間窗口,這種方式會帶來重復(fù)提交或者消息丟失的問題,所以對于高可靠性要求的程序,要使用手動提交。 對于高可靠要求的應(yīng)用來說,寧愿重復(fù)消費也不應(yīng)該因為消費異常而導(dǎo)致消息丟失
?
總結(jié)
以上是生活随笔為你收集整理的Kafka消息的可靠性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。