前言
Flink的demo环境,可以直接在windows或者Linux下运行。服务会自动启动一个JobManager以及一个TaskManager。
$ ./bin/start-cluster.sh # Start Flink
生产环境一般都需要高可用支持,屏蔽单点故障产生的影响(这里的高可用只JobManager的高可用)。Flink支持两种部署方式:standalone以及 YARN clusters。
standalone方式下,Flink通过Zookeeper管理多个JobManager,并在同一时刻保证一个Leader生效。
YARN方式下,每次只有一个JobManager运行。如果JobManager出现故障,则YARN负责重启。
本文采用了standalone方式部署。(Hadoop环境的代价太大了。学习成本和维护成本都很高,而且内部机制产生的影响很多,不利于学习Flink。)
Windows WSL
Flink的standalone模式需要Linux环境。之前一直用虚拟机来提供Linux环境,但是太笨重了。启动、运行占资源,需要配置网络,无法和windows共享资源。所以抛弃了虚拟机,采用WSL。
- WSL速度快,轻便。设置开机启动后,打开对话框就可以直接使用。设置了开机启动,也不会占用什么资源。
- WSL可以共享windows的环境变量。如果windows安装了java,并配置了JAVA_HOME,linux环境也可以使用。
- WSL可以直接访问windows的文件系统。
/mnt/系统盘 #系统盘就是C,D,E
#例如访问C盘的文件,就可以ls /mnt/c
- 网络共享。WSL直接使用的是windows的网络。
既然都这么优秀了,那么怎么安装WSL呢。直接在应用商店搜索安装就好。我使用的是ubuntu,因为这个是使用最多的WSL。如有疑问,可以上网搜索。
环境准备
为了加快软件安装速度,可以更改为阿里的源。
我的源配置:
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
java环境
windows安装了java,不需要额外安装。
可以通过apt安装openjdk,也可以下载oralce的jdk。
ssh
安装ssh-server
sudo apt-get install openssh-server
修改配置
sudo vi /etc/ssh/sshd_config
修改内容:
ListenAddress localhost #可以不修改。监听本地。默认是0.0.0.0,监听所有。
PermitRootLogin yes #允许root用户远程登录
PasswordAuthentication yes #密码认证
重启sshd-server:
sudo service ssh restart
或者 /etc/init.d/ssh restart
启动时会发现错误提示如下。需要生成秘钥。
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
生成秘钥命令:
sudo ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key
Flink搭建
首先需要准备安装文件。
下载flink:
https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.9.1/flink-1.9.1-bin-scala_2.12.tgz
下载zookeeper:
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.6/apache-zookeeper-3.5.6-bin.tar.gz
zookeeper
配置conf/zoo.cfg。我只启动了一个节点,生成环境应该至少三个节点。
# ZooKeeper quorum peers
server.1=localhost:2888:3888
# server.2=host:peer-port:leader-port
Flink的发布版本中携带了zookeeper,所以可以通过Flink直接启动zookeeper。
bin/start-zookeeper-quorum.sh
注意,官方文档中明确说明,不建议采用Flink的zookeeper。生产环境应该使用zookeeper自己的环境。
运行成功后,可以通过之前下载的zookeeper客户端工具zkCli.sh,访问zookeeper信息。我们之后也会通过这种方式查看JobManager的集群管理数据。
JobManager
配置conf/flink-conf.yaml
high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
high-availability.storageDir: file:///mnt/d/temp/ha/
high-availability.zookeeper.path.root: /flink
high-availability.cluster-id: /flink_default_cluster
配置JobManager启动实例conf/masters:
localhost:8081
localhost:8082
localhost:8083
启动cluster:
bin/start-cluster.sh
启动成功后,可以查看进程。可以看到启动了三个JobManager。
解压之前下载的zookeeper,使用bin/zkCli.sh可以访问zookeeper,查看目录信息。
其中flink是我们配置的Flink集群根路径,flink_default_cluster是我们配置的cluster-id。初始启动的时候,目录下可能没有这么多子目录,在之后验证环境,发布job后,相关的路径就会创建出来。
Flink会将信息存放在high-availability.storageDir存储路径下。本文配置的是file:///,表示使用本地存储。可以直接访问本地路径/mnt/d/temp/ha/,查看Flink存放了哪些信息。其实,上传的jar,pid等信息都会再次路径下。如果有hadoop环境,那么可以配置为hdfs:///路径。
验证环境
最好的验证方式,就是运行一个任务。为了方便,我们使用Flink自带的example来验证环境。
Flink贴心的将所有的例子都打包好,和Flink的版本一起发布。可以通过Flink提供的客户端上传,也可以通过页面操作上传。为了简单,我们采用页面操作。
访问页面地址:
http://localhost:8081/
在submit tab页,提交jar
运行数据源。由于我们使用的是socketWindowWordCount,所以需要建立socket数据源。
nc -l 12345
运行任务。需要定义参数,指向上文建立的socket数据源。
在running job页面,查看运行中的任务:
运行任务后,在nc端输入字符:
在TaskManager的页面,可以查看统计输出结果:
停止standalone cluster