流处理核心技术与容错机制解析
1. 时间依赖问题
在流处理中,时间依赖是一个常见且关键的问题。例如,当状态随时间变化,进行连接操作时,需要确定使用哪个时间点的状态进行连接。以销售场景为例,在开具发票时需要应用正确的税率,而税率会根据国家、州、产品类型和销售日期而变化。当将销售数据与税率表进行连接时,通常希望使用销售时的税率,如果是重新处理历史数据,该税率可能与当前税率不同。
如果跨流的事件顺序不确定,连接操作将变得非确定性,即无法保证在相同输入下重新运行作业能得到相同结果,因为再次运行时输入流中的事件可能以不同方式交错。在数据仓库中,这种问题被称为缓慢变化维度(SCD),通常通过为连接记录的特定版本使用唯一标识符来解决。例如,每次税率变化时分配一个新的标识符,发票中包含销售时的税率标识符。这样做虽然使连接操作具有确定性,但所有版本的记录都需要保留,导致无法进行日志压缩。
2. 流处理中的容错挑战
在批处理中,容错相对容易实现。例如,在 MapReduce 作业中,如果某个任务失败,可以在另一台机器上重新启动该任务,并丢弃失败任务的输出。这是因为输入文件是不可变的,每个任务将输出写入 HDFS 上的单独文件,并且只有在任务成功完成后输出才可见。这种批处理的容错方法确保即使某些任务失败,批处理作业的输出也与没有出错时相同,每个输入记录似乎只被处理一次,这被称为精确一次语义,更确切地说是有效一次语义。
然而,流处理中的容错问题更为复杂。由于流是无限的,无法等待任务完成后再使输出可见,因此不能简单地采用批处理的容错方法。
2.1 微批处理和检查点机制
- 微批处理
超级会员免费看
订阅专栏 解锁全文
1096

被折叠的 条评论
为什么被折叠?



