Google Guava中EventBus使用不当会导致什么故障?

本文讲述了在4.26日凌晨3点,由于Google Guava的EventBus使用不当,导致kafka消费变慢,进而引发用户聊天室状态更新延迟,甚至IM长链接断开的问题。排查过程排除了kafka、网络问题,最终发现是EventBus的SynchronizedSubscriber在没有声明@AllowConcurrentEvents的情况下,多线程竞争锁导致的性能下降。解决方案包括去除EventBus、优化线程池或添加注解支持并发执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一、故障描述

4.26号凌晨3点业务服务开始报警,现象表现为消费用户消息的kafka集群出现堆积,导致用户在聊天室房间内的状态更新延迟,最终用户在聊天室房间的IM长链接断开,用户在聊天室中无法发消息,无法上麦。

在问题排查过程中,了解问题流程图如下:

其中主要分为5个模块,分别为:用户、im长链接器、kafka、im-session服务、api服务。

当用户与im-connector建立完长链接以后,用户进入、退出聊天室以及与聊天室的心跳事件均会通过im-connector写入下游的kafka中。

im-sesion服务主要负责消费kafka中的用户事件消息,并写入用户的session信息中,当kafka到im-session这个消费链路出现问题以后,用户在聊天室的session信息错误,导致用户通过api拉取的session信息错误,最终导致了故障。

分析完整体流程以后,其中问题也就主要定位在kafka与消费kafka的im-session之间,im-session消费kafka数据变慢,导致im-session更新用户房间状态延迟,kafka消息积压,进而导致故障产生。

二、排查可能的原因

通过上述分析,我们考虑到是kafka消费慢导致的问题主要涉及三方面可能的原因,于是主要通过以下三个方面来排查问题:

  • kafka本身问题,导致consumer拉取消息慢的问题

  • 消费者问题,im-session服务消费慢导致消息延迟的问题

  • 网络问题,消息从kafka到consumer之间网络延迟的问题

2.1 kafka问题?

首先我们考虑会不会是kafka自身问题导致,如果是kafka本身出现问题,比如同步数据过程导致磁盘io增加,拉取kafka数据变慢也是有可能的,或者是topic分区离线等也会导致积压问题,于是查看了kafka相关监控信息:

kafka监控:

从上述监控中可以看出,在问题发生时kafka的topic 分区是正常的处于同步状态,没有离线的partition。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值