Kafka - 代理:消息大小太大



当我尝试发送超过 1 Mb 大小的消息时,我得到Message size too large异常。当我尝试生成消息时,该错误出现在我的客户端应用程序中。经过一番谷歌搜索,我发现应该更改设置以增加最大消息大小。好吧,我在/kafka/config/server.properties文件中做到了。我添加了接下来的 2 个设置:

message.max.bytes=15728640
replica.fetch.max.bytes=15728640

此外,我fetch.message.max.bytes=15728640添加到/kafka/config/consumer.properties文件中。所有其他设置保持默认值。

我重新启动了kafka服务器,但仍然遇到相同的错误。

P.S Kafka 版本是 1.1.0。

您有正确的配置,但是您还需要在生产者端设置max.request.size

props.put(ProducerConfig.MAX_REQUEST_SIZE_CONFIG, 15728640);

max.request.size请求的最大大小(以字节为单位(。此设置将限制生成者将发送的记录批次数 在单个请求中,以避免发送大量请求。这实际上也是对最大记录批大小的上限。

在代理端,您已经配置了以下应该有效的参数

message.max.bytesKafka 允许的最大记录批大小。

replica.fetch.max.bytes要尝试为每个分区获取的消息字节数。这不是绝对最大值,如果 提取的第一个非空分区中的第一个记录批次是 大于此值,记录批处理仍将返回到 确保能够取得进展。最大记录批大小 代理接受通过 message.max.bytes 定义(代理 config(或max.message.bytes(topic config(。

在主题端max.message.bytes,如果您已经在代理端设置了message.max.bytes,则不需要

max.message.bytes- 这是代理消息的最大大小 将允许附加到主题。此大小经过验证 预压缩。(默认为代理的消息.max.bytes。

参考 https://kafka.apache.org/documentation/

我认为您可能还需要设置 batch.size。

我遇到了类似的问题。我用max.message.bytes=4096创建了一个主题,并使用kafka-producer-perf-test.sh进行测试。我也设置了max.request.size=4096,但它似乎确实可以正常工作。

如果我只说一条消息,那很好。

./kafka/bin/kafka-producer-perf-test.sh --producer-props bootstrap.servers=localhost:9092 max.request.size=4096 --record-size 4008 --topic test-4K-1RF-topic-0 --num-records 1 --throughput 1

如果我只处理多条消息,我会得到MESSAGE_TOO_LARGE错误。

./kafka/bin/kafka-producer-perf-test.sh --producer-props bootstrap.servers=localhost:9092 max.request.size=4096 --record-size 4008 --topic test-4K-1RF-topic-0 --num-records 2 --throughput 1

所以我想这是关于批量大小的。然后,我找到了batch.size

所以下面的代码片段现在可以工作了!

./kafka/bin/kafka-producer-perf-test.sh --producer-props bootstrap.servers=localhost:9092 batch.size=4096 --record-size 4008 --topic test-4K-1RF-topic-0 --num-records 200 --throughput 10

编辑:我认为max.request.size是限制生产者发送给 Kafka 经纪人的包的大小。一个包可以包含多个批次。批量大小受batch.size的限制。

最新更新