阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Kafka+ZooKeeper高可用集群部署

87次阅读
没有评论

共计 8377 个字符,预计需要花费 21 分钟才能阅读完成。

集群环境

Kafka+ZooKeeper 高可用集群部署

kafka+zk

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

### 部署 JDK

tar xf jdk-8u161-linux-x64.tar.gz  -C /usr/local/
cat << EOF >> /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 << EOF > /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 << EOF > /usr/local/kafka_2.12-2.2.1/config/server.properties
broker.id=1                                                     #Kafka_node2 节点修改为 23 修改为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 上全部删除

好啦!今天的分享到这里就结束了,希望大家持续关注马哥教育官网,每天都会有大量优质内容与大家分享!

文章来源于网络,侵删!

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-12-03发表,共计8377字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中