En orden, una sola vez, rápido
(engineering.ab180.co)- Airbridge hace matching en tiempo real de eventos como clics en anuncios, instalaciones y compras, por lo que no solo es importante procesar los eventos rápidamente, sino también hacerlo en el orden necesario y evitar pérdidas o duplicados.
- Antes, los mensajes de Kafka se obtenían en micro-batches y se procesaban secuencialmente por tipo de evento.
- El orden era fácil de controlar, pero otros workers quedaban inactivos mientras esperaban a que se procesaran los eventos anteriores.
- Si las diferencias de velocidad de procesamiento entre workers coincidían con una hot partition, la velocidad de procesamiento se estancaba aunque se agregaran más servidores.
- Para resolver esto, diseñaron Project Differential.
- Eliminaron los micro-batches y cada
Consumerpor tipo de evento lee de forma independiente el mismo topic de Kafka. - La garantía de orden se realiza por partition, no en todo el topic, y se configuró para que los eventos de un mismo flujo de usuario donde el orden es importante entren, en lo posible, en la misma partition.
- Un Consumer posterior no puede adelantarse a la posición de procesamiento del Consumer anterior, y mantiene una distancia segura basada en offset o event time.
- Los mensajes que el Consumer anterior no procesa se pasan al siguiente Consumer para reutilizarlos y, si el buffer se llena, se cambia a Polling Mode, que lee directamente de Kafka.
- Eliminaron los micro-batches y cada
- Internamente, hay un
ConsumerSuite/PartitionedConsumerChainpor partition, yLimitedEventProcessorcontrola que no se supere el checkpoint del Consumer anterior.CommitManagergestiona que, incluso durante el buffering y el procesamiento asíncrono, solo se haga commit en Kafka de los offsets continuos que realmente se completaron.
- En operación de prueba, confirmaron que funcionaba sin pérdida ni duplicación de eventos, y que la velocidad de procesamiento mejoró más de 10 veces frente al método anterior con micro-batches.
- Es un caso en el que, en lugar de crear un orden global perfecto, se preserva el orden necesario para el negocio real en modalidad best effort, al mismo tiempo que se asegura el throughput.
- A futuro, están evaluando simplificar la estructura, incorporar adaptive flow control para responder a la terminación de Spot Instances y mejorar la arquitectura para reducir el procesamiento secuencial en sí.
Aún no hay comentarios.