spark兩種kafka偏移量維護方式

1.spark可以通過checkpoint的方式來維護kafka的偏移量,配置簡單,只需要配置checkpoint的路徑就可以完成偏移量的維護,如果本身spark業務就採用了state狀態,那麼既不需要額外配置即可確保偏移量的維護。

原理:spark會將kafka spark straming處理的topic以及對應消費偏移量持久化到文件當中,當spark任務崩潰後,保存在持久化文件的偏移量將會通過反序列化得到,達到繼續崩潰前的偏移量繼續消費的目的。

優點:配置方便,幾乎不需要額外的代碼量。

缺點:本身不需要state的任務會有一些額外要注意的點,廣播變量在恢復的時候需要 重新廣播,否則再重新訪問時將會直接崩潰。同一批數據如果存在問題沒有正常trycatch,再下次恢復重啓後將會直接跳過該批數據,對數據的質量存在一定風險。Spark一些配置修改之後,需要刪除checkpoint目錄才能起作用,也會導致偏移量的失去。環境中的kafka如果被清空,也需要刪除kafka目錄,否則無法恢復。

 

2.spark在010的kafka api中給出了異步提交偏移量的接口,可以通過將偏移量提交的方式來維護偏移量在kafka上。

原理:在kafka stream每批rdd生成的compute()方法中,將會在末尾異步提交之前的偏移量到kafka上,而發送的具體偏移量是在rdd處理的末尾通過commitAsync()提交到stream的。

優點:可以規避checkpoint帶來的一些約束,修改配置不需要刪除checkpoint文件也不會導致偏移量的丟失,環境中的kafka被清空只需要簡單重啓就能解決。

缺點:對代碼的編寫規範具有要求,如果任務的try catch不全面將會導致無法規避掉的崩潰問題,只有修改代碼或者更換groupid能夠解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章