Kafka分区所在broker宕机故障-引发该分区不可用

引入 | 记一次修复Kafka分区所在broker宕机故障-引发当前分区不可用的思考过程:

问题复现:

写在前面的话,在五一假期过后,业务组内童鞋碰到了这样一个问题,反复尝试并研究,包括不限于改Kafka,主题创建删除,Zookeeper配置信息重启服务等等,于是我们来一起看看,如何快速定位...

Ok,Now,我们还是先来一步步分析它并解决它,依然以”化解“的方式进行,我们先来看看业务进程中线程报错信息:org.apache.kafka.clients.NetworkClient   : [Consumer clientId=consumer-1, groupId=xxxx-center] 1 partitions have leader brokers without a matching listener, including [xxxx-xxxx-xxxx-message-0]

假设猜想:

从字面意思来看,当前分区所对应的的broker失去监听,怀疑是Kafka某个节点有问题-失联-假死?

思考过程:

从这个表象来看,某台机器有过宕机事件,宕机原因因环境而异,但Kafka的高可用性HA我们是耳熟能详的,为啥我们搭建的Kafka集群由多个节点组成,但其中某个节点宕掉,整个分区就不能正常使用-消费者端无法订阅到消息。

首先,我们来看下Kafka的配置信息:[root@xx-xx-xxx-xx kafka_2.11-2.1.1]# nohup  bin/kafka-server-start.sh config/server.properties &

这里使用了默认的topic分区副本数量:offsets.topic.replication.factor=1,当分区副本数量为1,则副本信息只会存在某一个broker节点,Isr即其自身。

这很容易出现单点故障,当当前节点挂了的时候,选举不出新的leader,导致分区不可用。在生产环境的话,可设置多个副本因子来保证高可用性(比如三个节点组成一个集群,副本数量为2,这样当任意一台节点丢失,kafka集群仍会正常工作Working...)。

解决方案:

当然,把这个宕掉的节点拉起来,查看该分区的信息leader:xxxx Isr:xxxx,保障生产者线程也能正常将数据入发送到Kafka中,消费者线程也能正常订阅到消息。

我们这里分布式协调服务采用的是Zookeeper,当Kafka某个broker节点宕调后,其实我们可以在Zookeeper中还是有迹可循的,因为Kafka集群的一些重要信息都记录在Zookeeper中:

引入上图->图片来源:http://blog.csdn.net/lizhitao/article/details/23744675

首先,我们来查看topic主题都有哪些,查询topic列表,进入kafka目录:
bin/kafka-topics.sh --list --zookeeper localhost:2181

然后,查询topic日志内容,跟业务进程中线程报错信息一致,进入kafka目录:
bin/kafka-console-consumer.sh --bootstrap-server xx.xx.xxx.xx:9092 --topic xxxx-xxxx-xxxx-message --from-beginning

接下来,查看当前topic详细信息,进入kafka目录:

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic xxxx-xxxx-xxxx-message

在Kafka的server.properties配置文件中指定的broker.id=71已不在其中--从主题详细信息中,我们可以看到Partition,Leader,Replicas,Isr都为0...

接着,我们还是进入Zookeeper,查一下踪迹,进入Zookeeper目录:

./zkCli.sh -server localhost:2181

输入 ls /,查看到了Zookeeper中存储了brokers信息,
输入 ls /brokers,ls /brokers/topics,我们查看到了跟之前一致的topic列表,

输入 ls /brokers/ids,查看到ids [0],这里broker.id的指定:在server.properties中修改broker.id可为当前机器后缀数值,不要超过其范围,保持日志中一致的话进入cd /home/user/kafka/logs,同样修改meta.properties文件,

而输入 ls /brokers/topics/xxxx-xxxx-xxxx-message/partitions/0/state,继续查看当前topic分区状态,

到了这里,我们已验证了之前的猜想,当前Broker节点下该分区没有查询到任何可用信息,配置文件中broker.id=71已被移除掉...

我们把这个宕掉的节点拉起来后,按上述步骤查看当前分区信息,这里我们上俩张成功后的图,保障了生产者线程也能正常将数据入发送到Kafka中,消费者线程也能正常订阅到消息。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka 时,可以按照以下步骤来排查问题: 1. 检查日志:查看 Kafka 服务器的日志文件,通常位于 Kafka 安装目录下的 `logs` 目录。关注任何错误或异常信息,这些信息可能会指示出问题的根本原因。 2. 检查网络连接:确保 Kafka 服务器和相关组件之间的网络连接正常。可以通过尝试与其他 Kafka 组件(如 ZooKeeper)建立连接来验证网络连接是否可用。 3. 检查硬件资源:验证 Kafka 服务器上的硬件资源(CPU、内存、磁盘空间等)是否足够支持当前的负载。如果硬件资源不足,可能会导致或性能下降。 4. 检查依赖服务:Kafka 依赖于 ZooKeeper 来管理集群状态,因此检查 ZooKeeper 是否正常运行,以及与 Kafka 服务器之间的连接是否正常。 5. 检查配置文件:检查 Kafka 的配置文件,确保其中的配置参数正确且与实际环境相匹配。特别关注与集群搭建、主题配置、分区分配等相关的配置项。 6. 数据目录一致性检查:Kafka 使用一个或多个数据目录来存储消息数据,确保数据目录的权限正确,并且文件系统没有出现任何问题。 7. 确认端口是否开放:确保 Kafka 相关的端口(如 broker、ZooKeeper 等)没有被防火墙或其他网络设备阻塞。 8. 检查运行时错误:检查是否有其他应用程序或进程与 Kafka 服务器发生冲突,导致或性能问题。 以上是一些常见的排查步骤,可以根据具体情况进行调整。如果问题仍然存在,建议查阅 Kafka 官方文档或寻求专业人士的帮助来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值