我一直在监控 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 秒),但平均值较低(大约 0.3 毫秒)。
CPU 使用率正常,即未达到硬限制。
经纪人可能会以这种方式变得不健康的原因是什么?我还应该关注其他指标吗?
最佳答案
如果您遇到性能突然下降或 CPU 空闲而超时的情况,则您可能正在处理 IO 问题。
最值得关注的指标之一是kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs
。如果您发现日志刷新率或日志刷新延迟增加,则意味着 Kafka 在写入磁盘时出现问题。
在我们的例子中,页面缓存刷新过于频繁,导致写入 iops 激增,而平均 io 请求大小却下降。由于我们使用具有突发余额的 EBS 实例,重复写入会耗尽我们的突发存储桶并导致请求队列堆积。
关于apache-kafka - Kafka Broker请求队列激增,导致Streams超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47685901/