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

时间:2018-12-04 03:27:23

标签: apache-kafka kafka-consumer-api kafka-producer-api spring-kafka

出现以下错误(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、0、1、0、1、0,   68,-84,...”到主题recived_sound:org.apache.kafka.common.errors.RecordTooLargeException:序列化时消息为1269892字节,大于   您使用max.request.size配置的最大请求大小   配置。

我尝试了各种SO帖子中的所有建议。

我的Producer.properties:

_mm512_loadu_epi64

Server.properties:

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

ProducerConfig(春季启动):

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

ConsumerConfig(SpringBoot):

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");

我还在最后2个文件中将字符串更改为数字。多次启动经纪人,并创建了新主题。最初,我遇到了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"); 错误,这些错误已解决了这些错误,但新错误仍然使我不走运。

3 个答案:

答案 0 :(得分:2)

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 Boot属性),我得到

  

该请求包含的消息大于服务器将接受的最大消息大小。

如果调试无济于事,也许您可​​以发布一个完整的小型应用程序,展示您所看到的行为。

答案 1 :(得分:0)

如果Kafka属性是服务器上的文件,则可以更改邮件大小。

用于默认的sever.property文件

#/usr/local/kafka/config
#message.max.bytes=26214400

producer.properties->

# the maximum size of a request in bytes
# max.request.size=26214400

与消费者相同

答案 2 :(得分:0)

您应该以这种方式在生产者中设置配置

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