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 kafka
 kill -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.1

vim 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.mfbz.cn/a/570276.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新火种AI|Devin再次震撼谷歌!但却是以被质疑造假的方式...

作者:小岩 编辑:彩云 我们常说有人的地方就有江湖,就会存在炒作,扒皮和虚伪。没想到,到了人工智能这里,也是一样。 4月9日,一位自称有35年软件工程师经验的网络博主卡尔逐帧复现了人工智能软…

09—DOM和BOM

一、DOM 1、HTML DOM (文档对象模型) 文档对象模型(Document Object Model,DOM)是表示和操作HTML和XML文档内容的基础API。当网页被加载时,浏览器会根据DOM模型,将结构化文档(比如HTML和XML)解…

2024年低碳技术与污染控制技术国际学术会议(ICLCTPCT 2024)

2024年低碳技术与污染控制技术国际学术会议(ICLCTPCT 2024) 2024 International Conference on Low carbon technology and pollution control technology 一、【会议简介】 2024年低碳技术与污染控制技术国际学术会议,是交流科研成果的绝佳平台。 这次会议将汇集世…

Python 高质量类编写指南

原文:https://www.youtube.com/watch?vlX9UQp2NwTk 代码:https://github.com/ArjanCodes/examples/tree/main/2023/classguide Python 高质量类编写指南 我们将通过一些方法增加类的可读性和易用性。 通过(按照属性或行为)拆分类…

大模型检索召回系统:RAG技术的全面调查与未来展望

随着人工智能技术的飞速发展,大型语言模型(LLMs)在自然语言处理(NLP)领域取得了显著成就。然而,这些模型在处理特定领域或知识密集型任务时仍面临挑战,如产生错误信息或“幻觉”。为了克服这些难…

docker-compose搭建redis环境:哨兵模式(一主两重两哨兵)

文章目录 0.BG1. 编写docker-compose.yml文件2. 哨兵配置文件sentinel.conf3.启动容器4.模拟故障转移 0.BG redis环境有多中模式,包括Standalone,Cluster和Sentinel模式等。这里介绍一种简单搭建Sentinel模式的方法,搭建一个一主两重两哨兵的…

做视频号小店一年半,内部玩法曝光,今日全盘托出

大家好,我是电商笨笨熊 腾讯推出电商的消息一出来,就成为了电商界的又一关注点; 不少人称腾讯做电商不会长久,也有人称视频号小店必将成为未来电商黑马; 无论是哪种说法,视频号小店我先替大家做了一年半…

进程状态和优先级(进程第2篇)【Linux复习篇】

目录 一、进程状态 1、进程有什么状态? 2、 Linux下的进程状态有什么? 二、进程优先级 1、进程优先级是什么? 2、为什么要有优先级 3、怎么改进程优先级?要改吗? 4、操作系统如何根据优先级开展调度的&#xff…

使用原型学习和特权信息进行可解释的医学图像分类

Interpretable Medical Image Classification Using Prototype Learning and Privileged Information 摘要 .可解释性通常是医学成像的基本要求。需要先进的深度学习方法来满足这种对可解释性和高性能的需求。 本文研究了训练过程中可用的其他信息是否可用于创建易于理解且强…

DS32K查看内置寄存器数值

需要在debug的时候进行查看,先暂停,再打开EmbSys Registers窗口。 需要先将导出的内容选中并双击,不然复制出来会变成问号。右上角有个复制按钮,复制到剪贴板就行。譬如我这里选择了MCR寄存器,复制出来的就是这个寄存器…

Redis入门到通关之Redis数据结构-List篇

文章目录 ☃️概述☃️数据结构☃️源码☃️其他 欢迎来到 请回答1024 的博客 🍓🍓🍓欢迎来到 请回答1024的博客 关于博主: 我是 请回答1024,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端…

七分钟“手撕”三大特性<多态>

目录 一、学习多态之前需要的知识储备 二、重写 1.什么是重写 2.重写可以干嘛 3.怎么书写重写 4.重载与重写的区别 三、向上转型 1.什么是向上转型? 2.向上转型的语法 3.向上转型的使用场景 四、多态是什么 六、多态实现 七、多态的好处 八、多态的缺…

程序员过了35岁没人要?“这行越老越香”

程序员35岁失业?参加完OceanBase开发者大会,我又悟了! 周六参加了OceanBase2024 开发者大会的现场,来之前我其实挺忐忑的,我觉得一个数据库产品的发布会,能有什么新鲜的东西? 踏入酒店的那一刻&…

经风靡全球的 PHP 为何逐渐失去优势?

TIOBE 编程语言人气指数发布更新,并提出“PHP 的魔力是否正在消散?”的灵魂拷问。今年 4 月,PHP 在 TIOBE 编程语言指数榜上仅位列第 17,“成为其有史以来的最低排位”。 暴露 PHP 人气急剧下滑的还不只是 TIOBE 榜单。在年度 Sta…

MP4转gif如何操作?一个常见方法分享

MP4是一种视频格式,而gif则是图片格式。当我们需要将MP4格式的时候转成gif格式图片的时候要怎么操作呢?怎样在不下载软件的情况下在线转换格式呢?很简单,通过使用gif图片制作(https://www.gif.cn/)工具-GIF…

Android开发者必备:RootEncoder引领实时流媒体传输革新

Android开发者必备:RootEncoder引领实时流媒体传输革新 I. 引言 A. RootEncoder简介 RootEncoder for Android(rtmp-rtsp-stream-client-java)是一个功能强大的流编码器,旨在通过多种协议(包括RTMP、RTSP、SRT和UDP…

VR全景创业项目应该如何开展?未来有市场吗?

伴随着5G网络的发展,VR全景得到了众多的关注和提升。与此同时,各行各业都开始关注自身产业在互联网的展示效果,因为年轻一代的生活已经离不开互联网,而VR全景在互联网上的3D展示效果能给商家带来流量,提升营业额。 随着…

ERROR: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

今天本来想在A服务器上传文件给B服务器的结果发现明明给root用户设置了密码就是远程登陆不了,后来才发现在容器中很多服务都是没有的,所以刚安装后忘记了修改配置文件,导致远程登陆失败。 报错: 解决方法: 在/etc/ssh…

【电控实物-infantry】

云台电机参数 电机内部参数 相电阻:Rs1.8欧 相电感:Ls5.7810^-3H 转矩常数:Kt 0.741 NM/A 转动惯量:J KG-m^2 电机接收数据:-16384到16384(-3A到3A) 电机反馈:速度RPM rad/s (2πrpm)/60 C板陀螺仪&…

苍穹外卖学习笔记(9.订单状态定时处理,来电提醒,客户催单)

目录 一、订单状态定时处理1、需求分析设计2、代码开发3、测试 二、来单提醒1、需求分析设计2、代码开发3、测试 三、客户催单1、需求分析设计2、代码开发3、测试 四、相关知识1、Spring Task2、WebSocket 一、订单状态定时处理 1、需求分析设计 2、代码开发 创建orderTask类…