Na ordem, uma vez só, e rápido
(engineering.ab180.co)- A Airbridge faz o pareamento em tempo real de eventos como cliques em anúncios, instalações e compras, então é importante não apenas processar os eventos rapidamente, mas também processá-los na ordem necessária e evitar perdas e duplicações.
- Antes, as mensagens do Kafka eram trazidas em micro-batches e processadas sequencialmente por tipo de evento.
- Era fácil controlar a ordem, mas enquanto se esperava o processamento dos eventos anteriores, outros workers ficavam ociosos.
- Quando diferenças de velocidade de processamento entre workers se somavam a hot partitions, a velocidade de processamento estagnava mesmo com aumento de servidores.
- Para resolver isso, foi projetado o Project Differential.
- Os micro-batches foram eliminados, e
Consumerspor tipo de evento leem de forma independente o mesmo topic do Kafka. - A garantia de ordem é feita por partition, e não por todo o topic, configurando para que os eventos do mesmo fluxo de usuário cuja ordem importa entrem, sempre que possível, na mesma partition.
- O
Consumerseguinte não pode ultrapassar a posição de processamento doConsumeranterior, mantendo uma distância de segurança com base em offset ou event time. - Mensagens que o
Consumeranterior não processa são repassadas ao próximoConsumerpara reaproveitamento, e quando o buffer enche, o sistema muda para o Polling Mode, lendo o Kafka diretamente.
- Os micro-batches foram eliminados, e
- Internamente, há
ConsumerSuite/PartitionedConsumerChainpor partition, e oLimitedEventProcessorcontrola para não ultrapassar o checkpoint doConsumeranterior.- O
CommitManagergerencia para que, mesmo com buffering e processamento assíncrono, apenas offsets contínuos realmente concluídos sejam commitados no Kafka.
- O
- Em operação de teste, foi confirmado que o sistema funciona sem perda nem duplicação de eventos, e a velocidade de processamento melhorou mais de 10 vezes em comparação com o método anterior de micro-batches.
- Em vez de criar uma ordem global completa, este é um caso de manter, em best effort, a ordem realmente necessária ao negócio enquanto se garante vazão.
- No futuro, estão sendo avaliadas simplificação da estrutura, adaptive flow control para lidar com encerramentos de Spot Instances e melhorias de arquitetura para reduzir o próprio processamento sequencial.
Ainda não há comentários.