Kafka-云主机集群部署(Ansible)
实验拓扑:
实验在同在Openstack创建实例做,三台CentOS7.2,绑定浮动ip
因为kafka依赖于zookeeper服务,在做kafka集群前首先部署好Zookeeper
[Zookeeper的部署见上一篇文章][2]
1.zookeeper集群部署
这里就直接用之前写的yml脚本,ansible执行部署后,用命令检测一下三台节点状态
如图,三台节点模式
2.KafKa配置
三台服务器节点配置相同,注意IP地址和id的填写
将kafka文件包下载到服务器,使用命令解压
修改配置文件,
[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
运行kafka服务
[root@192 bin]#kafka/bin/kafka-server-start.sh -daemon ../config/server.properties
测试服务
在一个节点中创建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".
回显创建成功
第二台节点查看topic,得到回显hello
[root@192 bin]# ./kafka-topics.sh --list --zookeeper 192.168.100.5:2181
最后第三台节点查看topic,得到回显hello
[root@192 bin]# ./kafka-topics.sh --list --zookeeper 192.168.100.6:2181
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
如图
报错2:kafka启动后服务自闭,端口无法监听
这同样是云主机环境下浮动IP绑定造成的,同上一篇zookeeper报错
#在更改服务配置文件的时候,正常情况下端口监听写法为
listeners=PLAINTEXT://ip地址:9092端口
#在云主机环境下,使用以下两行配置代替
port=9092端口
advertised.host.name=ip地址
重新启动服务即可正常监听端口9092
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
最后查看一下端口监听,三台服务器9092端口正常监听,done
[1]:
[2]: http://www.taoreset.cn/index.php/archives/658/