高效能kafka之訊息可靠性分析及常見問題
阿新 • • 發佈:2019-01-05
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有三種訊息確認機制,由request.required.acks屬性控制,acks=0時代表不適用確認機制,producer傳送訊息之後就不管訊息是否成功,這種情況吞吐量最高,同時訊息可靠性難以保證,會出現丟訊息的問題;acks=1時,leader收到訊息後會返回確認訊息,此時如果leader收到訊息但是follow未同步,則可能造成訊息丟失,acks=-1時,leader和follow都收到訊息時進行確認,此時leader掛了,follow中還是有訊息的存在,最安全,但是吞吐量有所下降;
對於非同步情況,如果發訊息的時候快取區滿,producer再寫資料時會清空快取池,此時會造成訊息丟失,可以通過設定快取區滿時阻塞來規避這種情況
kafka訊息唯一性的保證,
同步狀態下確認機制設定成-1
非同步狀態下設定快取池滿時producer阻塞,可以保證訊息不丟失,
消費者處理資料時,使用唯一索引,重複資料過濾, 以此來保證資料不重複,
但是對於producer傳送了訊息,broker還未接受,然後producer掛掉了的情況,訊息還是會丟失的;