第4课:Spark Streaming的Exactly-One的事务处理和不重复输出彻底掌握

今天早上的课 主要是讲解在 Spark Streaming 中怎么进行 事务处理

223239_Iybu_2758037.png

 

Exactly Once 的事務處理
1) 數據零掉失,必需有可靠的數據來源和可靠的 Receiver, 且整個應用程序的 metadata 必需進行 checkpoint, 且通過 WAL 來保証數據的安全性。
2) Spark Streaming 1.3 的時候為了免 WAL 的性能損失和實現 Exactly Once 而提供了 Kafka Direct API, 把 Kafka 作為文件存儲系統,此時兼具有流的優勢和文件系統的優勢,至此,Spark Streaming + Kafka 就構成完美的世界。所有的 Executor 通過 kafka API 直接消費數據。直接管理 Offset 才不會重複消費數據。

第一,數據不用copy 副本。
第二,不需要進行 WAL 備份,不會做成不必要的性能損耗。

 

第三, Kafka 的比HDFS 高效很多,因為他內存中採用 memory copy 的方式。

 

數據掉失及其具體的解決方式

 

1) 在 Receiver 收到數據且通過 Driver 的調度 Executor 開始計算數據的時候,如果 Driver 突然崩潰,到此 Executor 會被 Kill 掉,那麼 Executor 中的數據就會掉失,此時就必需通過 e.g. WAL的方式,讓所有的數據都會通過例如 HDFS 的方式首先進行安全性容錯處理,此時如果 Executor 中的數據掉失話就可以通過 WAL 恢復過來

 

據重複讀取的情況

 

在 Receiver 收到數據並且保存到了 HDFS 等持久化引擊但是沒有來得及進行 updateOffsets, 此時 Receiver 崩潰後重新啟動就會通過管理 Kafka 的 ZooKeeper 中元數據,但是此時 Spark Streaming 認為是成功的,但Kafka 認為是失敗的,因為沒有更新 (updateOffsets 到 Zookeeper 中)。此時導致數據重複消費的情況。

 

性能損失:
1) 通過WAL的方式進行會極大的損傷 Spark Streaming 中 Receiver 接收數據的性能。

 

2) 如果通過 Kafka 作為數據來源的話, Kafka中有數據, 然後Receiver接收的時候又會有數據副本,這個數據其實的存儲資源的浪費。

 

 

關於Spark Streaming 數據輸出多次重寫及其解決方案:
1) 為什麼會有這個問題,因為 Spark Streaming 在計算的時候會基於 Spark Core, Spark Core 天生會做以下事情會導致 Spark Streaming 的結果(部份)重複輸出。task 重試,慢任務推測,stage 重複,job 重測。

具體解決方案:
設置 spark.task.maxFailure 次數為 1
設置 spark.speculation 為關閉狀態(因為慢任務推測其實非常消耗性能,所以關閉後可以顥著提高 Spark Streaming 處理性能。

Spark Streaming on Kafka 的話,Job 失敗後可以設置 auto.offset.reset 為 largest 的方式; 

 

最後再次強調 可以通過 transform 和 foreachRDD 基於業務邏輯控制來實現數據不重複消費 和輸出不重複!這兩個方法類似於 Spark Streaming 的後門,可以做任意想象的控制操作

 

 

 

 

 

Thanks for reading

Janice

——————————————————————————————–
Reference: DT大数据梦工厂SPARK版本定制課程 – 第4课:Spark Streaming的Exactly-One的事务处理和不重复输出彻底掌握

 

 

 

转载于:https://my.oschina.net/jcchoiling/blog/672486

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值