Spark streaming的Exactly-once容错HA机制

Spark streaming 1.2提供的基于WAL的容错机制(参考上一篇博文http://blog.csdn.net/yangbutao/article/details/44975627),可以保证数据的计算至少被执行一次,

但是不能保证只执行一次,比如在kafka receiver写数据到WAL中后,往zookeeper写offset失败,那么在driver失效恢复后,由于offset还是之前写过的offset位置,数据又会从kafka中拉取一次,就执行一次了,而对于一些场景中对一致的性要求比较严格的,并且1.2的HA机制比较复杂,且对性能的影响比较大。

从1.3开始提供了一种更简单的方式支持了对Spark streaming Exactly-one的需求,这就是Direct API。

参考下图:


区别1.2版本HA依赖于WAL和Receiver,1.3版本的利用Direct API方式实现了Exactly-once。

Driver在生成RDD任务时,对于每个batch的划分,是基于kafka的消费的offset范围的;当每个job在执行时,数据从kafka中基于划分的offset范围获取;当前的offset可以在Driver中通过checkpoint机制进行可靠的存储,以便于失效时可靠的恢复。由于去掉了Receiver,对于并行的操作也不需要配置多少个线程消费kafka的partition,在Direct API的实现中,每个RDD的分区对应于kafka的分区,大大简化的并行编程模型,做到自动并行读取。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值