流的世界,有点乱,群雄逐鹿,流实在太多,看完这个马上又冒出一个,也不知哪个才是真正的牛,据说Flink是位重量级选手,能流计算,还能批处理,和其他伙伴关系也融洽的很,与HDFS/File/SQL/MQ往来都不在话下,今天我们就来实战一把。
环境:Idea2019.03/Gradle6.0.1/JDK11.0.4/Lambda/RHEL8.0/VMWare15.5/Springboot2.2.1.RELEASE/Mysql8.0.11/Kafka2.3.1/ShadowJar5.0/Flink1.9.1/Zookeeper3.5.5
难度:新手--战士--老兵--大师
目标:
Zookeeper集群部署
Kafka集群部署及AdminClient使用
Flink Standalone集群部署
Flink流计算程序设计
说明:
为了遇见各种问题,同时保持时效性,我尽量使用最新的软件版本。同时代码中大量使用注释,并尽量使用非链式写法,层次清晰。
第一部分 部署图
1.1 整体部署图,注意本次我没使用Flink的HA模式,故只有一个Master节点:
2401
本次实现的整体逻辑:Java应用产生流数据,用kafka进行传输,在Flink中进行流计算,最后存储到文件和Mysql中:
2402
第二部分 zk集群
2.1 Zookeeper(简写ZK)集群安装:我分别部署ZK到192.168.1.221,192.168.1.222,192.168.1.223 linux虚机上,这里只说一台,其他类似,下载apache-zookeeper-3.5.5-bin.tar.gz,解压到目录/usr/zookeeper3.5/apache-zookeeper-3.5.5-bin/修改ZK配置文件:
[root@localhost ~]# vim /usr/zookeeper3.5/apache-zookeeper-3.5.5-bin/conf/zoo.cfg
dataDir=/usr/zookeeper3.5/data
dataLogDir=/usr/zookeeper3.5/logs
#added for ZK cluster
server.1=192.168.1.221:2888:3888
server.2=192.168.1.222:2888:3888
server.3=192.168.1.223:2888:3888
zk相关配置项说明:(LF指Leader/Follower)
2403
打开firewall端口:
[root@localhost zookeeper3.5]# firewall-cmd --permanent --add-port=2181/tcp
[root@localhost zookeeper3.5]# firewall-cmd --permanent --add-port=2888/tcp
[root@localhost zookeeper3.5]# firewall-cmd --permanent --add-port=3888/tcp
[root@localhost zookeeper3.5]# firewall-cmd –reload
创建myid文件,也可使用touch或vim创建:
[root@localhost ~]# echo "2" > /usr/zookeeper3.5/data/myid
启动:
[root@localhost ~]# sh /usr/zookeeper3.5/apache-zookeeper-3.5.5-bin/bin/zkServer.sh start
2404
查看节点角色:
[root@localhost ~]# sh $ZOOKEEPER_HOME/bin/zkServer.sh status
2405
说明:
2406
使用zkCli测试节点间连接,我在192.168.1.221上访问192.168.1.222:
[root@localhost ~]# sh $ZOOKEEPER_HOME/bin/zkCli.sh -server 192.168.1.222:2181
2407
第三部分 Kafka集群
3.1 Kafka集群,参考上一篇,这里以192.168.1.223为例,其他类似,修改/usr/kafka2.3/kafka_2.12-2.3.1/config/server.properties:
broker.id=2 #集群内此编号必须唯一
listeners=PLAINTEXT://192.168.1.223:9092 #Socket监听地址,没写hostname/IP即为listen所有IP
log.dirs=/usr/kafka2.3/kafka-logs #kafka保存log目录
zookeeper.connect=192.168.1.221:2181,192.168.1.222:2181,192.168.1.223:2181 #ZK注册地址
注意开启kafka的访问端口,否则APP无法访问:
[root@localhost ~]# firewall-cmd --permanent --add-port=9092/tcp
[root@localhost ~]# firewall-cmd –reload
再分别启动kafka:
[root@server223 kafka_2.12-2.3.1]# ./bin/kafka-server-start.sh config/server.properties
第四部分 Flink集群
4.1 Flink基础知识,因篇幅原因,略!
4.2 Flink Standalone集群(一个master多个worker)部署:必须先安装SSH,使得各集群节点机器间无密码进行SSH访问,并必须使用相同的flink安装目录结构,因master节点通过SSH使用脚本控制worker节点。Flink集群还有HA模式,即多个Master节点和多个worker节点,Master节点中一个为leader,其他Master节点为standby,故障时standby就转换为leader角色。
4.3 SSH开通:
我这里192.168.1.222为master,192.168.1.221/223为worker, 222到223的SSH,222到221的SSH类似,如linux上没有SSH,需先安装该service。以下为222到221的SSH开通,在222上:
[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id 192.168.1.221
[root@localhost ~]# vim /etc/ssh/sshd_config
PasswordAuthentication no
[root@localhost ~]# systemctl restart sshd
[root@localhost ~]# ssh 192.168.1.221
[root@localhost ~]# exit
logout
Connection to 192.168.1.221 closed.
4.4 Flink安装:我下载的是编译后版本:flink-1.9.1-bin-scala_2.12.tgz,解压后在/usr/flink1.9/flink-1