第12课:Spark Streaming源码解读之Executor容错安全性

本期内容:dom

1,Executor的WAL性能

2,消息重放日志

3,其余继承

最自然的数据容错就是利用数据副本,另一种是数据源支持重放。接口

基于BlockManager来作数据备份,StorageLevelit

    

启用WAL时必须设置checkpoint目录,由于WAL会写入日志到checkpoint目录。sed

    

用户须要继承WriteAheadLog类,实现读写,清除,关闭,得到迭代器的接口。迭代器

    

FileBasedWriteAheadLog继承自WriteAheadLog类,完成WAL的操做。方法

    

写操做当失败时会尝试几回,maxFailures为构造时传入的参数,默认为1im

    

读操做,调用FileBasedWriteAheadLogRandomReader类的read方法,随机读取。

    Spark Streaming从Kafka获取数据有两种方式:Receiver和Direct方式。Receiver方式是经过Zookeeper来管理Kafka偏移量元数据信息的。若是失败后,Kafka后基于这个Offset从新进行读取。可能存在数据重复消费的问题。Direct方式是直接操做Kafka,本身管理Offset,能够作到有且仅有一次的容错处理。DirectKafkaInputDStream类以下

    

KafkaRDD是基于偏移量,来获取数据生成RDD的。

    

容错的弊端是耗时间,下降性能。

总结:Executor端的容错方式默认使用的StorageLevel为MEMORY_AND_DISK_2的方式,若是一个Executor挂了,就能够从另外一个Executor上获取数据继续进行计算。还可使用WAL的方式,在接收到数据先写入到日志中,若是Executor挂了,就能够从checkpoint中进行恢复。数据重放是基于Kafka实现的,经过设置要读取的数据偏移量来获取数据。当计算失败时,就能够根据上次的偏移量从新获取数据进行计算。

相关文章
相关标签/搜索