这是我参与「第四届青训营 」笔记创作活动的第3天
题目来源:【大数据专场 学习资料一】第四届字节跳动青训营 - 掘金
-
流式处理中算子为什么会有状态?
- 因为flink需要做一些如map,bykey,group by等操作,需要记录状态用于后续更新
-
数据流和动态表之间是如何进行转换的?
- 将数据流切割成小块,每一块任务是一批数据,对该批数据执行sql,生成动态表
-
Flink 作业为什么需要考虑故障恢复?
- 如果不考虑故障恢复,可能会丢失数据或重复消费数据,无法实现exactly once
-
Flink 故障恢复前为什么需要Checkpoint?
- 需要通过checkpoint记载上一次正常情况处理位置,并用其恢复作业
-
为什么不能保留任意时刻的状态作为故障恢复的时间点?
- 需要等待所有处理逻辑消费完成,source保存状态和之前的数据
-
Flink Checkpoint 对作业性能的影响有多大?
- 处理barrier需要保存当前状态,耗时可能较大
- 如果有多个上游,需要等待所有上游的barrier,等待耗时
- 快照提交到远端可能极其耗时,所以会异步提交
- 解耦了任务执行和快照生成,各个算子完成快照制作就可以继续工作,不用等待所有算子完成
-
两阶段提交协议对性能影响有多大?
- 如果某个节点制作快照失败,整个事务需要回滚,会影响处理速度
- 事务未完成下游不可见,输出数据不再是实时写入到外部系统,而是分批次地提交
-
写入下游如果不支持事务读写,能做到 Exactly-Once 语义么?
- 我理解可以的,flink本身保证事务未完成不提交给下游,不需要下游提供事务读写,如果下游处理失败,也可以更改offset,从之前的数据重新消费。