代码之家  ›  专栏  ›  技术社区  ›  kellanburket

Kafka broker请求队列峰值,导致流超时异常

  •  2
  • kellanburket  · 技术社区  · 8 年前

    我一直在监视由4台机器组成的卡夫卡集群上的指标。我有一个输入应用程序将消息写入Kafka,还有两个Kafka流应用程序处理这些消息,并将它们写回一个由地理位置变量划分的新Kafka主题。

    集群将在一段不确定的时间内(通常是两天或三天)无任何问题地运行,指标中没有任何可疑的报告,然后不知从何而来的指标 kafka.network:type=RequestChannel,name=RequestQueueSize 将从不超过10个请求的最大值激增到50或60个请求,但仅在单个代理上。这最终导致Kafka流中的生产者请求队列在几分钟内建立并超时(目前我没有复制主题)。

    此外,如果我重新启动Streams应用程序,代理请求队列会再次快速建立。

    它似乎涉及特定的请求,但并非所有请求都基于 kafka.network:type=RequestMetrics,name=RequestQueueTimeMs (约为2秒),但平均值较低(约为0.3毫秒)。

    CPU使用率正常,即未达到硬限制。

    经纪人以这种方式变得不健康的原因是什么?我是否应该查看其他指标?

    1 回复  |  直到 8 年前
        1
  •  3
  •   kellanburket    8 年前

    如果您遇到性能突然下降或CPU空闲超时,您可能正在处理IO问题。

    最好的衡量标准之一是 kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs . 如果您看到日志刷新率或日志刷新延迟增加,则意味着Kafka在写入磁盘时遇到问题。

    在我们的例子中,页面缓存被刷新得太频繁,导致写入iops激增,而平均io请求大小下降。由于我们使用的是具有突发平衡的EBS实例,重复写入会耗尽我们的突发存储桶,并导致请求队列增加。