【发布时间】: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.ms1 分钟-docs.confluent.io/platform/current/installation/configuration/…
标签: apache-kafka apache-kafka-connect kafka-producer-api