Kafka-云主机集群部署(附Ansible批量部署)

Kafka-云主机集群部署(附Ansible批量部署)

嚯嚯嚯www 34 2022-08-26

Kafka-云主机集群部署(Ansible)

实验拓扑:
84017-fzln9qb2twf.png

实验在同在Openstack创建实例做,三台CentOS7.2,绑定浮动ip
04749-kl595c7pdla.png
因为kafka依赖于zookeeper服务,在做kafka集群前首先部署好Zookeeper
[Zookeeper的部署见上一篇文章][2]

1.zookeeper集群部署

这里就直接用之前写的yml脚本,ansible执行部署后,用命令检测一下三台节点状态
如图,三台节点模式
30834-r2itlkc12qg.png

2.KafKa配置

三台服务器节点配置相同,注意IP地址和id的填写
将kafka文件包下载到服务器,使用命令解压
99698-epugkhbyg8j.png

修改配置文件,

[root@192 config]# vim server.properties
#注释以下两行
#broker.id=0
#zookeeper.connect=localhost:2181

#修改配置如下,broker.id为本机id在集群中需要配为不同的数字,zookeeper.connect将做好集群的zookeeper地址填入,listeners配置为本机IP的监听端口
broker.id=1
zookeeper.connect=192.168.100.4:2181,192.168.100.5:2181,192.168.100.6:2181
listeners=PLAINTEXT://192.168.100.4:9092

36554-l0qpirsnuuf.png

运行kafka服务
[root@192 bin]#kafka/bin/kafka-server-start.sh -daemon ../config/server.properties

59670-72v6vzcon55.png

测试服务

在一个节点中创建topic消息,hello
[root@192 bin]# ./kafka-topics.sh --create --zookeeper 192.168.100.4:2181 --replication-factor 1 --partitions 1 --topic hello
Created topic "hello".

回显创建成功
15634-qvmlf8ww6bj.png

第二台节点查看topic,得到回显hello
[root@192 bin]# ./kafka-topics.sh --list --zookeeper 192.168.100.5:2181

94072-4wvmprq09xs.png

最后第三台节点查看topic,得到回显hello
[root@192 bin]# ./kafka-topics.sh --list --zookeeper 192.168.100.6:2181

96792-8gfs98ltx5m.png

3.kafka测试排错

报错1:error=‘Cannot allocate memory’

提示内存使用不足
[root@192 bin]# ./kafka-server-start.sh -daemon ../config/server.properties 
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12)

解决方法,降低默认启动使用的1G内存
编辑kafka/bin/kafka-server-start.sh文件
将-Xmx1G -Xms1G 修改为 -Xmx256M -Xms128M
如图
81919-wszj755as4l.png
47044-paf4daezmpa.png

报错2:kafka启动后服务自闭,端口无法监听
这同样是云主机环境下浮动IP绑定造成的,同上一篇zookeeper报错

#在更改服务配置文件的时候,正常情况下端口监听写法为
listeners=PLAINTEXT://ip地址:9092端口

#在云主机环境下,使用以下两行配置代替
port=9092端口
advertised.host.name=ip地址

34041-6j8n4vbklhh.png

重新启动服务即可正常监听端口9092
65372-f3mhdoznytv.png

4.Ansible批量部署kafka集群服务

粗糙的写了一个ansible的yml部署脚本,直接运行脚本,冲杯拿铁,kafka集群搞定
配置好hosts里面的主机组,配置好ssh的密钥对

---
- hosts: all
  remote_user: root
  tasks:
    - name: ==Get & Release Kafka==
      shell:  rm -rf /usr/local/kafka&&wget ftp://192.168.1.100/soft/kafka_2.11-1.1.1.tgz&&tar -zxf kafka_2.11-1.1.1.tgz&&mv kafka_2.11-1.1.1 /usr/local/kafka&&chown -hR root:root /usr/local/kafka
    - name: ==Backup the config file==
      shell: cp /usr/local/kafka/config/server.properties /usr/local/kafka/config/server.properties.bak&&cp /usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/bin/kafka-server-start.sh.bak
    - name: ==Configure Kafka==
      shell: sed -i 's/^zookeeper.connect=localhost:2181/#&/g' /usr/local/kafka/config/server.properties&&sed -i 's/^broker.id/#&/g' /usr/local/kafka/config/server.properties&&serverid=`hostname|cut -c 24` && echo >> /usr/local/kafka/config/server.properties && echo zookeeper.connect=192.168.100.4:2181,192.168.100.5:2181,192.168.100.6:2181 >> /usr/local/kafka/config/server.properties&&echo broker.id=$serverid >> /usr/local/kafka/config/server.properties&&echo port=9092 >>/usr/local/kafka/config/server.properties&&serverip=`hostname|cut -c 1-13` && echo advertised.host.name=$serverip >>/usr/local/kafka/config/server.properties&&sed -i 's/-Xmx1G -Xms1G/-Xmx256M -Xms128M/g' /usr/local/kafka/bin/kafka-server-start.sh
    - name: ==Startup Kafka==
      shell: /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

21799-7ytjyla9d0y.png
最后查看一下端口监听,三台服务器9092端口正常监听,done
88602-b4l1jfj9mq6.png

[1]:
[2]: http://www.taoreset.cn/index.php/archives/658/