es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Máximo valor de max.in.flight.requests.per.connection manteniendo el orden.

max.in.flight.requests.per.connection – Esto controla cuántos lotes
de mensajes enviará el productor al servidor sin recibir
respuestas.

Entonces, asumiendo que tenemos max.in.flight.requests.per.connection = 5. Tenemos enable.idempotence = true. Kafka garantiza el orden con max.in.flight.requests.per.connection <= 5. Kafka almacena números de secuencia para cada mensaje. Y tenemos la siguiente situación con un corredor que falla y se recupera una y otra vez:
1. el mensaje (lote de mensajes) con el número de secuencia 1 tiene mala suerte y siempre se va a reintentar
2. otros mensajes se están confirmado correctamente una y otra vez

El productor recibe respuestas para todos los mensajes, por lo tanto, no sobrecargamos max.in.flight.requests.per.connection
Entonces, el mensaje con s.n. 1 finalmente se confirma, y Kafka parece garantizar el orden (tendrá el primer desplazamiento), incluso si se han confirmado millones de mensajes antes de este primero (suponiendo que tenemos retry = infinity y una gran configuración de tiempo para retry).

¿Por qué 5 es el valor máximo para max.in.flight.requests.per.connection entonces? ¿O por qué la situación descrita es irreal?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la documentación, el valor máximo para max.in.flight.requests.per.connection es de 5, ya que es el valor óptimo para alcanzar el rendimiento máximo sin abrumar la red. Sin embargo, en la situación descrita donde un mensaje con número de secuencia 1 siempre falla y vuelve a intentar, podría haber un retraso de mensajes a la espera de que se comprometa con éxito. Esto podría potencialmente ocasionar que se exceda el límite de max.in.flight.requests.per.connection y llevar a la degradación del rendimiento.

    Además, la configuración enable.idempotence asegura que no se duplican los mensajes, pero no garantiza el orden de los mensajes. En la situación descrita, incluso con la idempotencia habilitada, puede haber la posibilidad de llegada de mensajes fuera de orden, especialmente si el período de reintento se establece en un valor grande.

    Por lo tanto, es importante configurar cuidadosamente los valores de reintento y max.in.flight.requests.per.connection basados en el caso de uso para lograr un rendimiento óptimo y una fiabilidad adecuada.

Comments are closed.