事故背景:

  我们公司与合作方公司有个消息同步的需求,合作方是消息生产者,我们是消息消费者,他们通过kafka给我们推送消息,我们实时接收,然后进行后续业务处理。昨天上午,发现他们推送过来的广场门店信息我们都没有消费,导致我们系统和他们系统数据不一致,从而导致无法提单,无法出报表(报表有误)等各种问题

排查过程:

(1)因为coco身体不适,上午请假去医院了,所以这个问题就转给我们team的专门运维的同事了,电话大概给他说明了代码路径,可惜,半天下来仍然无果,看着微信群里他发的消息,我有点抓狂,根本没有找到点上,半天了没查出原因,我们业务端也顶着压力,一个劲儿地给我打电话。

(2)中午12:30点,coco回到公司,立马开电脑开始排查,让他们重新推送消息,查看日志,发现我们根本没有消费到。初步判断,应该不是我们客户端的问题,初步定位原因:a.网络问题;b.网络丢包;c.生产者生产机制有问题,实际没有推送过来。

(3)因为之前一直是好好的,近期这个需求也没有做过任何改动,网络也是通的,感觉可能不是网络的问题,但是也要排查,因为这个已经是去年年初的需求了,原熟悉这块业务的人早已离职,所以排查起来有点慢。我们公司在合作公司面前又没多大话语权,每次有问题都是直接甩锅给我们,每次排查出来都是他们的问题。这次,我让他们先排查自身问题,他们依然说,不是他们的原因等等。

(4)网络排查:根据代码,查出我们连接生产者zookeeper的集群地址。然后我找到我们应用所在主机IP。ping了下是通的。但是telnet端口的时候明显就不通了,很明显的网络问题啊。截图给对方,他们依然不认,说自己测试都是ok的,coco此时心里真的是一万个mmp啊,然而,脸上还要笑嘻嘻……为啥之前一直通的,突然就有问题了呢,让对方研发问他们那边最近有没有做过网络调整,那哥们直接说没有……涉及公司与公司间的网络权限,肯定要走流程去申请啦。我就去找我们这边网络组的老大,把事故简要地说明了下,他说,合作方公司前几天有下线过一批主机呀,我联系他们,包不包含这几台,此刻,我的心里大石头终于放下了,找对人了。

ping的结果:

telnet的结果:

(5)后来,在这个leader、我们项目经理的协调下,找了对方公司的网管,确认是他们近期做了网络调整导致的。然后,对方公司对接人去提了网络申请,该问题算是初步得到了解决,下午2:40左右,网络给打开了,但是我们依然没有收到消息,他们又重新推送了一条,依然没有接收到。

(6)分析我们消费端的代码,处理业务bean上实现的是 InitializingBean类,在初始化bean的时候都会执行该方法。所以,我们这边的应用需要重启才行。于是,我又申请重启应用,因为是核心应用,只能等到晚上才能重启。

(7)晚上8点左右,应用重启了,可是,依然没有消费到消息,理论上他们生产的消息没有消费,我们是直接可以消费的啊,这个还需要后续查看。我又联系他们重新推送了几条数据,我这边可以消费了。然后他们全量推送了下,该问题得到初步解决。

(8)为什么积压的消息我们消费不到,仍在研究中。

(9)对于此类初始化时候执行的方法,如果中途有类似网络问题,该如何处理?

结论:

对于生产正在用的接口,一直好好的,突然出问题,如果是全量问题,首先要排查网络问题,如果是部分数据有问题,则要考虑是否是网络丢包,是否是消息丢失。

复盘:

其实,这个问题真的从根源上解决了吗?并没有,根据生产日志,查询得知,自6.5日开始,就没有消费过消息了,说明6.5号就有问题了啊。我们系统也没有报异常,没有通知到负责人,为什么消费者连不上生产者zookeeper主机的时候,仍不报异常呢,这个coco还在排查。

  ConsumerConfig conf = new ConsumerConfig(props);
//连不通但是没有报异常
ConsumerConnector consumer = kafka.consumer.Consumer.createJavaConsumerConnector(conf);

 代码:

