450
社区成员
发帖
与我相关
我的任务
分享
原来使用spark1.1.0版本中的createStream函数,但是在数据处理速度跟不上数据消费速度且job异常退出的情况下,可能造成大量的数据丢失。
spark后续版本对这一情况有了很大的改进,为了满足能够提供更好的容错性保证和更加可靠的语义保证的需求,Spark 1.2中引入了WAL,他保证从任何可靠的数据源(比如提供事务的数据源:Flume, Kafka和Kinesis)接收到的数据在失败中都不会被丢失;如果数据源不可靠(不提供事务),比如从sockets接收数据,WAL也可以尽量减少数据的丢失。然而对于那些可以从任意位置读取数据的数据源(比如Kafka),我们可以实现功能更强的容错,因为Spark Streaming对这些数据源有更强的控制能力。
Spark 1.3引入了 Direct API概念,这个可以在不使用WAL的情况下实现仅处理一次的语义(exactly-once semantics)。1.3版本可以直接通过低阶API从kafka的topic消费消息,并且不再向zookeeper中更新consumer offsets,使得基于zookeeper的consumer offsets的监控工具都会失效。