kafka消息會不會丟失

轉載:https://baijiahao.baidu.com/s?id=1583469327946027281&wfr=spider&for=pc

消息發送方式緩存

想清楚Kafka發送的消息是否丟失,須要先了解Kafka消息的發送方式。安全

Kafka消息發送分同步(sync)、異步(async)兩種方式網絡

默認是使用同步方式,可經過producer.type屬性進行配置;異步

Kafka保證消息被安全生產,有三個選項分別是0,1,-1async

經過request.required.acks屬性進行配置:ide

0表明:不進行消息接收是否成功的確認(默認值);ui

1表明:當Leader副本接收成功後,返回接收成功確認信息;orm

-1表明:當Leader和Follower副本都接收成功後,返回接收成功確認信息;同步

六種發送場景it

兩個維度相交,生成六種狀況,以下圖:

消息丟失的場景

網絡異常

acks設置爲0時,不和Kafka集羣進行消息接受確認,當網絡發生異常等狀況時,存在消息丟失的可能;

客戶端異常

異步發送時,消息並無直接發送至Kafka集羣,而是在Client端按必定規則緩存並批量發送。在這期間,若是客戶端發生死機等狀況,都會致使消息的丟失;

緩衝區滿了

異步發送時,Client端緩存的消息超出了緩衝池的大小,也存在消息丟失的可能;

Leader副本異常

acks設置爲1時,Leader副本接收成功,Kafka集羣就返回成功確認信息,而Follower副本可能還在同步。這時Leader副本忽然出現異常,新Leader副本(原Follower副本)未能和其保持一致,就會出現消息丟失的狀況;

以上就是消息丟失的幾種狀況,在平常應用中,咱們須要結合自身的應用場景來選擇不一樣的配置。

想要更高的吞吐量就設置:異步、ack=0;想要不丟失消息數據就選:同步、ack=-1策略

附:Kafka備份策略,不理解的能夠看個人另外一篇文章《Kafka消息的備份策略》

一個全棧程序猿的經驗分享,你們以爲有收穫的請在評論中給個鼓勵,不足之處也請多多指出;最後預祝你們開心永在,感謝您的關注。

相關文章
相關標籤/搜索