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

芒果5个月前技术文章162

测试集群信息
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


相关文章

Trino配置yanagishima-23.0(包含编译)

Trino配置yanagishima-23.0(包含编译)

1 环境介绍1.1 本文采用trino 359yanagishima v23.02 编译yanagishima2.1 安装编译yanagishima需要的工具安装编译yanagishima需要的工具w...

CDP实操--集群扩容

CDP实操--集群扩容

一、前提准备工作1.确保OS的yum源可以正常使用,通过yum repolist命令可以查看到匹配的OS的所有包2.确保Cloudera Manager的yum源运行正常3.hosts文件配置,需要将...

ES运维(六)_segment合并使用原理及场景

ES运维(六)_segment合并使用原理及场景

一、背景简介ES中,每个index(索引)都包含若干个Shard(分片),每个分片底层又是一个个Segment文件(段),每次数据的读写底层就是与一个个段文件的交互,因此ES调优常用的一块就是对段文件...

dolphinscheduler单机部署

dolphinscheduler单机部署

官网链接:https://dolphinscheduler.apache.org本次测试版本为:https://dolphinscheduler.apache.org/zh-cn/download/3...

Java-API对HDFS的操作(IDEA版)

Java-API对HDFS的操作(IDEA版)

前期工作首先就是安装maven在win系统下不配置hadoop环境,直接运行代码会报错,显示缺少winutils.exe 和 hadoop.dll 两个文件首先添加pom.xml文件  <dep...

ranger_audits更换审计日志保留时间

ranger_audits更换审计日志保留时间

本次测试集群为:hdp: 3.1.5.0-152Infra Solr: 0.1.0Ranger: 1.2.0.3.1修改Solr 的中ranger_audits 数据保留时长HDP、CDP中Range...

发表评论    

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