Kafka+ZooKeeper高可用集群部署

您所在的位置:网站首页 kafka和zookeeper的端口号 Kafka+ZooKeeper高可用集群部署

Kafka+ZooKeeper高可用集群部署

#Kafka+ZooKeeper高可用集群部署| 来源: 网络整理| 查看: 265

集群环境Kafka+ZooKeeper高可用集群部署Kafka+ZooKeeper高可用集群部署

kafka+zk

我这里并没有设置专业的存储设备,大家用到生产中一定要把数据存储到专业的存储设备或者带有冗余设备的磁盘上

###部署JDK

tar xf jdk-8u161-linux-x64.tar.gz -C /usr/local/ cat > /etc/profile #################JAVA################# export JAVA_HOME=/usr/local/jdk1.8.0_161 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH EOF source /etc/profile java -version

###部署ZooKeeper ZooKeeper官方站点:https://zookeeper.apache.org/ Kafka使用ZooKeeper来管理,因此需要安装ZooKeeper,并且要先启动ZooKeeper

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

解压安装

tar xf zookeeper-3.4.14.tar.gz -C /usr/local/ cp -rf /usr/local/zookeeper-3.4.14/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.14/conf/zoo.cfg

修改ZooKeeper配置 三台设备保持一致,配置文件详解请看这篇文章内的配置文件详解部分:https://abcops.cn/zookeeper-single-deployment/

cat /usr/local/zookeeper-3.4.14/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zk_data dataLogDir=/usr/local/zookeeper-3.4.14/logs clientPort=2181 maxClientCnxns=60 autopurge.snapRetainCount=3 autopurge.purgeInterval=1 server.1=172.17.0.2:2888:3888 server.2=172.17.0.3:2888:3888 server.3=172.17.0.4:2888:3888 EOF

创建ZooKeeper数据存储目录及日志目录

mkdir -p /data/zk_data mkdir /usr/local/zookeeper-3.4.14/logs

创建ServerID标识

在ZooKeeper集群中除配置文件外,还需要配置一个myid文件,这个文件需要存放在配置文件中dataDir配置项所指定的数据位置,要根据集群中的节点创建不用的文件。我们要根据ServerID标示来创建相应的文件

Kafka_node1

[root@kafka_node1 /]# echo '1' > /data/zk_data/myid

Kafka_node2

[root@kafka_node2 /]# echo '2' > /data/zk_data/myid

Kafka_node3

[root@kafka_node3 /]# echo '3' > /data/zk_data/myid

启动ZK集群并查看 三台ZK节点全部启动

/usr/local/zookeeper-3.4.14/bin/zkServer.sh start ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg Starting zookeeper ... STARTED

查看ZK端口监听情况 losf -i:命令来查看端口信息 leader:如果此设备是leader,那么使用losf查看到的连接会是与集群内所有的follower的连接 follower:如果此设备是follower,那么使用losf查看到的连接将只会与ZK集群中的leader连接

Kafka_node1 node1只有一个连接是和172.17.0.3建立的,可以表明此节点为follower节点

[root@kafka_node1 /]# lsof -i:2888 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 15620 root 30u IPv4 71449 0t0 TCP kafka_node1:42424->172.17.0.3:spcsdlobby (ESTABLISHED)

Kafka_node2 node2是与集群内的其它两台机器所连接,可以表明此节点为leader节点

[root@kafka_node2 /]# lsof -i:2888 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 91 root 30u IPv4 65243 0t0 TCP kafka_node2:spcsdlobby (LISTEN) java 91 root 31u IPv4 69183 0t0 TCP kafka_node2:spcsdlobby->172.17.0.2:42424 (ESTABLISHED) java 91 root 33u IPv4 69192 0t0 TCP kafka_node2:spcsdlobby->172.17.0.4:49420 (ESTABLISHED)

Kafka_node3 node3与node1一样为follower节点

[root@kafka_node3 /]# lsof -i:2888 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 91 root 31u IPv4 64087 0t0 TCP kafka_node3:49420->172.17.0.3:spcsdlobby (ESTABLISHED)

到此ZK集群搭建完毕,如需了解ZK更多的管理操作,请看:https://abcops.cn/zookeeper-single-deployment/

###部署Kafka 下载安装

wget http://mirror.bit.edu.cn/apache/kafka/2.2.1/kafka_2.12-2.2.1.tgz tar xf kafka_2.12-2.2.1.tgz -C /usr/local/

修改Kafka配置

关于Kafka配置详解请参考:https://abcops.cn/kafka-config-file/

原文件备份

cp -rf /usr/local/kafka_2.12-2.2.1/config/server.properties /usr/local/kafka_2.12-2.2.1/config/server.properties.default

配置修改

cat /usr/local/kafka_2.12-2.2.1/config/server.properties broker.id=1 #Kafka_node2节点修改为2,3修改为3 listeners=PLAINTEXT://172.17.0.2:9092 #修改Kafka_node的IP地址为各自node本地地址 num.network.threads=3 num.io.threads=8 socket.send.buffer.bytes=102400 socket.receive.buffer.bytes=102400 socket.request.max.bytes=104857600 log.dirs=/data/kafka-logs/ num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 log.retention.hours=72 log.segment.bytes=1073741824 log.retention.check.interval.ms=300000 zookeeper.connect=172.17.0.2:2181,172.17.0.3:2181,172.17.0.4:2181 delete.topic.enable=true zookeeper.connection.timeout.ms=6000 group.initial.rebalance.delay.ms=3000 EOF

启动Kafka 三台Kafka_node全部启动

/usr/local/kafka_2.12-2.2.1/bin/kafka-server-start.sh -daemon /usr/local/kafka_2.12-2.2.1/config/server.properties

查看进程连接

jps 15620 QuorumPeerMain 16057 Jps 15945 Kafka 下面通过过滤端口号可以看到 ZooKeeper监控本地地址TCP端口2181,可以ZooKeeper看到2181后面对应的还有一个端口号为43918 Kafka监控本地地址TCP端口9092,可以看到Kafka9092后面也有对应的一个端口号55568 netstat -anplt | egrep "(2181|9092)" tcp 0 0 172.17.0.2:9092 0.0.0.0:* LISTEN 15945/java tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 15620/java tcp 0 0 172.17.0.2:45674 172.17.0.4:9092 ESTABLISHED 15945/java tcp 0 0 172.17.0.2:55568 172.17.0.2:9092 ESTABLISHED 15945/java tcp 0 0 172.17.0.2:9092 172.17.0.2:55568 ESTABLISHED 15945/java tcp 0 0 172.17.0.2:43094 172.17.0.3:9092 ESTABLISHED 15945/java tcp 0 0 172.17.0.2:2181 172.17.0.2:43918 ESTABLISHED 15620/java tcp 0 0 172.17.0.2:43918 172.17.0.2:2181 ESTABLISHED 15945/java

查看Kafka监听状态 Kafka_node1 可以看到node1节点同时与node2及node3建立了连接,可以看到node1节点为主导者

[root@kafka_node1 /]# lsof -i:9092 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 15945 root 106u IPv4 64487 0t0 TCP kafka_node1:XmlIpcRegSvc (LISTEN) java 15945 root 122u IPv4 72859 0t0 TCP kafka_node1:55568->kafka_node1:XmlIpcRegSvc (ESTABLISHED) java 15945 root 123u IPv4 71815 0t0 TCP kafka_node1:XmlIpcRegSvc->kafka_node1:55568 (ESTABLISHED) java 15945 root 127u IPv4 72997 0t0 TCP kafka_node1:43094->172.17.0.3:XmlIpcRegSvc (ESTABLISHED) java 15945 root 131u IPv4 75769 0t0 TCP kafka_node1:45674->172.17.0.4:XmlIpcRegSvc (ESTABLISHED)

Kafka_node2 node2只与node1建立了连接

[root@kafka_node2 /]# lsof -i:9092 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 415 root 106u IPv4 75016 0t0 TCP kafka_node2:XmlIpcRegSvc (LISTEN) java 415 root 116u IPv4 72998 0t0 TCP kafka_node2:XmlIpcRegSvc->172.17.0.2:43094 (ESTABLISHED)

Kafka_node3 node3与node2一样和node1建立了连接

9092 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 1125 root 106u IPv4 73394 0t0 TCP kafka_node3:XmlIpcRegSvc (LISTEN) java 1125 root 116u IPv4 72253 0t0 TCP kafka_node3:XmlIpcRegSvc->172.17.0.2:45674 (ESTABLISHED)

###管理Kafka

接下来我们操作下Kafka,我们会通过kafka-topics.sh新建一个Topic,然后使用kafka-console-producer.sh消息生产脚本来生产消息到Topic中,再由kafka-console-consumer.sh消息消费者消费消息,以及常用的选项介绍。

创建Topic主题

[root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-topics.sh --create --bootstrap-server 172.17.0.2:9092,172.17.0.3:9092,172.17.0.4:9092 --replication-factor 3 --partitions 3 --topic kafka_data WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both. #上面kafka警告说“在创建Topic时不允许使用"_."之类的符号,由于我们是测试,没有关系” 选项解释: --create:创建新的Topic --bootstrap-server:指定要哪台Kafka服务器上创建Topic,主机加端口,指定的主机地址一定要和配置文件中的listeners一致 --zookeeper:指定要哪台zookeeper服务器上创建Topic,主机加端口,指定的主机地址一定要和配置文件中的listeners一致 --replication-factor:创建Topic中的每个分区(partition)中的复制因子数量,即为Topic的副本数量,建议和Broker节点数量一致,如果复制因子超出Broker节点将无法创建 --partitions:创建该Topic中的分区(partition)数量 --topic:指定Topic名称

查看已创建的Topic

刚才我们创建了3份Topic,创建时指定了三台Kafka的地址及端口,所以每天上面都会有我们创建的Topic [root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-topics.sh --list --bootstrap-server 172.17.0.2:9092 kafka_data [root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-topics.sh --list --bootstrap-server 172.17.0.3:9092 kafka_data [root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-topics.sh --list --bootstrap-server 172.17.0.4:9092 kafka_data

生产消息

[root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-console-producer.sh --broker-list 172.17.0.2:9092 --topic kafka_data >Hello Kafka_data >I'm the 172.17.0.2 Kafka create >test 参数解释: --broker-list:指定使用哪台broker来生产消息 --topic:指定要往哪个Topic中生产消息

消费消息 我们在Kafka_node1上的Topic生产消息,在Kafka_node3中消费消息,可以得出,Broker存储过消息后会同步给集群内的其它Broker节点

[root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-console-consumer.sh --bootstrap-server 172.17.0.4:9092 --topic kafka_data --from-beginning I'm the 172.17.0.2 Kafka create test Hello Kafka_data

查看Topic详情

[root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-topics.sh --describe --bootstrap-server 172.17.0.2:9092 --topic kafka_data Topic:kafka_data PartitionCount:3 ReplicationFactor:3 Configs:segment.bytes=1073741824 Topic: kafka_data Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Topic: kafka_data Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Topic: kafka_data Partition: 2 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2 参数解释: Topic:kafka_data:topic名称 PartitionCount:3:分片数量 ReplicationFactor:3:Topic副本数量

删除Topic

[root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-topics.sh --delete --bootstrap-server 172.17.0.2:9092 --topic kafka_data 查看删除信息 [root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-topics.sh --list --bootstrap-server 172.17.0.2:9092 __consumer_offsets [root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-topics.sh --list --bootstrap-server 172.17.0.3:9092 __consumer_offsets [root@kafka_node1 /]# /usr/local/kafka_2.12-2.2.1/bin/kafka-topics.sh --list --bootstrap-server 172.17.0.4:9092 __consumer_offsets

我们在node1节点删除了Topic,三台节点会同步更新,所以我们的kafka_data在三台node上全部删除

文章转载于马哥教育官网!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3