数据流编程模型
原文链接
博主理解篇
抽象层次
? ? Flink提供不同级别的抽象来开发流/批处理应用程序。
-
<李>这个最低级别的抽象提供了有状态的流式操作。它是通过处理函数嵌入到DataStream数据API。它允许用户自由的处理一个或者多个数据流中的事件,并且使用一致,容错的状态。此外,用户可以注册事件时间和处理时间回调,允许程序实现复杂的计算。李>
<李>实际上,大多数应用不需要上面描述的低级别抽象,而是针对核心API(核心API),例如:DataStream数据API(有边界和无边界的数据流)和数据集的API(有边界的数据集)。这些流畅的API提供通用数据处理,像用户指定的各种形式的转换(转换),连接(连接),聚合聚(合),windows(窗口化操作),状态(状)态等等。这些API表示在各自的编程语言中为类(类)中的数据类型进行处理。李>
? ?低阶的处理函数集成了DataStream数据API,这样就可以针对特性的操作使用低层级的抽象.DataSet API为有边界的数据集提供了附加的原语,例如循环/迭代。
-
<李>表API是一种以表为中心的声明式的DSL,它可能会被动态的改变(当处理数据流的时候).Table API遵循扩展模型:表有一个附加模式(类似于关系型数据库表)并且API提供了类似的操作,例如:选择、项目,加入,group by,聚合等等.Table API声明式的定义了逻辑操作应该怎么做而不是确切的指定操作的代码看起来如何。尽管表API可以通过多种形式的用户自定义函数来扩展,它的表现还是不如核心API,但是用起来更加的简洁(写更少的代码)。此外,表API还可以执行一个优化器,适用于优化规则之前执行。
? ?表和数据流/数据集之间可以无缝的转换,允许程序组合使用表api和数据流和数据集的api。李> <李> Flink最高级别的抽象是sql。这种抽象在语义和表达上面类似于表API,但将程序表示为sql查询表达式. sql抽象与表API紧密联系在一起,sql查询可以在表API定义的表中执行。
程序和数据流
? ? Flink程序的基本构建模块是<>强流强>(流)和强> <强>转换(转换)。(需要注意的是,Flink API的数据集所使用的数据集内部也是流——更多内容将在以后解释)。从概念上讲流(可能没有结束)是一个数据流记录,而转换是一个操作,它取一种或者多个流作为输入,并产生一个或者多个输出流作为结果。
? ?当执行的时候,Flink程序映射到<强>流媒体数据流强>(流数据流),由<强>流>强和转换<强>操作符>强组成。每一个数据流开始于一个或者多个<强> 强>来源,并且终止于一个或者多个<强> >强。数据流类似于任意的<>强有向无环图(熟练的技艺)>强。虽然通过迭代构造允许特定形式的环,但是大多数情况下,简单起见,我们都不考虑这一点。
Apache Flink官方文档——概念