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

芒果3个月前技术文章89

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


相关文章

大数据集群监控配置操作指导(一)prometheus+grafana部署

大数据集群监控配置操作指导(一)prometheus+grafana部署

1.prometheus+grafana部署(单独部署到一台服务器。4c8g。系统盘300G。操作系统建议7.6到7.9)1.1下载prometheus和grafana的二进制包mkdir /opt/...

Hive优化之配置参数的优化(一)

Hive优化之配置参数的优化(一)

 Hive是大数据领域常用的组件之一,主要是大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能。影响Hive效率的...

CDP实操--Ranger开启ldap认证

CDP实操--Ranger开启ldap认证

集群中已经部署了ldap主主模式,并且使用haproxy进行负载均衡,keepalive提供了虚拟ip。页面配置:Ranger进行同步用户:验证:使用ldap用户登录页面:FAQ:1、admin超级管...

中国式IT运维,趟出自己的“长期主义”河流

2018年,Gartner曾做过一次长达6个月的调查问卷。在这个主题为AIOps的问卷中,Gartner选取了500家各行业头部的企业,针对其当下的IT架构来判断调研企业未来是否会加大对于AIOps的...

mysql8 rpm安装教程

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

CDP实操--HDFS角色迁移

CDP实操--HDFS角色迁移

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

发表评论    

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