kafka部分partition的leader=-1修复方案整理

kafka部分partition的leader=-1修复方案整理

  • 1. 背景说明
  • 2. 修复测试
    • 2.1 创建正常的topic并验证生产和消费
    • 2.2 停止kafka模拟leader=-1
    • 2.3 修复parition
    • 2.4 修复完成验证生产消费是否恢复
  • 3. 疑问和思考
    • 3.1 kafka在进行数据消费时,如果有partition的leader=-1,进行数据生产和消费时,kafka是否会自动剔除对应的parition?
  • 4. 参考文档

1. 背景说明

部分环境发现,支撑kafka部分topic的被设置成单副本。当出现单机故障时,部分topic-partition出现leader=-1,对应的partition无法正常读写数据。特别是kafka内置的topic __consumer_offsets,__consumer_offsets 是记录topic的消费组数据消费的相关信息,如果出现了该问题,就会导致部分topic的消费组无法正常进行数据消费。

本文记录在工作中遇到的一次修复经历,并进行整理

2. 修复测试

2.1 创建正常的topic并验证生产和消费

  1. 获取kafka的配置zk链接信息,以及leader=-1的topic-partition、和每个kafka的id
# 获取kafka的id
cd /usr/local/services/kafka_2.11-1.1.1
cat config/server.properties |grep broker.id

在这里插入图片描述

# 获取kafka的zk地址
cd /usr/local/services/kafka_2.11-1.1.1
cat config/server.properties |grep zookeeper

在这里插入图片描述

  1. 创建一个单parition,4副本的topic,便于后续测试
# 创建topic
./bin/kafka-topics.sh --create --zookeeper $zk --topic test5 --replication-factor 4 --partitions 1

在这里插入图片描述

  1. 验证topic的读写情况
# 控制台1,创建数据消费者
./bin/kafka-console-consumer.sh --topic test5 --group test5 --bootstrap-server localhost:9092 --from-beginning# 控制台2,创建数据生产者
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test5

在这里插入图片描述

2.2 停止kafka模拟leader=-1

  1. 停止部分kafka节点,使得__consumer_offsets的partition:41为-1(正好记录test5的数据消费信息)
# 停止相关kafka节点的计划任务
crontab -e# 停止相关kafka进程ps -ef|grep kafkakill -9
# 获取zk信息
# 检查集群的topic信息
cd /usr/local/services/kafka_2.11-1.1.1
zk=xx.xx.xx.xx:2181/kafka
bin/kafka-topics.sh --zookeeper $zk --describe|grep __consumer_offsets

在这里插入图片描述

  1. 继续测试test5的数据生产和消费,此时test5无法消费数据
    在这里插入图片描述

2.3 修复parition

  1. 由于__consumer_offsets的partition:41(test5的消费记录保存在该paritition中)单副本,并且对应的节点已经宕机,因此不能通过调整副本的方式进行修复。需要调整zk中的元数据,重新给__consumer_offsets的partition:41配置isr和leader,让它恢复正常
# 获取zk信息
cd /usr/local/services/kafka_2.11-1.1.1
zk=xx.xx.xx.xx:2181/kafka# 登录zk节点,并进入zk
cd /data/zookeeper-3.4.14/bin
./zkCli.sh# 获取__consumer_offsets的partition:41的配置信息
get /kafka/brokers/topics/__consumer_offsets/partitions/41/state# 调整__consumer_offsets的partition:41的配置信息,选择0作为leader
set /kafka/brokers/topics/__consumer_offsets/partitions/41/state {"controller_epoch":15,"leader":0,"version":1,"leader_epoch":177,"isr":[0]}get /kafka/brokers/topics/__consumer_offsets/partitions/41/state

在这里插入图片描述

在这里插入图片描述

# 登录0号kafka节点,进一步调整replica信息,调整为0
cd /usr/local/services/kafka_2.11-1.1.1vim replication-factor.json 
{"version":1,"partitions":[{"topic":"__consumer_offsets","partition":41,"replicas":[0],"log_dirs":["any"]}]}
# 执行调整命令
./bin/kafka-reassign-partitions.sh --zookeeper $zk --reassignment-json-file replication-factor.json --execute# 查看调整进度
./bin/kafka-reassign-partitions.sh --zookeeper $zk --reassignment-json-file replication-factor.json --verify

说明调整完成,此时应该是leader:0 ,replica: [0], isr: [0]

# 获取zk信息
# 检查集群的topic信息
cd /usr/local/services/kafka_2.11-1.1.1
zk=xx.xx.xx.xx:2181/kafka
bin/kafka-topics.sh --zookeeper $zk --describe|grep __consumer_offsets

在这里插入图片描述

