我有一个rails应用程序,其中包括API服务器(rails服务器)和Worker服务器(Kaafka服务器)。
我们从 API 服务器发送一些消息到主题 T1(只有 1 个分区),现在 Worker 服务器使用此消息,基于此我们获取一个文件(这将有一个标题行,后面跟着一些值行,大约来自 SFTP 的500,000记录),现在经过一些处理后,我们将文件中的每条记录保存到数据库并将这些记录发送到主题T2(有10个分区)。现在,工作服务器再次从该主题消费,进一步处理每条记录并将其发送到目标主题T3。 这是应用程序的整体工作原理。我们使用 Worker 服务器的多个实例进行并行处理(请注意,并行处理在使用来自 T2 的消息时非常有用)。
现在在生产中出现问题,T1 消费者中的一条消息超时,Karafka 再次重试。 我需要知道为什么会发生超时,所以我在较低的环境中测试了相同的情况,但无法复制该场景。 Karafka 配置中的
max.poll.interval.ms
设置为相当大的数量,并且超时发生在该内部之前。我在生产中也看不到任何错误日志。我检查了 newrelic 上较低环境的系统资源利用率。 Worker 服务器的 CPU 利用率为 100%,持续几分钟,最大内存利用率为 30%。在较低的环境中,每个步骤都已成功处理。
我的疑问是,如果不是因为
max.poll.interval.ms
,是什么导致了这次超时,会不会是因为CPU利用率100%?最初我的假设是由于内存限制而超时。
rails 版本:
7.0.8.1
,
卡拉夫卡版本:2.1.11
如果需要任何其他详细信息,请告诉我。谢谢。
我不确定你所说的“超时”是什么意思。 Karafka 有很多超时,首先,我们应该确定你是否在谈论:
你不清楚这个。
源自 Karafka 的每个错误都有描述并且属于特定类别。错误日志应该对发生的情况有准确的解释。
现在回答你的其余问题:
我需要知道为什么会超时
检查日志。
我在生产中也看不到任何错误日志
Kaafka 将每个错误记录到同一个管道中。如果你找不到错误,说明你的错误跟踪不正确。
难道是因为CPU利用率100%的原因?
如果你的CPU总是被充分利用,Kaafka可能会发生奇怪的事情。与大多数其他软件相同。 Karafka 是一个多线程软件,可以在后台运行许多东西。许多与套接字等相关的超时可能已经开始。尽管如此,日志应该有它。如果不这样做,要么是我提到的日志记录很差,要么是机器过载到无法存储日志的程度。
另外,请记住您运行的是过时版本的 Karafka。 2.1.1 已经有 2.4.0,有许多修复和改进。