rakulang, dartlang, nimlang, golang, rustlang, lang lang no see

概念

焉知非鱼

Concepts

概念 #

实践培训解释了作为 Flink 的 API 基础的有状态和及时流处理的基本概念,并提供了这些机制如何在应用中使用的例子。有状态的流处理是在数据管道和ETL的背景下介绍的,并在容错部分进一步发展。在“流分析”一节中介绍了及时的流处理。

本概念深度部分提供了对 Flink 的架构和运行时如何实现这些概念的更深入的理解。

Flink 为开发流式/批量应用提供了不同层次的抽象。

img

  • 最底层的抽象只是提供有状态和及时的流处理。它通过 Process Function 嵌入到 DataStream API 中。它允许用户自由处理来自一个或多个流的事件,并提供一致的、容错的状态。此外,用户还可以注册事件时间和处理时间的回调,使程序可以实现复杂的计算。

  • 在实际应用中,很多应用程序并不需要上述的低级抽象,而是可以针对 Core APIs 进行编程:DataStream API(有界/无界流)和 DataSet API(有界数据集)。这些流畅的 API 为数据处理提供了常见的构件,比如各种形式的用户指定的转换、连接、聚合、窗口、状态等。在这些 API 中处理的数据类型在各自的编程语言中被表示为类。

低级 Process Function 与 DataStream API 相集成,因此可以根据需要使用低级抽象。DataSet API 提供了关于有界数据集的附加原语,如循环/迭代。

  • Table 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 中定义的表上执行。