本篇博文组织形式如下:
一:Exactly-One的事务处理
二:输出不重复
一:Exactly-One的事务处理
一:Exactly-One的事务处理
1. 什么是事务处理:
a) 能够处理且只被处理一次。例如,银行转账,A转给B,A有且仅转一次。
b) 能够输出,且只能够输出一次。而B接收转账,且直接收一次。
2. 事务处理会不会失败呢?
可能性不大,Spark是批处理的方式来进行流处理Batch Interval的方式,Spark应用程序启动的时候为我们分配了资源,而且在计算的时候也会动态的分配资源。
3. WAL机制:
写文件的时候,先通过WAL写入到文件系统中,然后再通过Executor存储到内存或者磁盘中。但是假设数据没有写成功的话,后面一定不会存储到Executor中,这样的话,Executor此时就不会向Driver汇报,那么这些数据一定不会被计算。因此,WAL也并不是一定就可以保证数据安全。
4. Executor接收数据是一条一条接收的,Receiver会将数据在内存中积累到一定程度的时候才会写入到WAL或者说写入到磁盘中。但是如果还没有积累到一定程度,Receiver崩溃了咋办?
5. InputDStream的真正产生是在:Driver端产生的。Receiver不断的接收数据,Receiver为了保证安全性,他会不断的通过容错的方式进行处理(把数据写进磁盘,写进内存同时有副本的方式,或者说WAL),