一、生產者生產數據不丟失
1、生產者數據不丟失過程圖
說明:有多少個分區,就啓動多少個線程來進行同步數據
2、 發送數據方式
可以採用同步或者異步的方式-過程圖
可以採用同步或者異步的方式
同步:發送一批數據給kafka後,等待kafka返回結果
1、生產者等待10s,如果broker沒有給出ack相應,就認爲失敗。
2、生產者重試3次,如果還沒有相應,就報錯
異步:發送一批數據給kafka,只是提供一個回調函數。
1、先將數據保存在生產者端的buffer中。buffer大小是2萬條
2、滿足數據閾值或者數量閾值其中的一個條件就可以發送數據。
3、發送一批數據的大小是500條
說明:如果broker遲遲不給ack,而buffer又滿了,開發者可以設置是否直接清空buffer中的數據。
3、ack機制(確認機制)
生產者數據不抵事,需要服務端返回一個確認碼,即ack響應碼;ack的響應有三個狀態值
0:生產者只負責發送數據,不關心數據是否丟失,響應的狀態碼爲0(丟失的數據,需要再次發送 )
1:partition的leader收到數據,響應的狀態碼爲1
-1:所有的從節點都收到數據,響應的狀態碼爲-1
說明:如果broker端一直不給ack狀態,producer永遠不知道是否成功;producer可以設置一個超時時間10s,超 過時間認爲失敗。
二、kafka的broker中數據不丟失
在broker中,保證數據不丟失主要是通過副本因子(冗餘),防止數據丟失
三、消費者消費數據不丟失
在消費者消費數據的時候,只要每個消費者記錄好offset值即可,就能保證數據不丟失。