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

 一、故障描述

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。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot使用EventBus需要以下步骤: Step 1: 引入依赖 首先,在pom.xml文件添加相关依赖: ``` <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.0-jre</version> </dependency> ``` Step 2: 创建事件类 然后,创建自定义的事件类,该类包含了需要传递的参数: ```java public class CustomEvent { private String message; public CustomEvent(String message) { this.message = message; } public String getMessage() { return message; } } ``` Step 3: 定义事件监听器 接下来,定义一个事件监听器,该监听器用于处理接收到的事件: ```java @Component public class CustomEventListener { @Subscribe public void handleEvent(CustomEvent event) { String message = event.getMessage(); // 处理事件 } } ``` Step 4: 注册事件监听器 然后,在需要使用EventBus的地方,创建EventBus对象并注册监听器: ```java @SpringBootApplication public class Application { public static void main(String[] args) { ApplicationContext applicationContext = SpringApplication.run(Application.class, args); // 创建EventBus对象 EventBus eventBus = new EventBus(); // 注册监听器 eventBus.register(applicationContext.getBean(CustomEventListener.class)); // 发布事件 eventBus.post(new CustomEvent("Hello, EventBus!")); } } ``` 以上就是在Spring Boot使用EventBus的基本用法。首先需要引入相关的依赖,然后定义事件类和事件监听器,最后在需要的地方创建EventBus对象并注册监听器,然后发布事件即可。当事件被发布时,监听器接收到事件并进行相应的处理。 EventB

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值