Red de conocimiento informático - Problemas con los teléfonos móviles - Introducción a los conceptos básicos de RocketMQ

Introducción a los conceptos básicos de RocketMQ

Después de nuestra exposición inicial a RocketMQ, descubrimos que es muy diferente de las colas de mensajes tradicionales (como ActiveMQ) que implementan el protocolo JMS, por lo que es necesario explicar algunos de los conceptos.

Como se muestra en la figura, la estructura de implementación básica de RocketMQ se divide en cuatro partes:

Como se muestra en la figura, la estructura de implementación básica de RocketMQ se divide en cuatro partes: Clúster de NameServer, Clúster de Broker, Clúster de Productor y Clúster de Consumidor.

La función de NameServer es actuar como un centro de registro, similar a Zookeeper, pero diferente. Cada nodo de NameServer es independiente entre sí, no hay intercambio de información y no hay problemas como el control maestro o el cambio maestro-esclavo. Por lo tanto, NameServer es más liviano que Zookeeper. Un único nodo de NameServer almacena una lista de Brokers activos (tanto maestros como esclavos), donde activo se define como tener un latido con el NameServer.

Broker es un servidor específico que proporciona servicios. Un único nodo de Broker mantiene conexiones y latidos a largo plazo con todos los nodos de NameServer y registra periódicamente información del tema con NameServer. basado en Netty de.

El intermediario se divide en funciones de estación maestra y estación esclava. Cada estación maestra puede corresponder a múltiples estaciones esclavas, pero una estación esclava solo puede corresponder a una estación maestra. Al especificar el mismo nombre de corredor, diferentes BrokerIds (la estación maestra es 0) se convierten en un grupo. La sincronización entre la estación maestra y la estación esclava se divide en replicación dúplex síncrona y replicación asíncrona. La replicación asíncrona tiene un retraso menor entre el maestro y el esclavo, pero el rendimiento es aproximadamente un 10% mayor que la replicación dúplex síncrona.

Además, hay algunos términos muy importantes en Broker que deben aclararse:

Existen algunas diferencias entre los conceptos de Tema/Cola de RocketMQ y los de Tema/Cola de JMS. Todos los consumidores consumen una copia del mensaje del tema, mientras que los mensajes en la cola los consume solo un consumidor. Pero en RocketMQ, el tema representa una cola de mensajes ordinaria, y la cola es una unidad más pequeña que constituye el tema. La relación entre el tema y la cola se muestra en la siguiente figura

La etiqueta es un tipo de mensaje secundario en el tema (nota: la etiqueta también admite la expresión TagA || TagB), que se puede usar para filtrar mensajes según las etiquetas. bajo el mismo tema de noticias. El filtrado de etiquetas requiere dos comparaciones. Primero, se realiza una comparación y un filtrado en el lado del corredor a través del código hash de la etiqueta. Después de una coincidencia exitosa, se pasa al lado del consumidor y luego se comparan las etiquetas específicas para evitar la duplicación de los códigos hash de la etiqueta. La estructura de la unidad de almacenamiento específica en la cola es la siguiente:

Un único Productor mantiene una conexión larga con un servidor de nombres para consultar información de configuración del tema. Si el servidor de nombres se bloquea, el Productor se conectará automáticamente al siguiente. servidor de nombres hasta que haya una conexión disponible y pueda volver a conectarse automáticamente. No hay ningún latido en el servidor de nombres.

Un único Productor mantiene largas conexiones y latidos con todos los agentes relacionados con él. De forma predeterminada, los mensajes se sondean y envían de manera uniforme a todas las colas del tema correspondiente.

Un consumidor mantiene una conexión larga con un servidor de nombres y consulta periódicamente la información de configuración del tema. Si un servidor de nombres se bloquea, el consumidor se conecta automáticamente al siguiente servidor de nombres hasta que haya una conexión disponible y pueda volver a conectarse automáticamente. No hay ningún latido en el servidor de nombres.

Un único consumidor mantiene conexiones y latidos duraderos con todos los brokers asociados a él. Cuando se pierde el latido, cerrará la conexión y enviará una notificación a todos los consumidores del subgrupo de consumidores, y los consumidores del subgrupo serán reasignados a la cola para continuar consumiendo.

Esta configuración se utiliza para crear automáticamente un tema si no existe, lo que provocará un problema en el que el tema creado automáticamente solo existirá en un único intermediario y todas las solicitudes posteriores al tema se limitarán a que un solo agente, creando así un único punto de estrés.

Si el servidor proxy maestro falla, el servidor esclavo aún puede soportar el consumo, aunque en teoría no se puede escribir nada en el proxy, pero debido a la conectividad de red de rocketmq, los consumidores necesitan hasta 30 segundos de forma predeterminada. segundos para detectar esta situación, que se puede acortar modificando el parámetro pollNameServerInteval. Este tiempo se puede acortar modificando el parámetro pollNameServerInteval. Durante este tiempo, las solicitudes al intermediario fallan y, como el consumidor no sabe que el intermediario está suspendido, no puede consumir mensajes del intermediario. Hasta que el consumidor reciba la notificación de tiempo de inactividad de la estación maestra, cambiará a la estación esclava para su consumo. Sin embargo, la estación esclava no puede garantizar que los mensajes de la estación maestra se sincronizarán, por lo que se perderá una pequeña cantidad de mensajes. Sin embargo, estos mensajes no se perderán una vez que la estación maestra se recupere, los mensajes no sincronizados aún se consumirán.