Spring Kafka - 生产者:尝试发送长消息时出现超时异常

Spring Kafka - Producer: TimeoutException when trying to send long message

我正在尝试通过 Kafka 发送通常大小为 2mb 的 base64 编码字符串。我已经配置 Spring Kafka 生产者如下:

@Bean
public ProducerFactory<String, String> producerFactory() {
    Map<String, Object> configProps = new HashMap<>();
    configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
    configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    configProps.put(ProducerConfig.MAX_REQUEST_SIZE_CONFIG, 4194304);
    configProps.put(ProducerConfig.BATCH_SIZE_CONFIG, 1);
    configProps.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, "snappy");
    return new DefaultKafkaProducerFactory<>(configProps);
}

我不断收到以下错误:

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

我尝试过的事情:

configProps.put(ProducerConfig.REQUEST_TIMEOUT_MS_CONFIG, 90000);

还有

configProps.put(ProducerConfig.BATCH_SIZE_CONFIG, 10);

还有

configProps.put(ProducerConfig.BATCH_SIZE_CONFIG, 0);

在自动创建主题时连接到 kafka 代理。即使在尝试上述修复的各种组合后,该错误仍然存​​在。

也尝试设置此 属性:

configProps.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 120000);

这应该能很好地工作,因为当前配置的消息大小更大,您需要进一步扩展它。