web-dev-qa-db-fra.com

Kafka: Le message une fois sérialisé est plus grand que la taille de requête maximale que vous avez configurée avec la configuration max.request.size

Obtention de l'erreur suivante (Kafka 2.1.0):

2018-12-03 21: 22: 37.873 ERREUR 37645 --- [nio-8080-exec-1] osksupport.LoggingProducerListener: exception levée lors de l'envoi d'un message avec key = 'null' et payload = '{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 ,. .. 'à la rubrique recieved_sound: org.Apache.kafka.common.errors.RecordTooLargeException: le message fait 1269892 octets lorsqu'il est sérialisé, ce qui est supérieur à la taille de requête maximale que vous avez configurée avec la configuration max.request.size.

J'ai essayé toutes les suggestions dans divers SO posts.

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

J'ai également changé les chaînes en nombres dans les 2 derniers fichiers. A lancé plusieurs fois des courtiers et créé de nouveaux sujets. Je devenais org.Apache.kafka.common.errors.RecordTooLargeException: The request included a message larger than the max message size the server will accept erreur initiale, qui a été corrigée par ces changements, mais toujours pas de chance avec cette nouvelle erreur.

5
sapy

Définissez un point d'arrêt dans KafkaProducer.ensureValidRecordSize() pour voir ce qui se passe.

Avec cette appli

@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]));
    }

}

Je reçois

Le message fait 2097240 octets lorsqu'il est sérialisé, ce qui est supérieur à la taille de requête maximale que vous avez configurée avec la configuration max.request.size.

comme prévu; quand j'ajoute

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

(qui est l'équivalent de votre configuration mais en utilisant les propriétés de Spring Boot), je reçois

La demande comprenait un message plus grand que la taille maximale de message que le serveur accepterait.

Si le débogage n'aide pas, vous pouvez peut-être publier une petite application complète qui présente le comportement que vous voyez.

2
Gary Russell

Vous pouvez modifier la taille du message si Kafka est un fichier sur un serveur.

pour le fichier sever.property par défaut

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

producteur.properties->

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

idem pour conusmer

1
Adesh

Vous devez définir la configuration dans le producteur de cette manière

Props.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG, "41943040");
0
YOGESH UKALE