Al crear un sistema distribuido tolerante a fallas en cualquier momento, debe agregar la entrega tolerante a fallas en varios lugares, en la biblioteca utilizada por el productor y el consumidor, así como en la capa de intermediario. Apache Kafka se creó para resolver estos problemas y, a partir de la versión 0.8, lo hace de forma eficaz (baja latencia). Neha Narkhede dio una buena charla tecnológica sobre las características de Kafka 0.8 en LinkedIn, pero no sé si ese video o uno similar está disponible públicamente.
Para simplificar la imagen, imagine que tiene 1 tema con 1 fragmento y 3 corredores (es decir, 3 réplicas). Cada corredor debe ver cada mensaje mientras está vivo. La parte “viva” es importante, porque los corredores pueden fallar o simplemente reiniciarse por mantenimiento. Mientras eso sucede, el clúster aún debe funcionar ya que se está ejecutando un quórum (2 corredores).
Esencialmente, cuando un productor publica un mensaje, el productor no debe recibir un ACK de que su mensaje se publicó con éxito hasta que un quórum (mayoría) de servidores de intermediario reciba el mensaje y lo confirme.
- ¿Pueden los ISP manipular el uso de datos (por ejemplo, cuando descargas 3 MB, tu uso de datos se convierte en 4 MB)?
- ¿Qué hacen los dos cables que cruzan la carretera y cómo funcionan?
- ¿Cuál es el propósito principal del enrutamiento estático en redes?
- ¿Qué son las capas en la red?
- ¿Cuál es la mejor VPN más rápida y barata?
Los servidores de los corredores deben tener un algoritmo en ejecución para sincronizar los mensajes, de modo que eventualmente todos los corredores en vivo vean todos los mensajes.
La biblioteca del consumidor debe poder conectarse a cualquier corredor en cualquier momento y recibir mensajes sobresalientes. En este caso, dado que solo hay un fragmento, el consumidor debe leer todos los mensajes en orden. Esto significa que no puede omitir un mensaje: esta es la detección de brecha de llamada y es una propiedad necesaria de dicho sistema.
Entonces, para responder a su pregunta, el corredor supone que cualquier consumidor puede conectarse a cualquier máquina en cualquier momento. Por lo tanto, el nivel de intermediario debe asegurarse de que sus algoritmos de “sincronización” aseguran que cada réplica de intermediario reciba cada mensaje en orden. La única relajación es que algunas réplicas de corredores podrían estar rezagadas de otros corredores.
Espero que esto ayude.