Flink流式处理概念简介
一,抽象层次
Flink提供不同级别的抽象来开发流/批处理应用程序。
1,stateful streaming
最底层。它通过Process Function嵌入到DataStream API中。它允许用户从一个或多个流自由处理事件,并使用一致的容错状态。此外,用户可以注册事件时间和处理时间回调,允许程序实现复杂的计算。
2,Core APIs
实际上,大多数应用程序不需要上述的低级别抽象,而是针对Core API(如DataStream API(有界/无界流))和DataSet API(有界数据集)进行编程。这些流畅的API为数据处理提供了常见的构建模块,如用户指定的各种转换形式,连接,聚合,窗口,状态等。在这些API中处理的数据类型以各自的编程语言表示为classes。底层的Process Function和DataStream API的整合,使得针对一些特定的操作可以实现更低层次的抽象。DataSet API为有界数据集提供了额外的原函数,如循环/迭代。
3,Table API
Table API是以表为中心的声明式DSL,可能是动态更改表(表示流时)。Table API遵循(扩展)关系模型:Table 具有附加schema(与关系数据库中的表相似),API提供操作,例如select,project,join,group-by,aggregate等。Table API代表的是应该做什么逻辑操作,而不是直接指定如何编写操作的源代码。虽然Table API可以通过各种类型的用户定义的函数进行扩展,但它不如Core API那么具有表达力,但使用起来更加简洁(少写很多代码)。
此外,Table API程序还可以通过在执行之前应用优化规则的优化器。
可以在表和DataStream / DataSet之间无缝转换,允许程序将Table API和DataStream和DataSet API混合使用。
4,SQL
最高层次的抽象就是SQL。无论是语法还是表达,该层次的抽象都很像Table API。SQL抽象与Table API紧密交互,SQL查询可以在Table API中定义的表上执行。
二,Programs and Dataflows
Flink程序的基本构建块是流和转换。在概念上,stream 是data records的(潜在的永无止境的)flow,并且变换是将一个或多个流作为输入的操作,