Spark Streaming(三)重难点

1.DStream无状态转换和有状态转换。

无状态转化:每个批次处理都不依赖于先前批次的数据,如map() filter() reduceByKey()等均属于无状态的

有状态转化:依赖之前的批次数据或者中间结果来计算当前批次的数据,包括updateStatebyKey()和window()

 

2.spark的createDstream和createDirectStream区别

追求效率、数据准确可以使用Direct方式,但需要自己对Offset进行处理。

createDstream是高层次API,数据接收存储在Spark executors中,默认会丢失,可启用WAL日志,该日志存储在HDFS上。

如果启用了WAL,需要设置存储级别,即KafkaUtils.createStream(….,StorageLevel.MEMORY_AND_DISK_SER)。

createDirectStream:定期地从kafka的topic+partition中查询最新的偏移量,再根据偏移量范围在每个batch里面处理数据,使用的是kafka的简单消费者api 。

正好一次语义(Exactly-once-semantics),传统的读取kafka数据是通过kafka高层次api把偏移量写入zookeeper中,存在数据丢失的可能性是zookeeper中和ssc的偏移量不一致。EOS通过实现kafka低层次api,偏移量仅仅被ssc保存在checkpoint中,消除了zk和ssc偏移量不一致的问题。缺点是无法使用基于zookeeper的kafka监控工具。

 

3.spark.streaming.stopGracefullyOnShutdown,true 优雅的停止SparkStreaming而不丢失数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值