使用Flink

Flink【宣称】使应用程序的构建过程符合自然规律。
核心特点:特别是它如何保障数据的正确性【正确性并不完全等同于准确性!!!】。
我需要什么? 我期望什么? 我在什么时候需要得到结果?
《Flink基础教程》。

不同类型的正确性

符合产生数据的自然规律

 流处理器(尤其是Flink)的正确性体现在计算窗口的定义符合数据产生的自然规律。
 Flink的流处理能力能够使计算窗口与会话窗口吻合。
 Flink能做到这一点的根本原因是,它可以根据真实情况设置计算窗口。

image

事件时间与处理时间。
为了将事件指定给某一个窗口,程序员很有可能会选择采用事件时间,即事件实际发生的时间。
另一种方式是采用处理时间,即事件流数据开始被程序处理的时间。

事件时间

 一般而言,流处理架构不常采用事件时间,尽管越来越多的人这样做。
 Flink理解事件时间的这种能力保障了正确性。
 与其他流处理系统相比,Flink的一个优势就是能区分不同类型的时间。

发生故障后仍保持准确

 若想使计算保持准确,就必须跟踪计算状态。
 如果计算框架本身不能做到这一点,就必须由应用程序的开发人员来完成这个任务。
 连续的流处理很 难跟踪计算状态,因为计算过程没有终点。
 实际上,对状态的更新是持续进行的。

 如何在故障发生之后仍能进行有状态的计算?
 Flink所用的技术叫作检查点(checkpoint)。
 在每个检查点,系统都会记录中间计算状态,从而在故障发生时准确地重置。
 这一方法使系统以低开销的方式拥有了容错能力——当一切正常时,检查点机制对系统的影响非常小。
 检查点也是Flink能够按需重新处理数据的关键所在。
 并不是只有在发生故障之后才会重新处理数据。
 比如,在运行新模型或者修复bug时,就可能需要重播并重新处理事件流数据。

及时给出所需结果

 延迟对结果的影响。
 有些计算结果或许很准确,例如求和或者求平均值的结果,但是如果没有及时地取得结果,那么很难说它们是正确的。

使开发和运维更轻松

 Flink与用户交互的接口也有助于保障正确性【实际上并不如Spark提供的API简单易用,仍需自定义很多扩展】。
 完备的语义简化了开发工作,进而降低了出错率。
 Flink还承担了跟踪计算状态的任务,从而减轻了开发人员的负担,简化了编程工作,并提高了应用程序的成功率。
 用同一种技术来实现流处理和批处理,大大地简化了开发和运维工作。

 没有必要为了采用Flink而彻底抛弃其他技术。
 流处理架构可以分步来实现。
 有些公司在引入流处理架构时,先实现简单的应用程序,等到熟悉后再推广。

【完】

GitHub flink-training-exercises
GitHub sql-training
本文知识来源于书本,仅供快速浏览学习,勿盲目转载
GitHub flink-training-course/课程表(持续更新)

邵志鹏 wechat
扫一扫上面的二维码关注我的公众号
0%