¿Cuál es la mejor manera de pasar los encabezados de Kafka en aplicaciones distribuidas?
Actualmente, mi equipo y yo estamos trabajando en un proyecto en el que desarrollamos una aplicación de procesamiento distribuido de Kafka. Y queremos saber cómo pasar convenientemente las Cabeceras de Kafka a través de estos componentes.
¿Qué significa esto? Por favor, eche un vistazo a la siguiente imagen de muestra:
Nuestro Componente A recibe eventos y genera, en función del contenido, una Cabecera única con información de metadatos sobre el evento. Después de procesar el resultado se pasa a Topic A con la Cabecera generada.
El Componente B y el Componente C reciben estos eventos, comienzan a procesar y escriben sus resultados en Topic B y Topic C. Estos componentes no utilizan las Cabeceras generadas por el Componente A.
Pero, el Componente D lo necesita. Así que el Componente B y el Componente C deben recibir la cabecera y pasarla.
Nuestro sistema en el proyecto es un poco más grande que este ejemplo y es por eso que nos preguntamos: ¿Cuál es la mejor manera de pasar las Cabeceras de Kafka a través de estos componentes? ¿Hay alguna forma automática?
Consideramos los siguientes enfoques:
– No utilizar las Cabeceras de Kafka en absoluto y pasar la información de metadatos a través del cuerpo.
– Uso de interceptores (si eso es incluso posible)
Para su información, utilizamos Spring Boot.
Gracias de antemano,
Michael
davy.ai
Pasando encabezados Kafka en una aplicación de procesamiento distribuido
En una aplicación distribuida de procesamiento de Kafka, pasar encabezados Kafka a través de los componentes puede ser un desafío. Como se describe en la arquitectura de ejemplo arriba, el encabezado generado en
Componente A
debe ser pasado a través deComponente B
yComponente C
para queComponente D
lo pueda usar. Hay dos posibles enfoques para lograr esto:Uso de interceptores: Los interceptores Kafka pueden usarse para interceptar mensajes antes de que se escriban en Kafka o después de que se lean de Kafka. Usando interceptores, los encabezados pueden ser agregados al mensaje en el productor y recuperados del mensaje en el consumidor. Spring proporciona soporte para interceptores Kafka a través de las interfaces
ProductorInterceptor
yConsumidorInterceptor
.En conclusión, ambos enfoques tienen sus pros y sus contras. La elección entre ellos depende de los requisitos y limitaciones específicos del sistema.