Apache Flink 介绍

Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速计算。

  • Streams:流,分为有限数据流与无限数据流,unbounded stream 是有始无终的数据流,即无限数据流;而bounded stream 是限定大小的有始有终的数据集合,即有限数据流,二者的区别在于无限数据流的数据会随时间的推演而持续增加,计算持续进行且不存在结束的状态,相对的有限数据流数据大小固定,计算最终会完成并处于结束的状态。
  • State,状态是计算过程中的数据信息,在容错恢复和Checkpoint 中有重要的作用,流计算在本质上是增量处理,因此需要不断查询保持状态。
  • Time:分为Event time、Ingestion time、Processing time,Flink 的无限数据流是一个持续的过程,时间是判断业务状态是否滞后,数据处理是否及时的重要依据。

基础架构

当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManager,JobManager 再调度任务到各个 TaskManager 去执行,然后 TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输。上述三者均为独立的 JVM 进程。

  • Client :提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境连通即可)。提交 Job 后,Client 可以结束进程(Streaming的任务),也可以不结束并等待结果返回。
  • JobManager(又称为 JobMaster):协调 Task 的分布式执行,包括调度 Task、协调创 Checkpoint 以及当 Job failover 时协调各个 Task 从 Checkpoint 恢复等。
  • TaskManager(又称为 Worker):执行 Dataflow 中的 Tasks,包括内存 Buffer 的分配、Data Stream 的传递等。

Apache Flink 介绍

)Task Slot 是一个 TaskManager 中的最小资源分配单位,一个 TaskManager 中有多少个 Task Slot 就意味着能支持多少并发的 Task 处理。需要注意的是,一个 Task Slot 中可以执行多个 Operator,一般这些 Operator 是能被 Chain 在一起处理的。

Apache Flink 介绍

启动流程

最简单的运行 Flink 应用的方法就是以单机 Standalone 的方式运行。

启动flink:

[root@localhost flink-1.11.3]# ./bin/start-cluster.sh

打开 http://ip:8081/ 就能看到 Flink 的 Web 界面。尝试提交 Word Count 任务:

[root@localhost flink-1.11.3]# ./bin/flink run examples/streaming/SocketWindowWordCount.jar  --hostname 127.0.0.1 --port 9000

[root@localhost home]# nc -l 9000
qwer
asdf
zxcv

查看TaskManager 的 stdout ,就可以看到 输出结果。还可以通过--input参数指定我们自己的本地文件作为输入。

[root@localhost flink-1.11.3]# ./bin/flink run examples/streaming/WordCount.jar --input /tmp/z.txt

停止flink:

[root@localhost flink-1.11.3]# ./bin/stop-cluster.sh
常用配置介绍

workers 用于配置 TaskManager 的部署,默认配置下只会启动一个 TaskManager 进程,如果想增加一个 TaskManager 进程的,只需要文件中追加一行“localhost”。

也可以直接通过./bin/taskmanager.sh start这个命令来追加一个新的 TaskManager:

[root@localhost flink-1.11.3]# ./bin/taskmanager.sh start|start-foreground|stop|stop-all

flink-conf.yaml 用于配置 jobmanager和 taskmanager 的运行参数,常用配置:

jobmanager.rpc.address: localhost

# The RPC port where the JobManager is reachable.
jobmanager.rpc.port: 6123

# The total process memory size for the JobManager.
jobmanager.memory.process.size: 1600m

# The total process memory size for the TaskManager.
taskmanager.memory.process.size: 1728m

# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
taskmanager.numberOfTaskSlots: 1
日志的查看和配置

JobManager 和 TaskManager 的启动日志可以在 Flink目录下的 log 子目录中找到。

JobManager日志:

  • flink-root-standalonesession-0-localhost.log:代码中的日志输出
  • flink-root-standalonesession-0-localhost.out:进程执行时的stdout输出

TaskManager日志:

  • flink-root-taskexecutor-0-localhost.log
  • flink-root-taskexecutor-0-localhost.out

日志的配置文件在 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

Apache Flink 介绍

上一篇:.net core 继承ActionFilterAttribute 实现自定义过滤器


下一篇:python安装