记一次生产kafka消息消费的事故的更多相关文章

  1. 在线elasticsearch集群批量写入变慢,导致kafka消息消费延迟

    写入报错如些: -- ::24.166 [elasticsearch[_client_][listener][T#1]] INFO com.mobanker.framework.es.Elastics ...

  2. RockerMQ消息消费、重试

    消息中间件—RocketMQ消息消费(一) 消息中间件—RocketMQ消息消费(二)(push模式实现) 消息中间件—RocketMQ消息消费(三)(消息消费重试) MQ中Pull和Push的两种消 ...

  3. Kafka无法消费?!我的分布式消息服务Kafka却稳如泰山!

    在一个月黑风高的夜晚,突然收到现网生产环境Kafka消息积压的告警,梦中惊醒啊,马上起来排查日志. 问题现象:消费请求卡死在查找Coordinator Coordinator为何物?Coordinat ...

  4. 实际业务处理 Kafka 消息丢失、重复消费和顺序消费的问题

    关于 Kafka 消息丢失.重复消费和顺序消费的问题 消息丢失,消息重复消费,消息顺序消费等问题是我们使用 MQ 时不得不考虑的一个问题,下面我结合实际的业务来和你分享一下解决方案. 消息丢失问题 比 ...

  5. Spring Cloud Stream如何消费自己生产的消息?

    在上一篇<Spring Cloud Stream如何处理消息重复消费>中,我们通过消费组的配置解决了多实例部署情况下消息重复消费这一入门时的常见问题.本文将继续说说在另外一个被经常问到的问 ...

  6. kafka消息的分发与消费

    关于 Topic 和 Partition: Topic: 在 kafka 中,topic 是一个存储消息的逻辑概念,可以认为是一个消息集合.每条消息发送到 kafka 集群的消息都有一个类别.物理上来 ...

  7. rabbitMQ应用,laravel生产广播消息,springboot消费消息

    最近做一个新需求,用户发布了动态,前台需要查询,为了用户读取信息响应速度更快(MySQL很难实现或者说实现起来很慢),所以在用户动态发布成功后,利用消息机制异步构建 redis缓存 和 elastic ...

  8. Spring Cloud Stream如何消费自己生产的消息

    在上一篇<Spring Cloud Stream如何处理消息重复消费>中,我们通过消费组的配置解决了多实例部署情况下消息重复消费这一入门时的常见问题.本文将继续说说在另外一个被经常问到的问 ...

  9. 公司内部一次关于kafka消息队列消费积压故障复盘分享

    背景现象 1.20晚上8点业务线开始切换LBS相关流量,在之后的1个小时时间内,积压量呈上升趋势,一路到达50W左右,第二天的图没贴出具体是50W数字,以下是第一天晚上的贴图部分. 现象一: 现象二: ...

随机推荐

  1. Sitecore性化 - 您需要了解的4件事

    Sitecore非常强大,是一个数字体验平台.它可以帮助您取悦并留住客户.它可以帮助您衡量和评估广告系列.它使你成为一个更好的营销人员.它可以帮助您获得结果! 它结合了易于使用的网站内容管理系统和数字 ...

  2. MySQL常用系统表汇总

    在这篇文章中: MySQL5.7 默认模式 Information_schema performance_schema mysql sys MYSQL SHOW 命令 致谢 概述 本篇文章虽大部分内容 ...

  3. Prometheus PromSQL 常用资源

    Prometheus PromSQL 常用资源 PromSQL 使用 运算乘:*除:/加:+减:- 函数 sum() 函数:求出找到所有value的值 irate() 函数:统计平均速率 by (标签 ...

  4. Redis(七)持久化(Persistence)

    前言 前文中介绍到Redis时内存的K-V数据结构存储服务器.Redis的高性能原因之一在于其读写数据都是在内存中进行.它的架构实现方式决定了Redis的数据存储具有不可靠性,易丢失,因为RAM内存在 ...

  5. ECS上搭建Docker(CentOS7)

    ECS上搭建Docker(CentOS7) centos下 yum快速安装maven ## 安装jdk8 yum install -y java-1.8.0-openjdk* ## 安装maven w ...

  6. 在Visual studio上发布web项目,并添加到IIS服务器上。

    1.首先发布到IIS上 https://blog.csdn.net/kydkong/article/details/49563193 2.NET4.0部署出错HTTP 错误500.21 - Inter ...

  7. 前后端分离项目Vue+drf开发部署总结

    思维导图xmind文件:https://files-cdn.cnblogs.com/files/benjieming/%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A ...

  8. Django模板系统:Template

    一.模板常用语法 1.1 变量 符号:{{ }} 表示变量,在模板渲染的时候替换成值 使用方式:{{ 变量名 }}:变量名由字母数字和下划线组成 点(.)在模板语言中有特殊的含义,用来获取对象的相应属 ...

  9. token安全之任意密码重置

    前言 偶然间挖了一个漏洞是密码重置,挖掘过程很有趣,可以参考下. 挖掘过程 在说明之前我们可以先走下正常流程,这样才方便查漏~ 正常流程 第一步骤: 正常填写完,点击下一步发送请求: POST /[U ...

  10. Cocos Creator 返回字符串长度(字符),汉字计数为2

    function strLength(str) { var a = 0; for (var i = 0; i < str.length; i++) { if (str.charCodeAt(i) ...