Descripción de la configuración de clúster propuesta

  • 2 centros de datos y cada uno tiene un clúster Kafka de 5 nodos
  • Los clústeres tienen los mismos temas y las mismas instancias de productor / consumidor que trabajan con él.
  • No hay replicación de datos entre los clústeres. Entonces, los datos en el Cluster 1 y 2 son distintos
  • No se requiere afinidad de mensajes. [No hará ninguna diferencia funcionalmente si el Productor 1 comenzara a publicar mensajes en el Grupo 2 y viceversa]

Lo que queremos lograr es, digamos que el Productor 1 publica un mensaje de forma asincrónica en el Clúster 1, pero recibe un reconocimiento negativo (después de que se haya agotado el tiempo de espera de reintento). Esto se detecta fácilmente en el método de devolución de llamada del productor

Al recibir este error, usamos otra KafkaTemplate (que tiene detalles del Cluster 2) para ser utilizada por el productor. Ahora el productor intenta publicar el mismo mensaje en el clúster 2 [También se aplica al revés, si el productor 2 no puede publicar localmente, enviará el mensaje al clúster 1]

La ventaja que obtenemos aquí es

  • el mensaje no se pierde y se publica automáticamente en el otro grupo
  • Dado que esta actividad ocurre para cada mensaje, una vez que el Clúster 1 está respaldado, el Productor 1 automáticamente puede enviar mensajes al Clúster 1

Un aspecto negativo que vemos es que estamos manejando la lógica de conmutación por error nosotros mismos produciendo en el clúster secundario en el bloque de manejo de excepciones de tiempo de espera de recuperación de metadatos o en reconocimiento negativo

No pude encontrar ningún lugar en la red que muestre una configuración similar. ¿Hay algo fundamentalmente incorrecto en este enfoque?

enter image description here

1
Mayank Madhav 20 ene. 2021 a las 11:32

1 respuesta

La mejor respuesta

Por supuesto; simplemente configure 2 conjuntos de beans de infraestructura: fábricas de productores y consumidores, fábricas de contenedores, plantillas.

No puede usar la configuración automática de Boot para eso, pero puede definir los beans usted mismo.

1
Gary Russell 20 ene. 2021 a las 14:40