Кафка: сообщение при сериализации больше, чем максимальный размер запроса, который вы настроили в конфигурации max.request.size - PullRequest
0 голосов
/ 04 декабря 2018

Получение следующей ошибки (Kafka 2.1.0):

2018-12-03 21: 22: 37.873 ОШИБКА 37645 --- [nio-8080-exec-1] osksupport.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, ... 'к теме recceive_sound: org.apache.kafka.common.errors.RecordTooLargeException: сообщение составляет 1269892 байт при сериализации, чтобольше максимального размера запроса, который вы настроили с помощью конфигурации max.request.size.

Я попробовал все предложения в различных сообщениях SO.

My Producer.properties:

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

Server.properties:

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

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

Iтакже изменил строки на числа в последних 2 файлах.Несколько раз запускал брокеров и создавал новые темы.Сначала я получал ошибку org.apache.kafka.common.errors.RecordTooLargeException: The request included a message larger than the max message size the server will accept, которая была исправлена ​​этими изменениями, но все еще не повезло с этой новой ошибкой.

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Вы можете изменить размер сообщения, если свойство Kafka является файлом на сервере.

для файла по умолчанию sever.property

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

Manufacturer.properties ->

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

то же самое для потребителя

0 голосов
/ 01 марта 2019

Вы должны установить конфигурацию в производителе таким образом

Props.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG, "41943040");
0 голосов
/ 04 декабря 2018

Установите точку останова в 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), я получаю

В запрос включено сообщение, превышающее максимальный размер сообщениясервер примет.

Если отладка не помогает, возможно, вы можете опубликовать полное небольшое приложение, которое демонстрирует поведение, которое вы видите.

...