apache-kafka - Kafka Broker请求队列激增,导致Streams超时异常

标签 apache-kafka jmx apache-kafka-streams

我一直在监控 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/

相关文章:

apache-kafka - Python librdkafka Producer 与 native Apache Kafka Producer 执行

elasticsearch - 我可以在Logstash和Elasticsearch之间使用Kafka吗? (使用两个卡夫卡)

java - 如何找到远程系统的 CPU 负载

apache-kafka-streams - Spring Cloud Kafka Streams Binder 运行状况为 "UNKNOWN"

apache-kafka - Kafka 流 Ksql Json

java - 卡夫卡 : events published from the host machine are not consumed by the application running in Docker

spring-boot - Kafka、Spring Kafka 和重新传递旧消息

java - 访问远程 MBean 服务器

java - 关于 JMX 示例的问题

apache-kafka-streams - Kafka Ktable 查询