Red de conocimiento informático - Problemas con los teléfonos móviles - Resumen de problemas de consumo de rocketmq

Resumen de problemas de consumo de rocketmq

No escribiré sobre el proceso. Escribiré algunos resúmenes. Espero que sea útil para todos. Observaré las ideas de diseño de RocketMq desde la perspectiva de la resolución de problemas. tiempo.

Pregunta 1 Proceso de consumo de RocketMq

Obtenga todas las colas Que bajo el tema y el intermediario correspondientes al cliente consumidor y luego asigne el QueID extraído por el cliente de acuerdo con un determinado algoritmo

Algoritmo de asignación

1? Algoritmo de asignación promedio de anillo, asignación a su vez después del promedio

q1 q2 q3 q4 q5 q6 q7 q8 3 cola de consumidores c1 c2 c3

c1: q1 q4 q7

c2: q2 q5 q8

c3: q3 q6

¿2 distribuidos equitativamente?

q1 q2 q3 q4 q5 q6 q7 q8 3 Cola de consumidores c1 c2 c3

c1: q1 q2 q3

c2: q4 q5 q6

c3: q7 q8

3 Prioridad de la sala de servidores y distribución uniforme

Priorice las colas de mensajes en la misma sala de servidores y luego distribúyalas equitativamente

4 El algoritmo personalizado especifica el cliente a consumir ciertos algoritmos de cola.

5 Algoritmo Hash Consistente

Principio del algoritmo:

Paso 1: Construya el anillo hash de clientid, usando TreeMap como conjunto y el valor hash como clave , el nodo es clientid

Paso 2: Calcule el nodo hash de que y obtenga el nodo clientid más cercano a este valor hash.

1 Procesamiento paralelo de subprocesos múltiples, diferentes colas extraen datos en paralelo y los mensajes se consumen en paralelo

De forma predeterminada, se extraen 32 mensajes a la vez, lo que ahorra ancho de banda de la red

p>

2 Consumo concurrente, el progreso de la tarjeta no se suspenderá solo porque haya un problema con uno de los mensajes en el medio

Después de consumir un mensaje, según el resultado de la retroalimentación agente, todavía hay problemas que se envían al servidor y se ingresan en la cola de reintentos. El servidor ingresa a la cola de reintento para reintentar el siguiente consumo, de modo que el progreso del consumo no se detenga debido a problemas

3 Incluso si hay un problema de bucle infinito de mensajes, hay un mecanismo de detección de tiempo de espera

Para procesar la cola de mensajes, determine el tiempo de espera. Si se excede el tiempo, no se procesará, se enviará de regreso al intermediario y se eliminará de la memoria.

Respuesta

Respuesta: Ya sea que se consuma en lotes o uno por uno, las coordenadas son relativamente pequeñas.

Propósito: evitar el tiempo de inactividad del servicio y evitar la pérdida de mensajes cuando se han consumido mensajes posteriores pero no se han consumido los mensajes anteriores.

Código fuente:

Problema: Para garantizar que los mensajes no se pierdan, el reinicio del servidor puede provocar un consumo repetido.

El propósito del consumo secuencial: el cliente consume mensajes simultáneamente en el orden de los mensajes de entrada. Los mensajes con un desplazamiento grande se pueden consumir antes que los mensajes con un desplazamiento pequeño.

1 Lógica de consumo, cuando se consume secuencialmente, el broker correspondiente a la cola de mensajes debe estar bloqueado para evitar que se asigne a otros clientes durante la recarga.

2 Consumo secuencial, extrayendo 32 mensajes a la vez, si un mensaje está estancado en el medio, el consumo falla y los mensajes posteriores se suspenden. El mensaje se reintenta 16 veces.

Si aún falla, se envía de regreso al servidor. Sáltate este consumo.

Pregunta 7

¿Por qué se agregan varios bloqueos al consumo secuencial?

1 Equilibrio de carga cuando cambia la cola

Propósito: Cambios de carga requiere que el agente bloquee la cola y no se permite que la cola se asigne a otros clientes durante el cambio

2 Después de extraer los datos, los datos de la cola se bloquean para mantener el consumo secuencial de la cola

Bloquear la colección.

1 Mecanismo de reintento de mensajes, los mensajes que no se pueden consumir se reenviarán al agente.

2 El agente considerará que el consumo fue exitoso solo después de recibir la respuesta de confirmación; se considerará consumido.

3 El cliente extrae un lote de mensajes Incluso si los mensajes posteriores se consumen antes que los mensajes anteriores, incluso si el agente está inactivo, solo se actualizará el desplazamiento bajo para garantizar que. los mensajes no se perderán.

1 Si no se consume, se enviará de nuevo para intentarlo nuevamente. Dependiendo del número de reintentos, el mensaje se enviará a colas de reintento de diferentes niveles

El mensaje se extraerá periódicamente y se enviará al tema y cola originales

Cuándo Cuándo Se alcanza el número máximo de fallas, los mensajes se colocarán en la cola muerta

Hay varias razones para la acumulación de mensajes

Monitoreo de acumulación de mensajes

1.1 Monitorear la producción tasa de mensajes enviados por el productor

2 Compare la diferencia entre el maxOffset del mensaje enviado por el productor y el currOffset del mensaje consumido por el consumidor con el valor de alarma del valor de acumulación de mensajes dado si la diferencia; Si el valor es mayor que el valor de la alarma de datos, hay acumulación de mensajes; de lo contrario, no hay acumulación de mensajes.

3 Monitoreo de la tasa de consumo de los consumidores

Fenómeno que se puede resolver escalando

1 Un aumento repentino en el tráfico que conduce a la acumulación.

2. Acumulación de mensajes del Broker, como cuellos de botella en el rendimiento del Broker, acumulación de mensajes causada por la estrategia de sincronización del Broker, etc.

3. Los mensajes extraídos por los propios consumidores se acumulan. Cuando el mensaje extraído por el consumidor excede una cierta cantidad, la extracción del mensaje se suspenderá. Por un lado, la capacidad de consumo del propio consumidor es limitada y, por otro lado, demasiados mensajes por parte del consumidor pueden provocar fácilmente una frecuencia. GC.

Si el problema no se puede resolver aumentando la escala y todavía hay restricción, debemos considerar el fracaso del corredor o del propio cliente.

Esta situación básicamente se puede determinar para Ser fallas del propio RocketMQ, como fallas del agente, como una alta frecuencia de GC en el agente que provoca envío de mensajes, degradación del rendimiento de la copia, fallas de la red interna, etc. Este problema no se puede resolver ampliando la escala y no hay forma de evitarlo. En este momento, lo más importante es monitorear el rendimiento del servidor RocketMQ; de lo contrario, habrá problemas con la lógica del consumidor.

Gracias a los siguientes autores por su arduo trabajo y referencias

blogs.com/chenjunjie12321/p /7922362.html ?El proceso general del lado del consumidor

/news_show_36799.aspx La diferencia entre consumo concurrente y consumo secuencial

/article/ NcSYj_2PQhBlqveuD1Kw?

Método de actualización del cursor desplazado

blogs.com/allenwas3/p /12245217.html

Escenario de reintento de RocketMq

blogs. com/yushangzuiyue/p/9684000.html

Avión con problema de desplazamiento

https://juejin.im/post/ 5d72724cf265da03be48fd24