【问题标题】:When does Kafka throw BufferExhaustedException?Kafka 什么时候抛出 BufferExhaustedException?
【发布时间】:2021-09-05 17:18:30
【问题描述】:
org.apache.kafka.clients.producer.BufferExhaustedException: Failed to allocate memory within the configured max blocking time 5 ms.

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

这就是我尝试添加 Kafka s3-sink 连接器时所说的内容。两个 kafka 代理中有 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

【问题讨论】:

  • 接收器连接器生产者客户端实际上只会将偏移/配置/状态信息发送回连接主题,因此不会特定于任何 S3 任务
  • 我真的没有使用这么小的 Kafka 集群的经验来真正回答这个问题。我也不确定您是否真的可以从连接器本身修改内部 Connect 框架 Kafka 生产者
  • 生产者/源连接器未在连接集群中运行。只有 s3-sink 连接器正在运行。生产者一直在其他机器中作为单独的进程运行。部署这些 s3 sink 连接器对生产者写入产生了影响。
  • Connect 确实 运行生产者(就像所有消费者一样),不过,这就是我要说的。它需要他们跟踪进度(写回 __consumer_offsets)。如果您在其他机器上有外部生产者,我看不出启动一个解耦的消费者进程会如何导致它们开始抛出异常
  • 无论如何,5ms 远小于默认的max.block.ms 1 分钟-docs.confluent.io/platform/current/installation/configuration/…

标签: apache-kafka apache-kafka-connect kafka-producer-api


【解决方案1】:

这实际上是由于 Kafka 代理无法处理的 EC2 实例的 IOPS 增加所致。增加每次轮询获取的字节数并降低轮询频率可以解决此问题。

【讨论】:

    猜你喜欢
    • 2011-03-22
    • 2011-11-10
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多