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:
- 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).
- Si después de tres días el sistema no puede procesar los eventos, entonces el sistema deja de intentar procesarlos.
- 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.
davy.ai
Sí, es posible gestionar registros DLQ en intervalos utilizando
spring-cloud-stream-kafka
de la siguiente manera:ConsumerRecordRecoverer
e implementar el métodorecover
para almacenar los registros fallidos en el tema DLQ.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.Implementar un mecanismo de reintentos en el microservicio para volver a intentar automáticamente los registros fallidos antes de enviarlos al tema DLQ.
Utilizar la anotación
@StreamListener
para escuchar los temas de entrada de Kafka y procesar los mensajes.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.