背景:因为公司收集终端盒子数据的kafka服务偶尔会倒,所以考虑使用kafka的分布式,增加broker节点,来提高系统的可用性。当然,zookeeper服务节点也是可以增加的,但不在本文范围内。
具体步骤如下:
1. 新加kafka服务,并启动
如果是同一服务器,则可以拷贝新建server.properties的方式启动,具体参考官网
如果是不同服务器,则需要下载解压同一版本的kafka,并修改zookeeper的设置,然后启动
这里我用的是第二种方案,下面是server.properties中修改的三个配置
broker.id=1 listeners=PLAINTEXT://192.168.0.43:9093 zookeeper.connect=192.168.0.20:2181
启动命令
nohup /opt/kafka_2.12-2.4.0/bin/kafka-server-start.sh /opt/kafka_2.12-2.4.0/config/server.properties &
相应的停止命令
/opt/kafka_2.12-2.4.0/bin/kafka-server-stop.sh /opt/kafka_2.12-2.4.0/config/server.properties &
2. 重新给Topic分配副本
1)新建json文件increase-replication-factor.json,并输入如下内容
{"version":1,
"partitions":[{"topic":"activeRecords","partition":0,"replicas":[0,1]}]
}
2)执行分配命令
./bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --execute
3. 查看执行结果
./bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --verify
可以看到,因为log文件过多,导致复制操作还在执行
等待一段时间之后,再次查看执行结果
最后查看该Topic状态(RelicationFactor和Replicas的变化),增加成功!
./bin/kafka-topics.sh --zookeeper localhost:2181 --topic activeRecords --describe
如果尝试把节点0的kafka停掉,会发现Leader发生了变化
另外,中间发生了如下的错误,原因是两边的kafka版本不同,一个是2.10,一个是2.12,在将低版本升级后,问题解决。
Connection to 0 was disconnected before the response was read
参考:
kafka官网:http://kafka.apache.org/quickstart
kafka中文学习网站:https://www.w3cschool.cn/apache_kafka/