什么是flink?
flink是一个分布式,高性能,随时可用的以及准确的流处理计算框架,flink可以对无界数据(流处理)和有界数据(批处理)进行有状态计算(flink天生支持状态计算)的分布式,高性能的计算框架。
flink的基石
flink的四大基石:checkpoint,state,time,window
checkpoint:基于chandy-lamport算法实现分布式计算任务的一致性语义;
state:flink中的状态机制,flink天生支持state,state可以认为程序的中间计算结果或者是历史计算结果;
time:flink中支持基于事件时间和处理时间进行计算,spark streaming只能按照process time进行处理;
基于事件时间的计算我们可以解决数据迟到和乱序等问题。
window:flink提供了更多丰富的window,基于时间,基于数量,session window,同样支持滚动和滑动窗口的计算。
Flink的应用
Flink 是一个大数据流处理引擎,它可以为不同的行业提供大数据实时处理的解决方案。随着 Flink 的快速发展完善,如今在世界范围许多公司都可以见到 Flink 的身影。
目前在全球范围内,北美、欧洲和金砖国家均是 Flink 的应用热门区域。当然,这些地区其实也就是 IT、互联网行业较发达的地区。
Flink 在国内热度尤其高,一方面是因为阿里的贡献和带头效应,另一方面也跟中国的应用场景密切相关。中国的人口规模与互联网使用普及程度,决定了对大数据处理的速度要求越来越高,也迫使中国的互联网企业去追逐更高的数据处理效率。试想在中国,一个网站可能要面对数亿的日活用户、每秒数亿次的计算峰值,这对很多国外的公司来说是无法想象的。而Flink 恰好给我们高速准确的处理海量流式数据提供了可能。
Flink环境部署:
要了解一个系统,一般都是从架构开始。我们关心的问题是:系统部署成功后各个节点都启动了哪些服务,各个服务之间又是怎么交互和协调的。
当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManager,JobManager 再调度任务到各个 TaskManager 去执行,然后 TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输。上述三者均为独立的 JVM 进程。
Client为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境连通即可)。提交 Job 后,Client 可以结束进程(Streaming的任务),也可以不结束并等待结果返回。
JobManager主要负责调度 Job 并协调 Task 做 checkpoint,职责上很像 Storm 的 Nimbus。从 Client 处接收到 Job 和 JAR 包等资源后,会生成优化后的执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。
TaskManager在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个 Task,Task 为线程。从 JobManager 处接收需要部署的 Task,部署启动后,与自己的上游建立 Netty 连接,接收数据并处理。
本地模式环境部署步骤如下:
# 1. 下载安装包并上传到/usr/local/src 目录
# 2. 解压安装包并重命名为flink
[root@node src]$ tar -zxf flink-1.14.4-bin-scala_2.12.tgz
[root@node src]$ tar -zxf jdk-8u111-linux-x64.tar.gz
# 3. 修改安装包所属用户和用户组权限
[root@node src]$ chown -R root.root flink-1.14.5
# 4. 配置Flink环境变量并重新加载使其生效
[root@node src]$ vim ~/.bash_profile
export JAVA_HOME=/usr/local/src/jdk1.8.0_111/
export FLINK_HOME=/usr/local/src/flink-1.14.5/
export PATH=$PATH:$JAVA_HOME/bin:$FLINK_HOME/bin
[root@node src]$ source ~/.bash_profile
# 4. 启动"集群"
[root@node src]$ start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host node.
Starting taskexecutor daemon on host node.
[root@node src]$ jps
17186 Jps
17078 TaskManagerRunner
16809 StandaloneSessionClusterEntrypoint
# 5. 访问WebUI界面8081端口查看运行情况
分发Flink安装包配置到另外两个节点
使用Linux scp命令把node01节点的配置分发到另外两个节点上。
# 使用 scp 分发
[root@node01 conf]$ cd /usr/local
[root@node01 local]$ scp -r flink node02:/usr/local/
[root@node01 local]$ scp -r flink node03:/usr/local/
启动Flink集群
# 批量统一启动
[root@node01 bin]$ start-cluster.sh
Starting cluster.
Starting standalonesession daemon on host node01.
Starting taskexecutor daemon on host node01.
Starting taskexecutor daemon on host node02.
Starting taskexecutor daemon on host node03.
# 单独启动
[root@node01 bin]$ jobmanager.sh start / stop
[root@node01 bin]$ taskmanager.sh start / stop
# 使用脚本查看服务进程
[root@node01 bin]$ jps