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.

Manejar registros de DLQ en Kafka

Tenemos un microservicio que lee registros de varios temas de Kafka. Para cada tema de entrada, tenemos un tema de DLQ separado para almacenar registros que no se pudieron procesar por cualquier motivo (formato de registro no válido, los registros no se pudieron analizar utilizando el esquema Avro, no se pudo conectar a la base de datos, no se pudo llamar al microservicio externo utilizando la API REST, etc.).

El contenido del tema DLQ de Kafka debe procesarse de las siguientes formas:

  1. El sistema intenta procesar los eventos durante tres días en intervalos: una hora después de ingresar a DLQ, tres horas, seis horas, quince horas, veinticuatro horas y otras veinticuatro horas (1 + 2 + 6 + 14 + 24 + 24 = 72 horas).
  2. Si después de tres días el sistema no puede procesar los eventos, entonces el sistema deja de intentar procesarlos.
  3. Después de tres meses desde el último intento, el sistema elimina los eventos.

¿Es posible manejar los registros de DLQ en intervalos como se describe en el primer requisito?

Si no es posible, ¿qué sugieres para cumplir con los requisitos mencionados anteriormente?

Utilizamos spring-cloud-stream-kafka para nuestro microservicio.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible gestionar registros DLQ en intervalos utilizando spring-cloud-stream-kafka de la siguiente manera:

    1. Configurar el tema DLQ utilizando la interfaz ConsumerRecordRecoverer e implementar el método recover para almacenar los registros fallidos en el tema DLQ.
    2. Crear un planificador utilizando la anotación @Scheduled que se ejecuta en los intervalos especificados (1 hora, 3 horas, 6 horas, etc.) para verificar el tema DLQ y reprocesar los registros fallidos.

    3. Implementar un mecanismo de reintentos en el microservicio para volver a intentar automáticamente los registros fallidos antes de enviarlos al tema DLQ.

    4. Utilizar la anotación @StreamListener para escuchar los temas de entrada de Kafka y procesar los mensajes.

    5. Utilizar la anotación @SendTo para enviar los mensajes procesados al tema de salida de Kafka o almacenarlos en la base de datos.

    Con estas configuraciones e implementaciones, el contenido del tema DLQ puede ser procesado en los intervalos especificados como se describe en el primer requisito. En caso de que el sistema no pueda procesar los eventos después de tres días o tres meses, los registros fallidos se eliminarán automáticamente de acuerdo con la configuración de retención del tema de Kafka.

Comments are closed.