2.4 修复完成验证生产消费是否恢复

  1. 继续验证topic的生产和消费,已经恢复正常
# 控制台1,创建数据消费者
./bin/kafka-console-consumer.sh --topic test5 --group test5 --bootstrap-server localhost:9092 --from-beginning# 控制台2,创建数据生产者
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test5

在这里插入图片描述

3. 疑问和思考

3.1 kafka在进行数据消费时,如果有partition的leader=-1,进行数据生产和消费时,kafka是否会自动剔除对应的parition?

不会。

在这里将kafka的topic-parition设置成2种类型。

  • 业务topic,业务数据进行生产和消费
  • 内置topic __consumer_offsets,记录业务topic的消费的offset信息

两者逻辑相同。

数据进行生产时,会通过的方式 hash(key) / partition数量(也可以指定partition)到对应的partition, 消费者跟对应的paritition对应才能保证数据在paritition内有序。

如果kakfa在进行hash时需要考虑partition的leader=-1的情况,对应的hash规则会发生调整,对应的数据消费端也需要进行调整,整体的影响较大,因此kafka没有进行这样的考虑。而是要求在创建topic时能够进行要求多副本,并且通过监控运维等手段及时发现leader=-1的partition,并及时修复。

4. 参考文档

暂无

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/645136.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openEuler 22.03 LTS SP3(华为欧拉)一键安装 Oracle 11GR2 RAC(231017)

前言 Oracle 一键安装脚本,演示 openEuler 22.03 LTS SP3 一键安装 Oracle 11GR2 RAC(231017)过程(全程无需人工干预):(脚本包括 ORALCE PSU/OJVM 等补丁自动安装) ⭐️ 脚本下载地…

【结构型模型】享元模式

一、享元模式概述 享元模式定义:又叫蝇量模式,运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细…

备考2024年小学生古诗文大会:吃透10道历年真题和知识点(持续)

对上海小学生的小升初和各种评优争章来说,语文、数学、英语的含金量较高的证书还是很有价值和帮助的。对于语文类的竞赛,小学生古诗文大会和汉字小达人通常是必不可少的,因为这两个针对性强,而且具有很强的上海本地特色。 根据往…

IPEmotion轻松解决急停设备的控制与数据存储问题

一 背景 众所周知,急停操作在各种工业领域中都扮演着非常重要的角色。在一个个紧急情况下,及时采取急停操作可节省宝贵时间,避免人身伤害或设备损坏,降低安全风险,尤其是在新能源测试中,出于对高压电性能方…

C语言实现双人贪吃蛇项目(基于控制台界面)

一.贪吃蛇 贪吃蛇是一款简单而富有乐趣的游戏,它的规则易于理解,但挑战性也很高。它已经成为经典的游戏之一,并且在不同的平台上一直受到人们的喜爱和回忆。 二.贪吃蛇的功能 游戏控制:玩家可以使用键盘输入设备来控制蛇的移动方…

书生·浦语大模型开源体系(四)作业

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

云上如何实现 Autoscaling: AutoMQ 的实战经验与教训

01 背景 弹性是云原生、Serverless 的基础。AutoMQ 从软件设计之初即考虑将弹性作为产品的核心特质。对于 Apache Kafka 而言,由于其存储架构诞生于 IDC 时代,针对物理硬件设计,存储层强依赖本地存储,已不能很好地适应现在云的时…

求臻医学MRD产品斩获2023年度肿瘤标志物年度十大创新技术产品奖

2024年4月20日,中国肿瘤标志物学术大会开幕式暨名家讲坛在南京隆重召开! 会议期间,中国抗癌协会肿瘤标志专业委员会联合中国抗癌协会肿瘤临床检验与伴随诊断专业委员会、中国抗癌协会肿瘤基因诊断专业委员等共同发布“2023 年度肿瘤标志物创新技术产品”…

Day 32 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

买卖股票的最佳时期Ⅱ 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你…

Centos之yum安装好玩的命令

1.会动的小火车 我在root下使用的 yum install sl.x86_64sl2.figlet yum install figlet.x86_64figlet 55553.cowsay会说话 yum install cowsay

皮带机巡检解决方案

在化工行业中、皮带机人工巡检存在的疲劳安全、巡检质量、数据分析等问题,通过以智能巡检机器人为中心的设备生命周期运维管理系统,完成对皮带机的巡检巡逻和排查预警,有效降低人员和设备的安全隐患,更助力企业运维水平和智能化作…

十五、Java中I/O流

1、流的基本概念 1)流的概念 流:在Java中所有的数据都是使用流读写的。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质就是数据传输,根据数据传输特性将流抽象为各种类。 (1)按照流向分:输入流、输出流。…