1、什么是Flink?
(1)、分布式的 计算引擎
(2)、支持 批处理,即处理静态的数据集、历史的数据集
(3)、支持 流处理,即实时地处理一些实时数据流;
(4)、支持 基于事件 的应用
2、Apache Flink® — Stateful Computations over Data Streams
![a692bd76d9d650852a518dd51f54a80f.png](https://i-blog.csdnimg.cn/blog_migrate/9d48e4d55e64474ea85905d8897cf33c.jpeg)
Stateful Computations over Data Streams ,即数据流上的有状态的计算。
Data Streams: FlinK认为 有界数据集 是无界数据流的一种特列,所以说有界数据集也是一种数据流,事件流也是一种数据流,Everything is streams,即flink可以用来处理任何的数据,可以支持批处理、流处理、AI、MacheineLearning等等。
Stateful Computations,即 有状态计算。有状态计算是最近几年越来越被用户需求的一个功能。比如说一个网站一天内访问UV数,那么这个UV数便为 状态。Flink提供了内置的对状态的一致性的处理,即如果任务发生了Failover,其状态不会丢失、不会被多算少算,同时提供了非常高的性能。
无界流 : 意思很明显,只有开始没有结束,必须连续的处理无界流数据,也即使在事件注入之后立即要对其进行处理。不能等待数据到达了再去全部处理,因为数据是无界的并且永远不会结束数据注入。处理无界流数据往往要求时间注入的时候有一定的顺序性,例如可以以事件产生的顺序注入,这样会使得处理结果完整。
有界流 :即使有明确的开始和结束的定义,有界流可以等待数据全部注入完整了在开始处理。注入的顺序不是必须的,因为对于一个静态的数据集,我们可以对其进行排序的。有界的处理也可以称为 批处理。
3、Flink的特点:
性能优秀(尤其在流计算领域)
高可扩展性
支持容错
纯内存式 的计算引擎,做了内存管理方面的大量优化
支持 eventime 的处理
支持超大状态的Job(在阿里巴巴中作业的state大小超过TB的是非常常见的)
支持 exactly-once 的处理。
4、 Flink在阿里的现状
基于Apache Flink在阿里巴巴搭建的平台于2016年正式上线,并从阿里巴巴的 搜索 和 推荐 这两大场景开始实现。
目前阿里巴巴所有的业务,包括阿里巴巴所有子公司都采用了基于Flink搭建的实时计算平台。
同时Flink计算平台运行在开源的Hadoop集群之上。
采用Hadoop的 YARN 做为资源管理调度,以 HDFS 作为数据存储。
因此,Flink可以和开源大数据软件Hadoop无缝对接。
目前,这套基于Flink搭建的实时计算平台不仅服务于阿里巴巴集团内部,而且通过阿里云的云产品API向整个开发者生态提供基于Flink的云产品支持。
![6e4f2de23c64d2b78e1f617b4256e0c5.png](https://i-blog.csdnimg.cn/blog_migrate/726c86ac1b0d2e8585edc9c3c3b031ca.jpeg)
5、Flink在阿里巴巴的大规模应用,表现如何?
规模:一个系统是否成熟,规模是重要指标,Flink最初上线阿里巴巴只有数百台服务器,目前规模已达上万
台,此等规模在全球范围内也是屈指可数;
状态数据:基于Flink,内部积累起来的状态数据已经是PB级别规模;
Events:如今每天在Flink的计算平台上,处理的数据已经超过万亿条;
TPS:在峰值期间可以承担每秒超过4.72亿次的访问,最典型的应用场景是 阿里巴巴双11大屏 ;
![38873cd96ee021b4a8ccac4bd84c2d8c.png](https://i-blog.csdnimg.cn/blog_migrate/1a733d6eab87cfff5e4f4ddac2a6fe76.jpeg)
![cf59dae2d5133d4391654e01c5138420.png](https://i-blog.csdnimg.cn/blog_migrate/ebdef162d951c23a7947ec13f377e2f3.jpeg)
6、Flink分支
阿里自15年起开始调研开源流计算引擎,最终决定基于Flink打造新一代计算引擎
阿里贡献了数百个commiter,并对Flink进行高度定制,并取名为 Blink
阿里是 Flink SQL 的最大贡献者,一半以上的功能都是阿里的工程师开发的
7、Flink 有三种部署模式,分别是 Local、Standalone Cluster 和 Yarn Cluster。
(1)、local(本地)----单机模式,一般不使用;
(2)、Standalone ----独立模式,Flink 自带集群,开发测试环境使用;
(3)、Yarn----计算资源统一由Hadoop Yarn管理,生成测试环境使用;
7.1、伪分布式环境部署
![7ff3bf8bed76af680b9f1b8c23432f00.png](https://i-blog.csdnimg.cn/blog_migrate/c59337517246543f32075cbc535a2df2.jpeg)
Flink程序需要提交给 Job Client
Job Client将作业提交给 Job Manager
Job Manager负责协调资源分配和作业执行。 资源分配完成后,任务将提交给相应的 Task Manager
Task Manager启动一个线程以开始执行。Task Manager会向Job Manager报告状态更改。例如开始执行,正在进行或已完成。
作业执行完成后,结果将发送回客户端(Job Client)。
环境准备:
下载安装包flink-1.6.0-bin-scala_2.11.tgz
服务器: mini (192.168.116.3)
安装步骤:
1. 上传压缩包
2. 解压
tar -zxvf flink-1.6.0-bin-scala_2.11.tgz -C /usr/local/src
cd /usr/local/src/flink-1.6.0
./bin/start-cluster.sh
![d5dd0e23b366e38d2f232d17c95c29c5.png](https://i-blog.csdnimg.cn/blog_migrate/2d209a691ee165d27ccbabcf4ab31e3d.jpeg)
使用JPS可以查看到下面两个进程
TaskManagerRunner
StandaloneSessionClusterEntrypoint
4. 访问web界面
slot 在flink里面可以认为是资源组,Flink是通过将任务分成子任务并且将这些子任务分配到slot来并行
执行程序。
![18163cff68dcb7bd73e340adf694fe76.png](https://i-blog.csdnimg.cn/blog_migrate/888f73f434136b767f52114059b7799b.jpeg)
5. 运行测试任务
[root@mini1 bin]# ./flink run /usr/local/src/flink-1.6.0/examples/batch/WordCount.jar --input /usr/local/src/zookeeper.out --output /usr/local/src/flink-1.6.0/flink_datasrc/flink-1.6.0/flink_data
![65eb56e74b29be43f54e95af137c530f.png](https://i-blog.csdnimg.cn/blog_migrate/c8bb3fcc6f8fafa9f1c7522faf3810c1.jpeg)
控制台输出:
Starting execution of program
Program execution finished
Job with JobID bb53dc79d510202e8abd95094791a32b has finished.
Job Runtime: 9539 ms
观察WebUI
![72707d6d86ec9e5cc26b282bd315d43c.png](https://i-blog.csdnimg.cn/blog_migrate/7b3c225e02aa13a9fa55f8e36bd8e649.jpeg)
7.2. Standalone模式集群安装部署
![da7cf98c88dd944694ffae3f73b52c37.png](https://i-blog.csdnimg.cn/blog_migrate/f9c12d954d1cd6f64053799f4b02f6bc.jpeg)
client客户端提交任务给JobManager
JobManager负责Flink集群计算资源管理,并分发任务给TaskManager执行
TaskManager定期向JobManager汇报状态
环境准备:
服务器: mini11(Master + Slave)
服务器: mini2(Slave)
服务器: mini3(Slave)
安装步骤:
1. 上传flink压缩包到指定目录
2. 解压缩flink到 /usr/local/src 目录
tar -zxvf flink-1.6.0-bin-scala_2.11.tgz -C /usr/local/src
3. 使用vi修改slaves文件
mini1
mini2
mini3
5. 使用vi修改 /etc/profile 系统环境变量配置文件,添加HADOOP_CONF_DIR目录
export HADOOP_CONF_DIR=/usr/local/src/hadoop-2.6.4/etc/hadoop
6. 分发/etc/profile到其他两个节点
scp -r /etc/profile mini2:/etc
scp -r /etc/profile mioni3:/etc
7. 每个节点重新加载环境变量
source /etc/profile
8. 使用scp命令分发flink到其他节点
scp -r /usr/local/src/flink-1.6.0/ mini2:/usr/local/src
scp -r /usr/local/src/flink-1.6.0/ mioni3:/usr/local/src
启动/停止flink集群
启动:./bin/start-cluster.sh
停止:./bin/stop-cluster.sh
启动/停止jobmanager 如果集群中的jobmanager进程挂了,执行下面命令启动
bin/jobmanager.sh start
bin/jobmanager.sh stop
启动/停止taskmanager 添加新的taskmanager节点或者重启taskmanager节点
bin/taskmanager.sh start
bin/taskmanager.sh stop
10. 启动HDFS集群
cd /usr/local/src/hadoop-2.6.4/sbin
start-all.sh
11. 在HDFS中创建/test/input目录
hdfs dfs -mkdir -p /test/input
12. 上传wordcount.txt文件到HDFS /test/input目录
hdfs dfs -put /usr/local/src/flink-1.6.0/README.txt /test/input
13. 并运行测试任务
bin/flink run /usr/local/src/flink-1.6.0/examples/batch/WordCount.jar --input
hdfs://miini1:8020/test/input/README.txt --output
hdfs://mini1:8020/test/output2/result.txt
14. 浏览Flink Web UI界面
http://mini1:8081
![6e0e9dcefd1b12fc352e41fb8f7cb562.png](https://i-blog.csdnimg.cn/blog_migrate/c9805764a2501de3fa63ac3e64315ff7.jpeg)
![918b8d4e4f3e4e020b6d0dcb666d9530.png](https://i-blog.csdnimg.cn/blog_migrate/70e3ce08bafcfe88b7634d34fdf1866e.jpeg)
好了,至此,Flink的单机模式和独立模式安装已经完成。由于内容比较多,我们日常工作中经常用到的 Flink的Standalone高可用HA模式和Yarn集群环境将在下一篇文章中呈现。