Kafka broker请求队列尖峰,导致Streams超时异常
Kafka broker request queue spikes, causing Streams timeout exception
我一直在监控 4 台机器的 Kafka 集群的指标。我有一个输入应用程序将消息写入 Kafka 和几个 Kafka Streams 应用程序处理这些消息并将它们写回到由地理位置变量分区的新 Kafka 主题。
集群将 运行 在一段不确定的时间(通常是两三天)内没有任何问题,指标中没有任何可疑报告,然后指标 kafka.network:type=RequestChannel,name=RequestQueueSize
无处不在将从不超过 10 个请求的最大值激增到 50 或 60 个请求,但仅限于单个代理。这最终导致 Kafka Streams 中的生产者请求队列在几分钟内建立并超时(目前我没有复制主题)。
此外,如果我重新启动 Streams 应用程序,代理请求队列会再次快速建立起来。
看起来它涉及特定请求,但并非所有请求都基于 99% 的高百分位数
kafka.network:type=RequestMetrics,name=RequestQueueTimeMs
(大约 2 秒)但平均值较低(大约 .3 毫秒)。
CPU 使用正常,即没有达到硬限制。
经纪人可能以这种方式变得不健康的原因有哪些?我应该查看其他指标吗?
如果您遇到性能突然下降或超时 CPU 备用,您可能正在处理 IO 问题。
要查看的最佳指标之一是 kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs
。如果您看到日志刷新率或日志刷新延迟增加,则表示 Kafka 写入磁盘时出现问题。
在我们的例子中,我们的页面缓存被刷新得太频繁,导致我们的写 iops 激增,而我们的平均 io 请求大小下降。由于我们使用的是具有突发余额的 EBS 实例,因此重复写入会耗尽我们的突发存储桶并导致我们的请求队列堆积。
我一直在监控 4 台机器的 Kafka 集群的指标。我有一个输入应用程序将消息写入 Kafka 和几个 Kafka Streams 应用程序处理这些消息并将它们写回到由地理位置变量分区的新 Kafka 主题。
集群将 运行 在一段不确定的时间(通常是两三天)内没有任何问题,指标中没有任何可疑报告,然后指标 kafka.network:type=RequestChannel,name=RequestQueueSize
无处不在将从不超过 10 个请求的最大值激增到 50 或 60 个请求,但仅限于单个代理。这最终导致 Kafka Streams 中的生产者请求队列在几分钟内建立并超时(目前我没有复制主题)。
此外,如果我重新启动 Streams 应用程序,代理请求队列会再次快速建立起来。
看起来它涉及特定请求,但并非所有请求都基于 99% 的高百分位数
kafka.network:type=RequestMetrics,name=RequestQueueTimeMs
(大约 2 秒)但平均值较低(大约 .3 毫秒)。
CPU 使用正常,即没有达到硬限制。
经纪人可能以这种方式变得不健康的原因有哪些?我应该查看其他指标吗?
如果您遇到性能突然下降或超时 CPU 备用,您可能正在处理 IO 问题。
要查看的最佳指标之一是 kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs
。如果您看到日志刷新率或日志刷新延迟增加,则表示 Kafka 写入磁盘时出现问题。
在我们的例子中,我们的页面缓存被刷新得太频繁,导致我们的写 iops 激增,而我们的平均 io 请求大小下降。由于我们使用的是具有突发余额的 EBS 实例,因此重复写入会耗尽我们的突发存储桶并导致我们的请求队列堆积。