一.抽象级别
Flink提供了不同级别的抽象来开发流处理/批处理应用程序。如图:
- 最低级别的抽象仅提供状态流。它通过Process Function嵌入到DataStream API中。它允许用户自由地处理一个或多个流中的事件,并使用一致的容错状态。此外,用户可以将注册事件时间和处理时间回调,从而允许程序实现复杂的计算。
- 实际上,大多数应用程序不需要上述低级抽象,而是针对核心API进行编程,例如DataStream API和DataSet API。这些流畅的API为数据处理提供了通用的构建块,例如各种形式的用户指定的转换、链接、聚合、窗口、状态等。这些API中处理的数据类型以相应编程语言中的类表示。
- Table API是声明性的DSL表,其可被动态地修改。该表API遵循【扩展】关系模型:表有一个模式连接【类似于在关系数据库中的表】和API提供可用的操作,如选择,连接 ,分组,聚合等。表API程序以声明的方式定义应该进行哪些逻辑运算,而不确切地定义运算的代码风格。尽管Table API可以通过各种类型的用户定义函数进行扩展,但它的表达能力不如Core API,但使用起来更加简洁。此外,Table API程序经过了优化程序,该优化程序在执行之前应用优化规则。
Table API可以在表和DataStream/DataSet之间无缝转换,从而允许程序在Table API以及DataStream和DataSet API中混合使用。 - Flink提供的最高级别的抽象是SQL。这种抽象在语义和表达方式上均类似于Table API,但