Kafka 什么时候抛出 BufferExhaustedException?

When does Kafka throw BufferExhaustedException?

org.apache.kafka.clients.producer.BufferExhaustedException: Failed to allocate memory within the configured max blocking time 5 ms.

这表示当生产者无法在配置的最大阻塞时间 5 毫秒内为记录分配内存时抛出异常。

这是我尝试添加 Kafka s3-sink 连接器时显示的内容。两个 kafka broker 中有 11 个主题,并且已经有消费者在场消费这些主题。我正在构建一个 2 节点的 Kafka 连接集群,其中有 11 个连接器试图从这些主题中获取信息。但是当我启动这些 s3-sink 连接器时,出现了一个巨大的错误峰值。一旦我停止了这些连接器,错误就消失了并且似乎没问题。然后我再次以较少的任务启动消费者,这一次当流量突然激增时错误激增,当流量恢复正常时错误又恢复正常。最大重试次数为 5 次,即使在 5 次尝试后仍无法写入消息。

根据我的阅读,这可能是由于生产者批量大小或生产者率高于消费者率。而且我猜想当有突发流量时,每个消费者将占用多达 64 mb。这可能是原因吗?我应该尝试增加阻塞时间吗?

Producer Config:
  lingerTime: 0
  maxBlockTime: 5
  bufferMemory: 1024000
  batchSize: 102400
  ack: "1"
  maxRequestSize: 102400
  retries: 1
  maxInFlightRequestsPerConn: 1000

其实是EC2实例的IOPS提升导致Kafka broker无法处理。增加每次轮询获取的字节数并降低轮询频率修复了它。