一、Flink SQL Insight
Flink 作为流批一体计算引擎,给大家提供了统一的 API,统一的算子描述,以及统一的调度。但 Flink 算子的底层仍有一些细微的差别。
对于一个批算子而言,它的输入是一个有限数据集。批算子会基于完整数据集进行计算,计算过程中如果内存装不下,数据会 Spill 到磁盘。
对于流算子而言,它的输入是一个无限数据集。与批算子不同,流算子不能在收集到所有输入数据之后才开始处理,也不可能将这些数据存到磁盘上。所以流算子的处理是一条一条的(也可能会按一小批进行计算)。
当流算子接收到上游的一条数据后,对于 Stateful 算子会从 State 里读取之前的计算结果,然后结合当前数据进行计算,并将计算结果存储到 State 里。因此 State 优化是流计算里非常重要的一部分。
批处理里仅有 Append 消息,而流处理中,不仅有 Append 消息,还有 UpdateBefore、UpdateAfter 和 Delete 消息,这些消息都是历史数据的订正。在算子的计算逻辑里,如果不能很好的处理订正消息,会导致下游数据膨胀,引发新的问题。
完整内容请点击下方链接查看:
最佳实践|如何写出简单高效的 Flink SQL?-阿里云开发者社区
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和《 阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容
Flink作为统一的流批计算引擎,其SQL接口提供了批和流处理的共性。批算子处理有限数据集,可能涉及数据Spill,而流算子对无限数据集进行连续处理,强调State管理。Stateful算子在处理流数据时结合历史状态进行计算,流处理还需处理订正消息以避免下游数据膨胀。
4051

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



