使用同步模式的時候,有3種狀態保證消息被安全生產,在配置為1(只保證寫入leader成功)的話,如果剛好leader partition掛了,數據就會丟失。
還有一種情況可能會丟失消息,就是使用異步模式的時候,當緩沖區滿了,如果配置為0(還沒有收到確認的情況下,緩沖池一滿,就清空緩沖池里的消息),
數據就會被立即丟棄掉。
在數據生產時避免數據丟失的方法: 只要能避免上述兩種情況,那么就可以保證消息不會被丟失。
就是說在同步模式的時候,確認機制設置為-1,也就是讓消息寫入leader和所有的副本。
還有,在異步模式下,如果消息發出去了,但還沒有收到確認的時候,緩沖池滿了,在配置文件中設置成不限制阻塞超時的時間,也就說讓生產端一直阻塞,這樣也能保證數據不會丟失。 在數據消費時,避免數據丟失的方法:如果使用了storm,要開啟storm的ackfail機制;如果沒有使用storm,確認數據被完成處理之后,再更新offset值。低級API中需要手動控制offset值。 數據重復消費的情況,如果處理? (1)去重:將消息的唯一標識保存到外部介質中,每次消費處理時判斷是否處理過; (2)不管:大數據場景中,報表系統或者日志信息丟失幾條都無所謂,不會影響最終的統計分析結果。
如果覺得本文對您有幫助,不妨掃描下方微信二維碼打賞點,您的鼓勵是我前進最大的動力: