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.
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.
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
Vous devez définir la configuration dans le producteur de cette manière
Props.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG, "41943040");