问题:Kafka一个节点挂掉,导致服务不可消费。

工作中遇到的一个问题,解决方法如下。

一、修改系统_offsets副本数为3

1、首先查看系统的_offsets副本是几个?

/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper 192.6.36.159:2181|grep consumer_offsets

查看结果如下图:副本数为1。
在这里插入图片描述

2、修改kafka的核心配置文件server.properties

将num.partitions参数(默认为1)修改为3,
另外需要添加auto.create.topics.enable=true ,如果没有对用的topic可以主动创建topic。
在这里插入图片描述
由于__consumer_offsets是kafka默认的主题,无法删除,我们可以删除zookeeper中的__consumer_offsets。
进入zookeeper/bin目录执行./zkCli.sh

cd /usr/local/zookeeper/bin
./zkCli.sh
ls /broksers/topics
# 如果此命令报错,用下面代替
rmr /broksers/topics/__consumer_offsets 
# 新版本zk去除了rmr命令,在这里我们用 
deleteall /broksers/topics/__consumer_offsets

然后重启zookeeper、kafka

# 停止
/usr/local/zookeeper/bin/zkServer.sh stop
/usr/local/kafka/bin/kafka-server-stop.sh -daemon /usr/local/kafka/config/server.properties

# 启动
/usr/local/zookeeper/bin/zkServer.sh start
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

3、再次查看系统的_offsets副本是几个?

/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper 192.6.36.159:2181|grep consumer_offsets

在节点1修改__consumer_offsets后,在节点2和节点3查看__consumer_offsets发现副本数已经变为3,不需要再进行修改。
在这里插入图片描述
!!!注意、到此问题没有解决,这里只是解决了系统的offsets副本,原先的topic的副本数依然为1,需要我们对已有的topic进行扩副本!!!

二、为现有普通topic扩副本

1、查看某个topic的副本数

/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper 192.6.36.159:2181,192.6.36.161:2181,192.6.36.162:2181 --topic portal_device_info

在这里插入图片描述

2、制定分区及副本分配策略

添加json文件

vi /opt/portal_device_info.json
{
    "version": 1,
    "partitions": [
        {
            "topic": "portal_device_info",
            "partition": 0,
            "replicas": [
                0,
                1,
                2
            ]
        }
    ]
}

3、扩副本

/usr/local/kafka/bin/kafka-reassign-partitions.sh --zookeeper  192.6.36.159:2181,192.6.36.161:2181,192.6.36.162:2181 --reassignment-json-file /opt/portal_device_info.json –execute

如下图,表示成功。
在这里插入图片描述

4、再次查看副本数量

/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper 192.6.36.159:2181,192.6.36.161:2181,192.6.36.162:2181 --topic portal_device_info

在这里插入图片描述
至此,问题已解决,我们测试一下,把其中一个节点停掉,kafka依然可以正常消费。

参考:
https://blog.csdn.net/DreamsArchitects/article/details/108573887
https://blog.csdn.net/yabingshi_tech/article/details/120443647

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