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

Posted 李振伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka一个节点挂掉,导致服务不可消费相关的知识,希望对你有一定的参考价值。

问题: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

以上是关于Kafka一个节点挂掉,导致服务不可消费的主要内容,如果未能解决你的问题,请参考以下文章

微服务如何记录kafka节点异常

kafka删除节点怎么删除

kafka集群里面如何重建单个节点

怎么查看kafka集群中所有的broker节点

kafka开启scarm认证报连接其中一个节点失败

kafka系列八exactly once去重原理及场景