记一次生产kafka消息消费的事故

事故背景:微信

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

排查过程:运维

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

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

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

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

ping的结果:blog

telnet的结果:接口

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

(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);

 

 代码:

相关文章
相关标签/搜索