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

芒果8个月前技术文章253

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


相关文章

HDP实操--NameNode开启高可用

HDP实操--NameNode开启高可用

为了确定在namenode组件失败后集群中有其他的namenode可以工作,需要对hdp集群配置高可用,当前我们配置的非安全集群的高可用。前置条件:(1)确保你的集群至少有3个节点并且至少有3个Apa...

mysql8 rpm安装教程

1:卸载原有REPO源查询已经存在的mysql及相关依赖包rpm -qa | grep mysql此时你会看到一堆列表,使用 yum 命令依次卸载yum remove mysql-xxx-xxx-xx...

Hive删除外部表

Hive删除外部表

删除外部表操作例:1.首先我们创建一个外部表create EXTERNAL table if not exists mgtest(id int, name string)row format deli...

Hive压测之开源Hive基准测试工具(hive-testbench-hive14)

Hive压测之开源Hive基准测试工具(hive-testbench-hive14)

此文章禁止转载概述Hive基准测试工具工具,可用来造数测试Hive基本性能。TPC-DS:提供一个公平和诚实的业务和数据模型,99个案例TPC-H:面向商品零售业的决策支持系统测试基准,定义了8张表,...

hive 报 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

hive 报 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster

解决办法:关键需要配置两个配置:mapred-site.xml 和 yarn-site.xml下面配置hadoop classpath。先运行shell命令:hadoop classpath添加一个配...

HBase导出表和备份表操作

HBase导出表和备份表操作

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

发表评论    

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