Apache flink 简介
Apache flink 是分布式流式数据处理框架,主要用于有界(bounded)和无界(unbounded)数据流的有状态处理,具有高性能、高吞吐、高容灾等特性。
何为有界和无界数据流
- 有界流:数据有明确的开始和结束,在数据处理的时候可以进行统一的批量处理。
- 无界流:可以想象成水管,有数据流的开始,未定义数据流的结束。因此,数据需要进行实时的处理,不可能等到所有的数据都到达之后才进行处理。
flink有界流.jpg
何为状态
- 状态是 flink 处理数据过程中所产生的中间可操作结果,可用于任务的恢复,flink 的checkpoint机制就是状态很有用的产物(checkpoint机制在后续会有深入介绍)。
flink 架构
如下图是 flink 简单架构图解:
flink简单架构图.png
由图中可以看到,在 flink 程序提交执行的过程中会涉及到3个部分,其中 JobManager 和 TaskManager 是运行的两个JVM进程:
- Cli:提交程序的客户端,我们的任务程序会通过 Cli 进行解析,然后提交给 JobManager 。同时,Cli 也是接收 JobMnager 结果的接收者。
- JobManager:它是 flink 的 master 进程,对 TaskManager进行资源管理,它接受 Cli 提交的任务流,然后根据 TaskManger 当前的资源使用情况进行任务的分配。同时,它与 TaskManger 时刻保持通信,监听 TaskManger 的健康状态。另外,JobManager 也是 保存 checkpoint 的地方。通常情况下,JobManager 会存在单点的问题,因此,需要考虑在此处做HA处理。
- TaskManger:它是 flink 的 worker 进程,在 TaskManager 启动时会分配相应的 slot 槽位,slot 是 flink 任务执行的最小单元,各个 slot 之间内存均分,cpu 共享。从 JobManager 发来的任务通常以 task 的形式在这里进行执行, 。在hdfs文件系统中,TaskManager 通常跟 DataNode 共存,以达到计算向数据移动的目的。
flink 部署使用
flink 的部署方式有多种,主要有local 模式、standalone 模式、yarn 模式等等,这里主要通过 local 模式进行简单应用测试:
flink 下载安装
flink local模式很简单(前提是已经安装了 JDK),去官网下载 flink 安装包,然后进行解压:
tar zxvf flink-1.8.2-bin-scala_2.11.tgz
cd flink-1.8.2
启动 flink,然后通过 jps 进行验证,会看到 JobManager 进程(StandaloneSessionClusterEntrypoint)和 TaskManager 进程(TaskManagerRunner):
./bin/start-cluster.sh
下面我们可以登录本地的 flink web界面进行一些操作(地址:http://localhost:8081/),如下图:
flinkweb界面.jpg- 由图中可以看到,在本地模式下,flink 只有一个 TaskManager,每个 TaskManager 默认分配了一个槽位 slot。当然,这种方式只适用于本地的程序测试,在生产中,通常采用 standalone 模式或者 yarn 模式。
flink 任务提交
在本地模式下,flink 程序可以通过命令行进行任务提交,也可以通过 web 界面进行提交,
- 命令行提交,这是 flink 自带的一个单词统计的例子:
cd flink-1.8.2
./bin/flink run /Users/liudi/app/flink-1.8.2/examples/batch/WordCount.jar
Starting execution of program
Executing WordCount example with default input data set.
Use --input to specify file input.
Printing result to stdout. Use --output to specify output path.
(a,5)
(action,1)
......
- web 界面任务提交:
- 在刚才展示的界面左侧栏里有一菜单 submit new job,然后 add new 即可添加任务成功。
通过web界面进行任务提交,我们可以清晰的观擦任务每一步的执行,而且任务的执行结果状态也可以清晰可见。
Ok,通过上面两种方式可以进行任务的提交,这里我们使用了默认的配置信息。事实上,flink 在任务提交时可以进行多个参数的配置,适合我们进行 flink 的调优工作,这里就不多做介绍。
总结
这里主要对 flink 做了一个简单的介绍,并对其安装、部署、启动,以及 flink 任务的提交做了简单操作,接下来会对 flink 慢慢进行深入的了解。当然,纯属于个人随记,有理解偏差的地方,还请不吝指正。
网友评论