spark-streaming對接kafka有兩種方式:
1.基於receiver的方式,屬於高級API,簡單但是效率低,容易丟失數據(可以設置WAL)。
它的原理是:receiver從kafka拉取數據存儲到executor的內存中,spark-streaming啟動job處理數據。
偏移量保存在zookeeper中。
2.基於Direct的方式
屬於低級API,效率高。
executor直接對接kafka的partition,觸發action后,周期性地讀取topic分區指定offset的數據,生成batch運算。
優點:
簡言之,省去了receiver,降低資源消耗,提高性能。
1.簡化並行讀寫:Spark會創建和kafka partition數量一致的RDD partition,並且並行化從kafka中讀取數據,所以在kafka的partition和rdd的partition之間,一一對映。
2.高性能:direct沒有receiver,不需要WAL寫前日志,因為kafka中的副本就可以保證數據不丟失。
3.降低資源,direct不需要receiver,因此申請的executor可以全部用於運算。
缺點:
1.開發復雜
2.要spark自己維護offset
