1 前言
Flink 是一个以 Java 及 Scala 作为开发语言的开源大数据项目,代码开源在 GitHub 上,并使用 Maven 来编译和构建项目。
关于开发测试环境,Mac OS、Linux 系统或者 Windows 都可以。如果使用的是 Windows 10 系统,建议使用 Windows 10 系统的 Linux 子系统来编译和运行。
Flink支持多种安装模式。
- local(本地)——单机模式,一般不使用
- standalone——独立模式,Flink自带集群,开发测试环境使用
- yarn——计算资源统一由Hadoop YARN管理,生产环境测试
2 基本概念
运行 Flink 应用其实非常简单,但是在运行 Flink 应用之前,还是有必要了解 Flink 运行时的各个组件,因为这涉及到 Flink 应用的配置问题。
Flink 实际运行时包括两类进程(下图所示):
- JobManager(又称为 JobMaster):协调 Task 的分布式执行,包括调度 Task、协调创建 Checkpoint 以及当 Job failover 时协调各个 Task 从 Checkpoint 恢复等。
- TaskManager(又称为 Worker):执行 Dataflow 中的 Tasks,包括内存 Buffer 的分配、Data Stream 的传递等。
Flink Runtime 架构图说明:
当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManager,JobManager 再调度任务到各个 TaskManager 去执行,然后 TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输。上述三者均为独立的 JVM 进程。
JobManager
Master进程,负责Job的管理和资源的协调。包括任务调度,检查点管理,失败恢复等。
当然,对于集群HA模式,可以同时多个master进程,其中一个作为leader,其他作为standby。当leader失败时,会选出一个standby的master作为新的leader(通过zookeeper实现leader选举)。
3 安装环境准备
- 从官网下载压缩包
- 安装Java,并配置 JAVA_HOME 环境变量
安装好Flink后,再来看下安装路径下的配置文件有哪些吧
安装目录下主要有 flink-conf.yaml 配置、日志的配置文件、zk 配置、Flink SQL Client 配置。
4 日志的查看和配置
JobManager 和 TaskManager 的启动日志可以在 Flink binary 目录下的 Log 子目录中找到。Log 目录中以flink-{id}-${hostname}
为前缀的文件对应的是 JobManager 的输出,其中有三个文件:
flink-${user}-standalonesession-${id}-${hostname}.log
:代码中的日志输出flink-${user}-standalonesession-${id}-${hostname}.out
:进程执行时的stdout输出flink-${user}-standalonesession-${id}-${hostname}-gc.log
:JVM的GC的日志
Log 目录中以flink-{id}-${hostname}
为前缀的文件对应的是 TaskManager 的输出,也包括三个文件,和 JobManager 的输出一致。
日志的配置文件在 Flink binary 目录的 conf 子目录下,其中:
log4j-cli.properties
:用 Flink 命令行时用的 log 配置,比如执行“ flink run”命令log4j-yarn-session.properties
:用yarn-session.sh
启动时命令行执行时用的 log 配置log4j.properties
:无论是 Standalone 还是 Yarn 模式,JobManager 和 TaskManager 上用的 log 配置都是 log4j.properties
这三个log4j.*properties
文件分别有三个logback.*xml
文件与之对应,如果想使用 Logback 的同学,之需要把与之对应的log4j.*properties
文件删掉即可,对应关系如下:
log4j-cli.properties -> logback-console.xml
log4j-yarn-session.properties -> logback-yarn.xml
log4j.properties -> logback.xml
需要注意的是,“flink-{id}-和{user}-taskexecutor-{hostname}”都带有“,{id}”表示本进程在本机上该角色(JobManager 或 TaskManager)的所有进程中的启动顺序,默认从 0 开始。
5 配置文件 Flink-conf.yaml 详解
5.1 基础配置
1 | # jobManager 的IP地址 |
5.2 高可用
1 | # 可以选择 'NONE' 或者 'zookeeper'. |
5.3 容错和检查点配置
1 | # 用于存储和检查点状态,可选值:'jobmanager', 'filesystem', 'rocksdb', or the <class-name-of-factory> |
5.4 Restful 和 web 前端配置
1 | # 基于 Web 的运行时监视器侦听的地址. |
5.5 高级配置
1 | # io.tmp.dirs: /tmp |
5.6 Flink 集群安全配置
1 | # 指示是否从 Kerberos ticket 缓存中读取 |
5.7 Zookeeper 安全配置
1 | # 覆盖以下配置以提供自定义 ZK 服务名称 |
5.8 HistoryServer
1 | # 你可以通过 bin/historyserver.sh (start|stop) 命令启动和关闭 HistoryServer |
6 masters
1 | localhost:8081 |
7 workers
里面是每个 worker 节点的 IP/Hostname,每一个 worker 结点之后都会运行一个 TaskManager,一个一行。
1 | localhost |
8 zoo.cfg(可选)
Flink 自带的 zookeeper,如果使用外部独立的zookeeper
1 | # 每个 tick 的毫秒数 |