高效能kafka之訊息可靠性分析及常見問題

2021-08-21 10:19:32 字數 615 閱讀 7712

kfaka發訊息的模式分為同步和非同步,預設是同步的,非同步的吞吐量比較高,但是訊息丟失的概率比較大,同步還是非同步可以通過producer.type屬性進行控制

kafka有三種訊息確認機制,由request.required.acks屬性控制,acks=0時代表不適用確認機制,producer傳送訊息之後就不管訊息是否成功,這種情況吞吐量最高,同時訊息可靠性難以保證,會出現丟訊息的問題;acks=1時,leader收到訊息後會返回確認訊息,此時如果leader收到訊息但是follow未同步,則可能造成訊息丟失,acks=-1時,leader和follow都收到訊息時進行確認,此時leader掛了,follow中還是有訊息的存在,最安全,但是吞吐量有所下降;

對於非同步情況,如果發訊息的時候快取區滿,producer再寫資料時會清空快取池,此時會造成訊息丟失,可以通過設定快取區滿時阻塞來規避這種情況

kafka訊息唯一性的保證,

同步狀態下確認機制設定成-1

非同步狀態下設定快取池滿時producer阻塞,可以保證訊息不丟失,

消費者處理資料時,使用唯一索引,重複資料過濾, 以此來保證資料不重複,

但是對於producer傳送了訊息,broker還未接受,然後producer掛掉了的情況,訊息還是會丟失的;

Kafka訊息可靠性

如果mq沒有類似資料庫事務結構和保證,是不可能達到訊息投遞100 可靠的,極端情況下訊息投遞要麼丟失或重複。下面咋們從producer,broker,consumer的角度分析一下kafka中會出現哪些情況。目前生產者傳送訊息 request.required.acks 有三種方式。acks 0 p...

kafka 九 Kafka訊息的可靠性

沒有乙個中介軟體能夠做到百分之百的完全可靠,可靠性更多的還是基於幾個9的衡量指標,比如4個9 5 個9.軟體系統的可靠性只能夠無限去接近100 但不可能達到100 所以kafka如何是實現最大可能的可靠性呢?你可以建立更多的分割槽來提公升可靠性,但是分割槽數過多也會帶來效能上的開銷,一般來說,3個副...

5 Kafka訊息可靠性

在訊息中介軟體裡,有乙個非常重要的問題就是怎麼保證訊息不丟失,而這就是訊息的可靠性問題。1 acks 這個引數用於控制producer生產訊息的永續性。當一條訊息被提交,只要有任何乙個副本儲存了該訊息,並且副本存活,那麼就可以認為該訊息是不可丟失的。當producer傳送一條訊息給kafka集群時,...