Solución:
Necesita ajustar tres (o cuatro) propiedades:
- Lado del consumidor:
fetch.message.max.bytes
: esto determinará el tamaño más grande de un mensaje que puede obtener el consumidor. - Lado del corredor:
replica.fetch.max.bytes
– esto permitirá que las réplicas en los intermediarios envíen mensajes dentro del clúster y se asegure de que los mensajes se replican correctamente. Si es demasiado pequeño, el mensaje nunca se replicará y, por lo tanto, el consumidor nunca verá el mensaje porque el mensaje nunca se confirmará (se replicará por completo). - Lado del corredor:
message.max.bytes
– este es el tamaño más grande del mensaje que puede recibir el corredor de un productor. - Lado del corredor (por tema):
max.message.bytes
– este es el tamaño más grande del mensaje que el corredor permitirá que se agregue al tema. Este tamaño está validado antes de la compresión. (Por defecto es el del corredormessage.max.bytes
.)
Descubrí por las malas el número 2: no recibe NINGUNA excepción, mensaje o advertencia de Kafka, así que asegúrese de considerar esto cuando envíe mensajes grandes.
Se requieren cambios menores para Kafka 0.10 y el nuevo consumidor en comparación con la respuesta del hombre riendo:
- Agente: Sin cambios, aún necesita aumentar las propiedades
message.max.bytes
yreplica.fetch.max.bytes
.message.max.bytes
tiene que ser igual o menorreplica.fetch.max.bytes
que - .
max.request.size
Productor: Incrementar - para enviar el mensaje más grande.
max.partition.fetch.bytes
Consumidor: Incrementar
para recibir mensajes más grandes. message.max.bytes
replica.fetch.max.bytes
Lea los comentarios para obtener más información sobre
<=
La idea es enviar el mismo tamaño de mensaje desde Kafka Producer a Kafka Broker y luego ser recibido por Kafka Consumer ie Productor de Kafka -> Agente de Kafka -> Consumidor de KafkaSuponga que si el requisito es enviar 15 MB de mensaje, entonces el Productor , los Corredory el
Consumidor , los tres deben estar sincronizados. Productor Kafka envía 15 MB -> Agente de Kafka Permite / almacena 15 MB ->
Consumidor de Kafka
recibe 15 MB
message.max.bytes=15728640
replica.fetch.max.bytes=15728640
Por tanto, el ajuste debería ser:
fetch.message.max.bytes=15728640
a) en Broker:
b) sobre el consumidor: