kafka模拟消费报错 ISR缺失 指定offset提取数据失败场景

芒果1年前技术文章726

测试集群信息
kafka版本:3.0.0
172.16.120.236  kafka-id: 0
172.16.121.150  kafka-id: 1
172.16.121.225  kafka-id: 2
背景描述 
客户消费kafka中某一个topic的分区数据到达指定offset 就消费报错了 而且ISR副本也会同步失败 
本文要做的是模拟拿出出问题的那个offset
创建一个测试topic
kafka-topics.sh --create --bootstrap-server emr1:9092,emr2:9092,emr3:9092   --replication-factor 3 --partitions 3 --topic kafka-check

791484B3-4882-473A-831D-72C7A1DD205E.png
编写一个脚本不断往里面写入数据
#!/bin/bash
while true
do
    # 生成随机数据
    data=$(head /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 1000)
    # 向 Kafka topic 写入数据
    echo "$data" | /opt/dtstack/Kafka/kafka/bin/kafka-console-producer.sh --broker-list emr1:9092,emr2:9092,emr3:9092 --topic kafka-check

done
消费看下
kafka-console-consumer.sh --bootstrap-server emr1:9092,emr2:9092,emr3:9092 --topic kafka-check

image.png

查看下当前分区情况

kafka-topics.sh --bootstrap-server  emr1:9092,emr2:9092,emr3:9092 --topic kafka-check --describe
FE92705A-F960-4E1F-BE87-D31E1580C616.png
查看test消费组消费的情况
kafka-consumer-groups.sh --bootstrap-server emr1:9092,emr2:9092,emr3:9092  --describe --group test
32BD1056-F044-4FB8-8F12-69733B6C5333.png
例如分区0 当前offset:2827  最后offset:4346 滞后量:1519
比如现在我想拿到分区0的2828的offset数据
根据上图查看的分区情况来看的话 0分区的Leader在2上 我们就去kafka的id 2机器上
指定offset消费数据 犹豫我们要拿出的那个offset数据是指定offset消费不出来的
为了测试更加准确定 我们提前看一下2828的结果吧
kafka-console-consumer.sh --bootstrap-server emr1:9092,emr2:9092,emr3:9092   --topic  kafka-check  --partition 0   --offset 2828 | head -1
结尾:jMxMWtwOCzdyr7v4hLl
F396EDE3-0EC4-4C3E-AFF7-03856A00D418.png
ok那我们继续测试
指定offset消费 1条从2827开始
kafka-console-consumer.sh --bootstrap-server emr1:9092,emr2:9092,emr3:9092   --topic  kafka-check  --partition 0   --offset 2827 | head -1
结尾:qI12ZjInjzOetudzQH
BC1DA289-F19F-4A05-B6C4-D8EF3BB1E536.png
然后我们去数据目录(Leader的节点)
cd /data/kafka/logs/kafka-check-0/
ll
FB57D54D-3EA3-4690-B8F9-07DD7CDB797B.png
搜索这个数据
grep -Rn "qI12ZjInjzOetudzQH"
E9B187D2-A969-4673-A8BF-D6455D096207.png
匹配到文件 进入这个二进制文件

搜索qI12ZjInjzOetudzQH

image.png

由于是二进制文件 看起来会比较乱 但是细心点可以发现 我们已经找到了2828的offset数据
更好的办法
执行strings显示16进制
strings -a -t x 00000000000000002734.log  | grep qI12ZjInjzOetudzQH
D0BE0847-51B8-413E-A76D-B1EFAD211C09.png
思路先追加到一个文件中 然后cat -n拿到行数 输出下一行就可以了
strings -a -t x 00000000000000002734.log > /opt/00000000000000002734.log
cat 00000000000000002734.log | grep qI12ZjInjzOetudzQH
cat -n 00000000000000002734.log | grep qI12ZjInjzOetudzQH

接下来提取97行数据就可以
但是要注意在提取大型文件的数据是cat性能消耗是比较大的 
可以使用sed
sed -n '97p' 00000000000000002734.log
    A1C8DE39-B196-42E5-B211-86E93162FB3E.png


相关文章

HBase导出表和备份表操作

HBase导出表和备份表操作

HBase提供了几种导出数据的方式,包括使用HBase自带的工具和使用HBase的API。本文主要是讲的使用HBase自带的工具进行导出首先我们创建一个表 插入一些数据hbase shelllistc...

运维监控体系总结

总结归纳运维工作中的监控内容。监控目标:明白监控的重要性以及使用监控要实现的业务目标通常包括以下三点:对目标系统进行实时监控监控可以实时反馈目标系统的当前状态 目标系统硬件、软件、业务是否正常、目前处...

HDP-Yarn开启CPU调度和隔离

HDP-Yarn开启CPU调度和隔离

进入到ambari主界面 点击yarn 点击config CPU Scheduling and Isolation 设置为enable修改高级配置点击ADVANCED搜索需要修改的配yarn.node...

大数据监控系列(一)——Prometheus+Grafana监控概述

大数据监控系列(一)——Prometheus+Grafana监控概述

1 概述这是介绍Prometheushe和Grafana主要是为了监控大数据产品,数栈平台也是使用Prometheushe+Grafana作为底层大数据组件的监控,并且均有配置模板,导入即在Grafa...

Java-API-MapReduce的操作WordCount篇

Java-API-MapReduce的操作WordCount篇

首先就是pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/...

CDP实操--HDFS角色迁移

CDP实操--HDFS角色迁移

    hdfs角色迁移功能在cdp页面中就可以实现该功能,迁移的时间与namenode元数据大小,以及block数量多少有关,注意迁移过程中集群需要关闭,要预留出操作时间窗口。1、页面选择迁移角色2...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。