SparkStreaming数据零丢失方案

场景分析

SparkStreaming读取kafka消息队列数据时,如果SparkStreaming突然由于一些非代码原因挂掉,重启Spark集群如何能确保SparkStreaming能不丢失kafka队列内的数据。主要利用了kafka集群的offset值。offset记录了kafka每个分区数据读取到了哪里,类似于游标。有三种解决方案操作offset:

1.Checkpoints

利用spark Checkpointing 机制保存数据至hdfs,最大的缺点是不代码改动后之前的checkpoint将失效
详情参考http://spark.apache.org/docs/latest/streaming-programming-guide.html#checkpointing

2.Kafka itself##

详情参考http://spark.apache.org/docs/latest/streaming-kafka-0-10-integration.html#kafka-itself

3.Your own data store##

操作前记录offset值,操作后更新offset值。本文介绍如何用zookeeper存储offset,读取更新offset值

实现将offset存入Zookeeper

在 SparkStreaming 中消费 Kafka 数据的时候,有两种方式分别是 1)基于 Receiver-based 的 createStream 方法和 2)Direct Approach (No Receivers) 方式的 createDirectStream 方法,详细的可以参考 Spark Streaming + Kafka Integration Guide ,但是第二种使用方式中 kafka 的 offset 是保存在 checkpoint 中的,如果程序重启的话,会丢失一部分数据,可以参考 Spark & Kafka - Achieving zero data-loss 。

本文主要讲在使用第二种消费方式(Direct Approach)的情况下,如何将 kafka 中的 offset 保存到 zookeeper 中,以及如何

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值