生产环境消费kafka消息异常问题分析
  skA6WysNXsa9 2023年11月09日 45 0

问题描述:

某个客户在针对生产环境中,对ECIF数据库同步改造为使用kafka进行数据同步后,测试环境也偶尔发生消费数据存在空的问题,当时以为是调度系统间隔太慢,导致数据没有读取到,但是在上线之后,生产存在同样的问题,无法消费消息数据;

问题分析:

1.由于问题比较突然,对于kafka的问题分析需要结合消费端和生产端以及服务节点同时分析。

生产环境消费kafka消息异常问题分析_数据

2.首先经过现场运维得知,kafka的集群环境并不是新搭建的,之前就一直正常使用,只是给本次业务系统上线增加了一个新的topic,然后对接消费端和服务端;

3.所以大概率排除了由于环境搭建引起的问题,本身运维对开发会涉及的问题也不太清楚,所以尽可能少的牵扯到运维的过程问题是有必要的;

4.由于问题的现象是业务系统作为消费端,无法拿到服务节点中的数据,所以需要证明,队列中是否存在数据;

5.使用命令(以下命令,需要运维检查理财对应的队列中数据的情况,将地址换成具体的生产IP和端口)

kafka-consumer-groups.sh --bootstrap-server XXX.XXX.XXX.XXX:9092 --describe --group defaultConsumerGroup

来查看消息的情况:

生产环境消费kafka消息异常问题分析_kafka_02

对应业务获取topic下的消息堆积情况

6.通过运维查找结果,看到队列中存在消息堆积的都是和理财相关的节点,此时问题基本上是消费端的概率比较大。

7.这个问题比较棘手的是,生产上不能随意进行分析和调试,好在测试环境有可以复现这个问题的情况。

8.所以需要紧急在测试环境进行问题复现,然后进行可能出现的问题进行分析。

9.由于代码中使用的是kafka的架构,调用客户端的接口进行连接和数据的消费获取,如果想了解这个过程中,具体的运行流程,通常我们需要看是否有相关的日志.

10.但是由于开发过程中单元测试没有问题,可以正常获取消息,基本上没有打印出kafka架构下的相关日志。

11.所以需要针对kafka框架层输出详细日志,修改配置文件(日志级别为all):

<logger name="org.apache.kafka.clients" level="all" additivity="false"> <appender-ref ref="ERRLog" /> <appender-ref ref="CONSOLELog" /> <appender-ref ref="BSINLog" /> <appender-ref ref="ROLLINGLog"/> </logger>

12.协助现场开发增加以上的kafka架构层的日志输出,进行详细的问题分析:

生产环境消费kafka消息异常问题分析_运维_03

消费接收请求received耗时比对

13.通过详细的日志大致分析,怀疑存在消费过程中,客户端发送请求到服务端获取信息,接收到应答的时间比较长,中间相差了十多秒,所以明显是服务端反馈应答时间非常长;

生产环境消费kafka消息异常问题分析_运维_04

trace跟踪框架日志分析

14.通过以上日志,初步怀疑在客户端获取相关的集群信息过程中,存在相对缓慢的情况,并且在开发代码的过程中,发现代码中有相关的超时时间的设置:

生产环境消费kafka消息异常问题分析_kafka_05

代码中的超时时间设置为3秒

15.由于此配置time时间是3秒,明显要比上面日志中的间隔时间要小的多,所以可能是由于环境本身的问题,这个过程需要的时间目前是大于配置超时时间的,所以让现场开发将时间配置到30秒,再进行测试。

16.通过调整超时时间变大后,发现这问题消失了,从而可以得知,这个问题就是这个超时时间太小,导致在获取集群信息过程还没正确应答消息,客户端的调用就超时结束了后续的读取动作。

17.总结,以上问题是借助了详细的框架日志分析出了具体的交互过程,从而排查出问题出在服务端处理慢,导致超时无法拿到后续的应答数据做处理;

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月09日 0

暂无评论

推荐阅读
skA6WysNXsa9