kafka:序列化时的消息大于使用max.request.size配置配置的最大请求大小

mefy6pfw  于 2021-06-07  发布在  Kafka
关注(0)|答案(3)|浏览(1346)

获取以下错误(kafka 2.1.0):
2018-12-03 21:22:37.873错误37645---[nio-8080-exec-1]o.s.k.support.loggingproducerlistener:发送密钥为null且负载为‘{82,73,70,70,36,96,19,0,87,65,86,69,102,109,116,32,16,0,0,1,0,1,0,68,-84,…'to topic received_sound:org.apache.kafka.common.errors.recordtoolargeexception:消息序列化时为1269892字节,大于使用max.request.size配置配置的最大请求大小。
我尝试了各种各样的建议。
我的producer.properties:

max.request.size=41943040
message.max.bytes=41943040
replica.fetch.max.bytes=41943040
fetch.message.max.bytes=41943040

服务器属性:

socket.request.max.bytes=104857600
message.max.bytes=41943040
max.request.size=41943040
replica.fetch.max.bytes=41943040
fetch.message.max.bytes=41943040

producerconfig(Spring Boot):

configProps.put("message.max.bytes", "41943040");
configProps.put("max.request.size", "41943040");
configProps.put("replica.fetch.max.bytes", "41943040");
configProps.put("fetch.message.max.bytes", "41943040");

消费者配置(springboot):

props.put("fetch.message.max.bytes", "41943040");
props.put("message.max.bytes", "41943040");
props.put("max.request.size", "41943040");
props.put("replica.fetch.max.bytes", "41943040");
props.put("fetch.message.max.bytes", "41943040");

我还将最后两个文件中的字符串改为数字。多次启动代理,并创建新的主题。我正准备 org.apache.kafka.common.errors.RecordTooLargeException: The request included a message larger than the max message size the server will accept 最初的错误,通过这些更改得到了修复,但仍然没有这个新错误的运气。

dy2hfwbg

dy2hfwbg1#

如果kafka属性是服务器上的文件,则可以更改消息大小。
对于默认的sever.property文件


# /usr/local/kafka/config

# message.max.bytes=26214400

生产者属性->


# the maximum size of a request in bytes

# max.request.size=26214400

conusmer也一样

f0brbegy

f0brbegy2#

在中设置断点 KafkaProducer.ensureValidRecordSize() 看看发生了什么。
使用此应用程序

@SpringBootApplication
public class So53605262Application {

    public static void main(String[] args) {
        SpringApplication.run(So53605262Application.class, args);
    }

    @Bean
    public NewTopic topic() {
        return new NewTopic("so53605262", 1, (short) 1);
    }

    @Bean
    public ApplicationRunner runner(KafkaTemplate<String, String> template) {
        return args -> template.send("so53605262", new String(new byte[1024 * 1024 * 2]));
    }

}

我明白了
序列化时,消息为2097240字节,大于使用max.request.size配置配置的最大请求大小。
如预期的那样;当我加上

spring.kafka.producer.properties.max.request.size=3000000

(这相当于您的配置,但使用spring引导属性),我得到
请求包含的消息大于服务器将接受的最大消息大小。
如果调试没有帮助,也许你可以发布一个完整的小程序,展示你看到的行为。

o7jaxewo

o7jaxewo3#

您应该这样在producer中设置config

Props.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG, "41943040");

相关问题