Kafka元数据异常导致业务异常应急恢复方案

网友投稿 1132 2022-05-28

6.5.x。

执行扩容操作,进行数据迁移在数据迁移过程中由于Kafka节点故障,导致Kafka Topic元数据处于紊乱状态,导致无法进行读写操作。

例如:

Topic:O_PS_SEQ_DATA_BUSI_CRD,其中Partition:289, ISR列表为26,29;Leader为26;Replicas列表为10,6。当需要访问Partition 289时,获取Leader为26,则客户端连接26进行读写请求。

Kafka元数据异常导致业务异常应急恢复方案

通过Kafka自身携带的console-consumer进行数据消费,可以发现元数据紊乱,导致consumer无法正常消费,提示fetch offsets for partition failed due to obsolete leadership infomation。

Kafka服务异常。

生产者无法发送数据到Kafka。

消费者无法从Kafka中消费数据。

恢复时长与数据量相关。

操作影响较大,需要提前研发进行沟通确认,与各方达成一致后方可实施。

执行修复之前,必须先准备好如下信息:

序号

项目

操作方式

1

集群账号信息

申请集群admin账户的密码。

2

节点账号信息

申请集群内节点的omm、root用户密码。

3

SSH远程登录工具

准备PuTTY或SecureCRT等工具。

4

客户端

已提前安装好客户端

针对这种情况,采用对异常Partition重新reassign的方式来进行处理。

根据partition的分布和leader,然后去leader节点上确认leader上的源数据存在,再找一个磁盘空间相对充裕的节点,把有问题的partition重分配到原来的leader节点和一个新的节点上。

执行命令,进入客户端安装目录,例如“/opt/client”。

cd /opt/client

执行命令,配置环境变量。

source bigdata_env

如果集群采用了安全版本,要进行安全认证。

kinit admin

根据提示输入正确的用户密码。

[root@mgtdat-sh-3-01-3 client]#source bigdata_env #配置环境变量 [root@mgtdat-sh-3-01-3 client]#kinit admin #设置kinit认证 Password for admin@HADOOP.COM:

执行Kafka相关命令,获取Topic分布信息和副本同步信息,观察返回结果。

kafka-topics.sh

--describe

--zookeeper

例如:

[root@mgtdat-sh-3-01-3 client]#kafka-topics.sh --describe --zookeeper 10.149.0.90:24002/kafka Topic:topic1 PartitionCount:2 ReplicationFactor:2 Configs: Topic: topic1 Partition: 0 Leader: 26 Replicas: 23,25 Isr: 26 Topic: topic1 Partition: 1 Leader: 24 Replicas: 24,23 Isr: 24,23

其中,Replicas对应副本分布信息,Isr对应副本同步信息。

如果Topic Partition对应的Leader中Broker的id不在Replicas(副本)列表中。

该Partition为异常Partition,需要通过重新reassign进行修复。

手工创建迁移Json文件,内容为需要移动的topic和信息,文件保存为expand-cluster-reassignment.json。

生成的expand-cluster-reassignment.json放置在客户端安装目录。

根据partition的分布和leader,然后去leader节点上确认leader上的源数据存在,再找一个磁盘空间相对充裕的节点,把有问题的partition重分配到原来的leader节点和一个新的节点上(非Replicas中节点)。

根据上述规则,生成迁移Json文件。

例如:

{"version":1, "partitions":[{"topic":"topic1","partition":0,"replicas":[26,30]}]}

其中26为partition的原来的leader, 30为磁盘相对充裕的节点,且不是Replicas中的节点。

根据手工生成的Partitions分布情况执行重分布。

kafka-reassign-partitions.sh

--zookeeper

--reassignment-json-file

--execute

例如:

[root@mgtdat-sh-3-01-3 client]#kafka-reassign-partitions.sh --zookeeper 10.149.0.90:24002/kafka --reassignment-json-file /opt/client/expand-cluster-reassignment.json --execute Current partition replica assignment {"version":1,"partitions":[{"topic":"topic1","partition":1,"replicas":[23,25]},{"topic":"topic1","partition":0,"replicas":[26,30]}]} Save this to use as the --reassignment-json-file option during rollback Successfully started reassignment of partitions {"version":1,"partitions":[{"topic":"topic1","partition":0,"replicas":[26,30]}]}

命令会打印Topic Partitions原始分布情况和新的分布情况。

确认Partitions重分布执行结果。

kafka-reassign-partitions.sh

--zookeeper

--reassignment-json-file

--verify

例如:

[root@mgtdat-sh-3-01-3 client]#kafka-reassign-partitions.sh --zookeeper 10.149.0.90:24002/kafka --reassignment-json-file /opt/client/expand-cluster-reassignment.json --verify Status of partition reassignment: Reassignment of partition [topic1,0] completed successfully

执行命令,进入客户端安装目录,例如“/opt/client”。

cd /opt/client

执行命令,配置环境变量。

source bigdata_env

如果集群采用了安全版本,要进行安全认证。

kinit admin

根据提示输入正确的用户密码。

[root@mgtdat-sh-3-01-3 client]#source bigdata_env #配置环境变量 [root@mgtdat-sh-3-01-3 client]#kinit admin #设置kinit认证 Password for admin@HADOOP.COM:

执行Kafka相关命令,获取Topic分布信息和副本同步信息,观察返回结果。

kafka-topics.sh

--describe

--zookeeper

例如:

[root@mgtdat-sh-3-01-3 client]#kafka-topics.sh --describe --zookeeper 10.149.0.90:24002/kafka Topic:topic1 PartitionCount:2 ReplicationFactor:2 Configs: Topic: topic1 Partition: 0 Leader: 26 Replicas: 26,30 Isr: 26,30 Topic: topic1 Partition: 1 Leader: 24 Replicas: 24,23 Isr: 24,23

其中,Replicas对应副本分布信息,Isr对应副本同步信息。

根据迁移Partition,找到Partition信息,其中Replicas信息和迁移方案一致,则说明迁移成功。

待某Topic的所有异常Partition均已完成修复,可以通过消费者进行数据消费,从而进行Topic状态测试。

不同版本消费者命令不同,请根据版本确定执行命令。

FusionInsight HD V100R002C50SPC20*

kafka-console-consumer.sh

--topic

--zookeeper

--from-beginning

[root@10-10-10-11 client]#kafka-console-consumer.sh --topic topic1 --zookeeper 10.149.0.90:24002/kafka --from-beginning 1 2 3

其中,1 ,2 ,3为Topic中消息信息。

FusionInsight HD 6.5.0版本

kafka-console-consumer.sh

--topic

-- bootstrap-server

--new-consumer < consumer.properties >

--from-beginning

例如:

[root@10-10-10-11 client]#kafka-console-consumer.sh --topic topic1 --bootstrap-server 10.149.0.90:21007 --new-consumer --consumer.config /opt/client/Kafka/kafka/config/consumer.properties --from-beginning 1 2 3

其中,1 ,2 ,3为Topic中消息信息

EI企业智能 FusionInsight Kafka

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:遗传算法入门
下一篇:Java - 一篇带你解决 JDK Logger 日志配置失效问题
相关文章