flink学习笔记(一)——数据流编程模型
flink官方文档学习笔记,本文主要是flink一些基础概念
数据流编程模型(Dataflow Programming Model)
抽象等级(Levels of Abstraction)
Flink提供不同级别的抽象来开发流/批处理应用程序。
- Statefule Stream Processing:是最低级别(底层)的抽象,只提供有状态的流。它通过ProcessFunction嵌入到DataStream API之中。它使得用户可以自由处理来源于一个或者多个流的事件
DataStream/DataSet API:在我们的实际工作中,大多数的应用程序是不需要上文所描述的低级别(底层)抽象,而是相对于诸如DataStream API(有界/无界流)和DataSet API(有界数据集)的Core API进行编程。这些API提供了用于数据处理的通用模块,如各种指定的transformations, joins, aggregations, windows, state等。在API中,这些处理的数据类型都是一个具体的实体类(class)。
底层的Process Function与DataStream API集成在一起,可以仅对一些操作进行底层抽象。
Table API:是围绕着table的申明性DSL,可以被动态的改变(当其表示流时)。Table API遵循(扩展)关系模型:表有一个模式链接(类似与在关系数据库中的表),API也提供了一些类似的操作:select, project, join, group-by, aggregate等。Table API程序申明定义了怎么做是规范的,而不是明确指定应该是什么样子的。虽然Table API可以通过各种类型的用户定义的函数进行扩展,但它比Core API表达的更少,但使用起来更简洁(少写代码)。另外,Table API程序也会通过一个优化器,在执行之前应用优化规则。
可以在表和DataStream / DataSet之间进行无缝转换,允许程序混合使用Table API和DataStream 和DataSet API。
- Flink提供的最高级抽象是SQL。这种抽象在语义和表现力方面与Table API类似,但是将程序表示为SQL查询表达式。在SQL