什么是可靠性
對于消息系統(tǒng)來說,所謂可靠性就是指消息可以從生產(chǎn)者(producer)準確的送達到消費者(consumer)。可靠性保證有三個層次:
- Atmostonce最多一次。消息可能會丟失,但是決不重復。
- Atleastonce至少一次。消息決不丟失,但可能會重復。
- Exactlyonce恰好一次。這是最完美的,既不丟失,也不重復。
如果要可靠的準確的傳達消息,需要生產(chǎn)者程序,消息系統(tǒng)和消費者程序相互合作。
什么是一致性
對于消息系統(tǒng)來說,一致性是指,如果一個消費者c1讀到消息m1的offset是x,那么之后的任何消費者讀到的offset是x的消息一定也是c1。
可以參看我的一個視頻《分布式系統(tǒng)中的強一致性和弱一致性》
Kafka如何保證可靠性和一致性
如果要可靠的準確的傳達消息,需要生產(chǎn)者程序,消息系統(tǒng)和消費者程序相互合作。
生產(chǎn)者需要確認消息成功送達kafka的服務區(qū)broker,并且得到broker的返回消息,確認消息已經(jīng)提交(commit)。如果沒有成功返回需要重發(fā),直到發(fā)送成功。
詳細的配置解釋,可以參考我的頭條文章《Kafka的可靠性保證-生產(chǎn)者的配置》
Kafka的服務器是一個集群,集群中至少需要包含3個以上的節(jié)點。通過主從備份可以保證不丟消息。只要提交的消息就保證不丟。
詳細的配置解釋,可以參考我的頭條文章《Kafka的一致性保證》
消費者從Kafka讀取消息以后要妥善處理。所謂妥善處理,就是完成自己獲取這一條消息的目標,比如生成一條業(yè)務數(shù)據(jù)存入數(shù)據(jù)庫,或者發(fā)送消息到其他的系統(tǒng)。
消費者需要準確的維護offset,也就是消費到哪一條消息了。如果維護不好,就會導致丟消息或者重復消費。可以參考我的頭條動畫視頻《[動畫]如何設計可靠的Kafka的消費者程序-exactlyonce》。
詳細的配置解釋,可以參考我的頭條文章《Kafka的可靠性保證-消費者的配置》
本人,@小馬過河Vizit,專注于分布式系統(tǒng)原理和實踐分享。希望利用動畫生動而又準確的演示抽象的原理。。
關于我的名字。小馬過河Vizit,意為凡事像小馬過河一樣,需要自己親自嘗試,探索才能獲得樂趣和新知。Vizit是指