1. 程式人生 > 其它 >SparkStream整合Kafka直連方式的自動提交和手動提交偏移量

SparkStream整合Kafka直連方式的自動提交和手動提交偏移量

SparkStream新版本中支援與Kafka直連的方式。下圖是預設自動提交偏移量的情況。executor中的task會直連kafka對應的分割槽,消費完資料會把偏移量寫回到kafka中特殊的__consumer_offset中

這種方式控制偏移量不夠精準,無法保證資料的一致性,也就是exactly once。所以一般會關閉自動提交方式,來手動提交偏移量。

注意這裡手動提交就要拿出來偏移量,因為是DSteam形式的,所以只在源頭的RDD中存在,在呼叫

createDirectStream

方法生成DStream後,因為偏移量只在RDD中存在,所以要把DStream轉換成RDD。DStream轉換成RDD有倆種方式,

foreachRDD

和transform。這倆種方式都是執行在driver端的,不是生成task被排程到executor中的。

倆種方式的區別是foreachRDD只是方法,沒有返回值,它對每一個批次的RDD進行處理,如果要在後續使用window類的DStream操作會做不到,一般用來開闢對外連線。transform方法有返回值,後續可以繼續使用DStream操作。

所以綜上,手動提交偏移量,是在driver端獲取和更新偏移量的,executor只是執行action之後被排程過去的task運算元操作。