一、架构设计

Flink 是一个批流一体的分布式计算引擎,作为一个分布式计算引擎,必须提供面向开发人员的 API,根据业务逻辑开发 Flink 作业,作业除了包含业务逻辑外,还需要跟外部的数据存储进行交互。作业开发、测试完华后,交给 Flink 集群进行执行,同时还要让运维人员能够管理与监控 Flink。

api level

二、阅读环境准备

三、集群启动

四、Libraries 层

4.1. CEP

CEP是 Complex Event Process(复杂事件处理)的缩写,能够对一组事件序列按照指定的规则进行匹配处理。Flink CEP是一个构建在 Flink 之上的 CEP 框架。在流式数据处理场景中,CEP 接照指定的规则进行事件匹配。

CEP 与传统数据库的处理逻辑相反: 传统数据库是先存储数据,再对其进行查询分析; CEP是先定义好查询规则,再灌入实时数据,进行过滤匹配。

正在总结中,等我😭~~~

五、API 层

5.1. 作业提交

5.2. 元数据

5.3. 连接器 Connector

六、Core 层

Flink Core 提供了 Flink 最基础与最核心的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
object WordCount {
def main(args: Array[String]) {
val params: ParameterTool = ParameterTool.fromArgs(args)
val env = ExecutionEnvironment.getExecutionEnvironment
env.getConfig.setGlobalJobParameters(params)
val text =
if (params.has("input")) {
env.readTextFile(params.get("input"))
} else {
env.fromCollection(WordCountData.WORDS)
}
val counts = text.flatMap { _.toLowerCase.split("\\W+") filter { _.nonEmpty } }
.map { (_, 1) }
.groupBy(0)
.sum(1)
if (params.has("output")) {
counts.writeAsCsv(params.get("output"), "\n", " ")
env.execute("Scala WordCount Example")
} else {
println("Printing result to stdout. Use --output to specify output path.")
counts.print()
}

}
}

6.1. 基础服务

Flink 集群启动时组件会执行 initializeServices() 方法初始化一些基础服务,比如说 JobManager 启动时会初始化一些 RPC 通信服务、高可用服务以及监控服务等。

6.2. 运行时服务

在 《Spark 源码学习系列中》说过就像学习一门编程语言一样, 无论是 Java 程序还是 Scala 程序,都需要运行在其所依托的环境下~,Spark 源码中 SparkEnv 提供了多种多样的内部组件,实现不同的功能~

Spark 对任务的计算都依托于 Executor 的能力,所有的 Executor 都有自己的 Spark 执行环境 SparkEnv。Executor 有了 SparkEnv, 就可以将数据存储在 SparkEnv 提供的存储体系中; 就能利用计算引擎对计算任务进行处理,就可以在节点间进行通信等…

SparkEnv 提供了多种多样的内部组件,实现不同的功能~

那么 Flink 中 TaskManagerServices 就类似 SparkEnv ~

TaskManagerServices

6.3. StreamExecutionEnvironment

Flink 流程序的入口点是 StreamExecutionEnvironment 类的一个实例,它定义了程序执行的上下文。StreamExecutionEnvironment 是所有 Flink 程序的基础。

6.4. 调度系统

6.5. 计算引擎

七、Deploy 层