1. 程式人生 > >關於Spark Streaming 如何進行commit kafka的offset

關於Spark Streaming 如何進行commit kafka的offset

收到就提交提交方式 記為 X:接收到資料就會直接commit,假如某個batch失敗,重啟job,則消費會從上次commit的offset消費,所以會導致失敗的那個batch的部分資料丟失。

batch結束才commit的方式 記為 Y:  會有訊息重複消費的問題。如果要保證消費的邏輯的正確性,則需要做處理邏輯是冪等的。

舉例:假設三個batch,每個batch有三條訊息

 t1:1-2-3,t2:3-4-5,3:6-7-8

處理到 t2.5的時候job掛掉了。

X:重啟的話,會直接消費 6-7-8

Y: 重啟的話,會重新消費3-4-5,但是這個時候其實3,4已經處理過了。

所以如果業務需要,則必須要保證處理邏輯的冪等性