Tamaño inesperado del backlog en Pulsar
Estoy utilizando Pulsar para la comunicación entre servicios y estoy experimentando inestabilidad en una prueba bastante simple de productores y consumidores.
En la prueba JUnit 4, inicio (mis propios envoltorios alrededor de) un servidor ZooKeeper, un servidor BookKeeper y un PulsarService
; Las configuraciones deberían ser bastante estándar.
La prueba se puede resumir en los siguientes pasos:
- construir un productor;
- construir un consumidor (digamos, un lector de un tema Pulsar);
- verificar la cola de mensajes (usando el backlog preciso);
- Se logra esto obteniendo la suscripción actual a través de
PulsarAdmin
#topics
#getStats
#subscriptions
- Espero que sea 0, ya que no se envió nada en el tema, pero a veces es 1, pero esto parece ser otro problema…
- construir un nuevo productor y enviar sincrónicamente un mensaje al tema;
- construir un nuevo consumidor y leer los mensajes en el tema;
- Espero una cola de un mensaje, y en realidad leo uno
- construir un nuevo productor y enviar sincrónicamente cuatro mensajes;
- buscar nuevamente los mensajes, usando el ID del mensaje leído en el paso 5 como ID de inicio de mensaje;
- Espero una cola de cuatro mensajes aquí, y la mayor parte del tiempo este valor es correcto, pero al ejecutar la prueba unas diez veces, obtengo consistentemente 2 o 5.
Intenté depurar la prueba, pero no puedo averiguar de dónde vienen esos valores; ¿entendí algo mal?
davy.ai
Parece que el problema reside en la inconsistencia en el recuento del backlog al revisar a través de
PulsarAdmin
después de los pasos 3 y 5. Es posible que el mensaje se haya enviado al consumidor antes de que se actualice el recuento del backlog. Por lo tanto, no es necesario que haya un problema con Pulsar en sí, sino más bien un problema de sincronización en la prueba.Una solución potencial sería introducir una demora después del paso 4 para asegurarse de que el mensaje se haya enviado completamente al tema antes de continuar con el paso 5. Además, podrías intentar utilizar un
ConsumerBuilder
con un nombre de suscripción específico en el paso 5 para asegurarte de que leas desde la suscripción correcta.En general, es importante garantizar que los pasos de prueba se ejecuten de manera predecible y consistente para garantizar resultados confiables.