本期內容:dom
1,Executor的WAL性能
2,消息重放日誌
3,其餘繼承
最自然的數據容錯就是利用數據副本,另一種是數據源支持重放。接口
基於BlockManager來作數據備份,StorageLevelit
啓用WAL時必須設置checkpoint目錄,由於WAL會寫入日誌到checkpoint目錄。sed
用戶須要繼承WriteAheadLog類,實現讀寫,清除,關閉,得到迭代器的接口。迭代器
FileBasedWriteAheadLog繼承自WriteAheadLog類,完成WAL的操做。方法
寫操做當失敗時會嘗試幾回,maxFailures爲構造時傳入的參數,默認爲1im
讀操做,調用FileBasedWriteAheadLogRandomReader類的read方法,隨機讀取。
Spark Streaming從Kafka獲取數據有兩種方式:Receiver和Direct方式。Receiver方式是經過Zookeeper來管理Kafka偏移量元數據信息的。若是失敗後,Kafka後基於這個Offset從新進行讀取。可能存在數據重複消費的問題。Direct方式是直接操做Kafka,本身管理Offset,能夠作到有且僅有一次的容錯處理。DirectKafkaInputDStream類以下
KafkaRDD是基於偏移量,來獲取數據生成RDD的。
容錯的弊端是耗時間,下降性能。
總結:Executor端的容錯方式默認使用的StorageLevel爲MEMORY_AND_DISK_2的方式,若是一個Executor掛了,就能夠從另外一個Executor上獲取數據繼續進行計算。還可使用WAL的方式,在接收到數據先寫入到日誌中,若是Executor掛了,就能夠從checkpoint中進行恢復。數據重放是基於Kafka實現的,經過設置要讀取的數據偏移量來獲取數據。當計算失敗時,就能夠根據上次的偏移量從新獲取數據進行計算。