流计算语义(Semantics)的定义
每一条记录被流计算系统处理了几次
有三种语义:
1、At most once 一条记录要么被处理一次,要么没有被处理
2、At least once 一条记录可能被处理一次或者多次,可能会重复处理
3、Exactly once 一条记录只被处理一次
Zero data lost = 不管有失败还是没有失败,在每一个阶段都应该是at least once的语义
使用Kafka Direct方法,可以使得接受语义为Exactly once :
1、将kafka的partition当作RDD的partition,和读文件一样
2、不需要Receivers
3、不需要union多个DStream来达到启动多个Receiver
4、不需要WAL
val directKafkaStream = KafkaUtils.createDirectStream(…)
幂等output
只要数据源是一样,那么结果的输出就是一样,可以直接overwrite