Kafka - Broker:消息太大
Posted
技术标签:
【中文标题】Kafka - Broker:消息太大【英文标题】:Kafka - Broker: Message size too large 【发布时间】:2020-04-06 21:08:06 【问题描述】:当我尝试发送超过 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。
【问题讨论】:
你在link看到这个问题了吗? 您是否参考了上述链接中的某些特定点?因为,我完全按照那里的说明进行了配置。我错过了什么吗? 【参考方案1】:您的配置正确,但您还需要在生产者端设置 max.request.size。
props.put(ProducerConfig.MAX_REQUEST_SIZE_CONFIG, 15728640);
max.request.size 请求的最大大小(以字节为单位)。此设置将限制生产者发送的记录批次数 在单个请求中避免发送大量请求。这实际上也是最大记录批量大小的上限。
在代理端,您已经配置了以下应该可以工作的参数
message.max.bytes Kafka 允许的最大记录批量大小。
replica.fetch.max.bytes 尝试为每个分区获取的消息字节数。这不是一个绝对最大值,如果 提取的第一个非空分区中的第一批记录是 大于此值,记录批次仍将返回 确保能够取得进展。最大记录批量大小 代理接受的定义是通过 message.max.bytes (代理 config) 或 max.message.bytes (主题配置)。
在主题端 max.message.bytes 如果您已经在代理端设置了 message.max.bytes,则不需要
max.message.bytes - 这是代理消息的最大大小 将允许附加到主题。此尺寸已验证 预压缩。 (默认为代理的 message.max.bytes。)
参考 https://kafka.apache.org/documentation/
【讨论】:
在客户端为生产者设置 message.max.bytes 是一个窍门。谢谢你,先生!【参考方案2】:我想你可能也需要设置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
所以下面的 sn-p 现在可以工作了!
./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
限制。
【讨论】:
以上是关于Kafka - Broker:消息太大的主要内容,如果未能解决你的问题,请参考以下文章
java——spring boot集成kafka——broker主题分区副本——概念理解
Kafka-常用术语(消息生产者消费者集群broker解释)
Kafka消息队列大数据实战教程-第五篇(Broker工作原理以及节点服役)