概念-概览
实践培训解释了作为Flink的API基础的有状态和及时流处理的基本概念,并提供了这些机制如何在应用中使用的例子。有状态的流处理是在数据管道和ETL的背景下介绍的,并在容错部分进一步发展。在 "流分析 "一节中介绍了及时的流处理。
本概念深度部分提供了对Flink的架构和运行时如何实现这些概念的更深入理解。
Flink的API
Flink为开发流式/批处理应用提供了不同层次的抽象。
- 最底层的抽象只是提供有状态和及时的流处理。它通过处理函数嵌入到DataStream API中。它允许用户自由处理来自一个或多个流的事件,并提供一致的、容错的状态。此外,用户还可以注册事件时间和处理时间的回调,使程序可以实现复杂的计算。
- 在实际应用中,很多应用程序并不需要上述的低级抽象,而是可以针对Core APIs进行编程:DataStream API(有界/无界流)和DataSet API(有界数据集)。这些流畅的API为数据处理提供了常见的构件,比如各种形式的用户指定的转换、连接、聚合、窗口、状态等。在这些API中处理的数据类型在各自的编程语言中被表示为类。
低级处理函数与 DataStream API 相集成,因此可以根据需要使用低级抽象。DataSet API 提供了关于有界数据集的附加基元,如循环/迭代。
- 表 API 是以表为中心的声明式 DSL,它可能是动态变化的表(当表示流时)。Table API遵循(扩展的)关系模型。表有一个附加的模式(类似于关系数据库中的表),API提供了可比较的操作,如select、project、join、group-by、aggregation等。Table API程序声明式地定义了应该做什么逻辑操作,而不是具体规定操作的代码是怎样的。虽然Table API可以通过各种类型的用户定义函数进行扩展,但它的表现力不如Core API,使用起来更简洁(写的代码更少)。此外,Table API程序在执行前还要经过一个优化器,应用优化规则。
人们可以在表和DataStream/DataSet之间无缝转换,允许程序将Table API与DataStream和DataSet API混合使用。
- Flink提供的最高级抽象是SQL。这个抽象在语义和表现形式上都与Table API相似,但将程序表示为SQL查询表达式。SQL抽象与Table API紧密交互,SQL查询可以在Table API中定义的表上执行。