O blog da AWS

Apresentando o modo provisionado para mapeamentos de origem de eventos do Kafka com o AWS Lambda

Este blog post foi escrito por Tarun Rai Madan, gerente de produto principal em Serverless e Rajesh Kumar Pandey, engenheiro de software principal em Serverles.

A AWS está anunciando a disponibilidade geral do Modo Provisionado para mapeamentos de fontes de eventos (ESMs) do AWS Lambda que se inscrevem para receber fontes de eventos do Apache Kafka, incluindo Amazon MSK e Kafka autogerenciado. O Modo Provisionado permite que você otimize a taxa de transferência do seu Kafka ESM, provisionando recursos de pesquisa de eventos que permanecem prontos para lidar com picos repentinos no tráfego. O controle da produtividade do seu ESM ajuda você a criar aplicativos Kafka orientados a eventos altamente responsivos e escaláveis com requisitos de desempenho rigorosos.

Visão geral

Quando você cria aplicativos modernos usando arquiteturas orientadas a eventos (EDAs), seus produtores publicam eventos que são processados por conectores como um ESM, e roteados para consumidores Serverless, como funções Lambda. O Apache Kafka é uma plataforma de código aberto e popular para criar aplicativos de dados de streaming em tempo real usando as funções do Lambda como consumidores. O MSK ESM é totalmente gerenciado como o AWS Lambda ou o Kafka ESM autogerenciado lê eventos do Kafka como uma fonte de eventos, executa operações como filtragem e agrupamento em lotes e invoca funções do Lambda. Ambos os ESMs oferecem integrações com fontes de eventos, escalonamento automático e recursos como agrupamento e filtragem. Quando um ESM do Kafka é criado, o Lambda ESM aloca um “event poller” para iniciar a pesquisa de mensagens em um tópico do Kafka. Em seguida, o ESM avalia o backlog de mensagens — usando a métrica offsetLag — para todas as partições no tópico e dimensiona automaticamente os event pollers para processar mensagens com eficiência.

Muitos aplicativos em tempo real que usam o Kafka são sensíveis a picos repentinos de tráfego, o que pode levar a atrasos perceptíveis na experiência dos usuários finais. Anteriormente, não havia controles para otimizar a taxa de transferência para cargas de trabalho sensíveis ao desempenho ao usar os ESMs do Kafka. Isso forçou você a explorar soluções alternativas para cargas de trabalho com requisitos de desempenho, o que aumentou a complexidade da arquitetura. Para aproveitar o poder do Lambda para esses aplicativos sensíveis ao desempenho, você precisa ser capaz de controlar a taxa de transferência do Kafka ESM e garantir um comportamento responsivo de escalonamento automático.

O que há de novo

O Modo Provisionado para ESM é um recurso que ajuda você a controlar a taxa de transferência do seu ESM e a obter um perfil de performance aprimorada para aplicativos sensíveis ao desempenho, especialmente aqueles que apresentam picos repentinos no tráfego. Você pode usar o Modo Provisionado para o Kafka ESM com uma variedade de provedores de plataformas de dados de streaming compatíveis com Kafka, como Amazon MSK, Confluent, Redpanda e Kafka autogerenciado. Os principais benefícios incluem:

  1. Controles para otimizar a taxa de transferência: agora você pode ajustar a taxa de transferência do seu ESM configurando um número mínimo e máximo de recursos chamados de “event pollers”. Um “event poller” (ou um “poller”) representa um recurso computacional que sustenta um ESM no modo provisionado e aloca uma taxa de transferência de até 5 MB/s.
  2. Escalonamento automático responsivo: com o Modo Provisionado, seu Kafka ESM detecta o aumento na métrica offsetLag para todas as partições em seu tópico do Kafka e dimensiona automaticamente os event pollers de maneira responsiva. Durante os períodos de inatividade, seu ESM é automaticamente reduzido para as event pollers mínimas definidas por você.
  3. Experiência de rede simplificada e cobranças: anteriormente, você precisava configurar o AWS PrivateLink ou o NAT Gateway para permitir que o Lambda pesquisasse mensagens de clusters Kafka em sua VPC e invocasse funções do Lambda. Com o Modo Provisionado, você não precisa mais configurar o PrivateLink ou o NAT Gateway. Essa abordagem reduz a sobrecarga e melhora a experiência do desenvolvedor, permitindo que você se concentre na criação de aplicativos em vez de gerenciar a configuração da rede. Consequentemente, você não é cobrado pelos endpoints VPC do PrivateLink ao usar o Kafka como fonte de eventos com o Lambda no modo provisionado para ESM, o que reduz suas tarifas de rede.

Ativando o modo provisionado para ESM

Para ativar o Modo Provisionado para um Kafka ESM novo ou existente, você pode configurar os event pollers mínimos, os pollers máximos de eventos ou ambos para seu ESM. Os valores permitidos variam de 1 a 200 para event pollers mínimos e de 1 a 2000 para event pollers máximos.

Observe que você deve configurar pelo menos um dos event pollers mínimos ou máximos para ativar o Modo Provisionado. Quando você configura somente o número mínimo de event pollers (“Somente mínimo”), seu ESM aloca essa quantidade mínima e pode escalar dinamicamente até um máximo. Esse máximo é determinado pelo OffsetLag e é limitado pelo número de partições ou pelo número máximo padrão de event pollers, o que for menor. Quando você configura somente o número máximo de event pollers (“Somente máximo”), seu ESM começa com um poller mínimo por padrão e pode escalar até o número máximo de event pollers ou número de partições, o que for menor. Quando você configura o número mínimo e máximo de event pollers (“Mín e Máximo”), seu ESM pode escalar automaticamente entre essa faixa de event pollers mínima e máxima configurada.

Ativação usando o AWS CLI

Você pode ativar o Modo Provisionado para ESM durante a criação de um novo ESM ou atualizando um ESM existente. Especifique o parâmetro —provisioned-poller-config.

aws lambda create-event-source-mapping \
    --region <region-name> \
    --function-name <function-name> \
    --event-source-arn <event-source-arn> \
    --provisioned-poller-config '{"MinimumPollers":<number>, "MaximumPollers":<number>}'

Ativação usando o console do AWS Lambda

Selecione Configurar modo provisionado para ativar o Modo Provisionado ao criar um novo ESM ou atualizar um existente.

Image of Activating Provisioned Mode for ESM in Console.Figura 1: Ativando o modo provisionado para ESM no console

Modo provisionado para o Kafka ESM em ação

Para ver o perfil de desempenho com o Modo Provisionado para o Kafka ESM, implante uma função Lambda que assine um tópico do Amazon MSK. Use o padrão de referência no Serverless Land e veja esta postagem no blog descrevendo as etapas para configurar o MSK ESM para uma função Lambda. Nesse caso, um produtor grava 20 milhões de mensagens, cada uma com um tamanho de carga útil de 1 KB em um tópico do MSK — distribuídas uniformemente em 100 partições. Use um tamanho de lote de 100, com duração da função de 100 ms, e defina StartingPosition como TRIM_HORIZON para processar desde o início do stream.

Observe o perfil de desempenho básico observado com o modo On-Demand padrão. Em seguida, analise duas configurações com o Modo Provisionado ativado.

  • O cenário 1 usa configurações diferentes para sondagens mínimas de eventos
  • O cenário 2 usa os event pollers mínimos padrão e permite que o Lambda gerencie os event pollers por meio do escalonamento automático.

Perfil de desempenho básico para o Kafka ESM On-demand

Com o Modo Provisionado desativado, o Lambda leva aproximadamente 20 minutos para consumir a lista de pendências de 20 milhões de mensagens. Demora 4 minutos para atingir o máximo de execuções simultâneas. Use esse resultado como uma linha de base para comparar com o Modo Provisionado para ESM.

Image of Baseline performance without Provisioned Mode for ESM.

Figura 2: Desempenho básico sem o modo provisionado para ESM

Cenário 1: configuração de event pollers mínimos e escalonamento automático

Para otimizar a taxa de transferência do ESM para essa carga de trabalho e reduzir o tempo de consumo do backlog de mensagens, configure os event pollers mínimos. Selecione valores de 10 e 100 para pesquisas mínimas de eventos e observe os resultados.

Configurando 10 event pollers mínimos

O Lambda consome o total de 20 milhões de mensagens em aproximadamente 11 minutos, com o mínimo de pollers definido para 10. Isso é 45% mais rápido do que a linha de base sem o Modo Provisionado. Demora aproximadamente 6 minutos para atingir o máximo de execuções simultâneas.

Image of Performance profile with minimum event pollers set to 10.
Figura 3: Perfil de desempenho com event pollers mínimas definidas como 10

Configurando um mínimo de 100 event pollers

Para melhorar ainda mais o desempenho do processamento, configure os event pollers mínimos para 100. O Lambda agora leva 6 minutos para consumir o total de 20 milhões de mensagens, o que é 70% mais rápido do que a linha de base. Ele atinge instantaneamente o máximo de execuções simultâneas.

Image of Performance profile with minimum event pollers set to 100.
Figura 4: Perfil de desempenho com event pollers mínimas definidas como 100

Cenário 2: Padrão de eventos mínimos e escalonamento automático

Em alguns casos, a carga de trabalho pode não ser tão sensível ao desempenho. Com o mesmo volume de 20 milhões de mensagens em seu tópico do Kafka, ative o Modo Provisionado para ESM. Comece com as event pollers mínimas padrão (definidas como 1) e deixe o Lambda escalar automaticamente as event pollers com base no tráfego de entrada.

O Lambda aumenta automaticamente suas event pollers para processar as mensagens recebidas e as reduz à medida que a lista de pendências é limpa. Com as event pollers padrão mínimas e máximas, o Lambda leva aproximadamente 12 minutos para limpar a lista de pendências de 20 milhões de mensagens, o que é 40% mais rápido do que a linha de base. O Lambda leva 7 minutos para atingir o máximo de execuções simultâneas.

Figura 5: Perfil de desempenho com event pollers mínimas definidas como 1

A tabela a seguir resume a melhoria de desempenho da carga de trabalho analisada usando o Modo Provisionado para ESM.

Modo ESM É hora de drenar o acúmulo de mensagens Melhoria percentual
Modo sob demanda 20 minutos Linha de base
Modo provisionado: Cenário 1 (sondagens mínimas de eventos ajustadas)
Mínimo de event pollers = 10 11 minutos 45%
Mínimo de event pollers = 100 6 minutos 70%
Modo provisionado: Cenário 2 (pesquisadores de eventos mínimos padrão)
Mínimo de event pollers = 1 12 minutos 40%

Tabela: Perfil de desempenho para o caso de teste de referência antes e depois da ativação do Modo Provisionado para ESM

Observabilidade e preços

Você pode observar / analisar o uso de event pollers monitorando a métrica ProvisionedPollers do Amazon CloudWatch, que mede o número de event pollers que processaram ativamente pelo menos um evento na última janela de 5 minutos.

O preço é baseado no número mínimo provisionado de event pollers e no número de event pollers consumidas durante o escalonamento automático. O Modo Provisionado introduz uma unidade de cobrança chamada Event Poller Unit (EPU). Cada EPU suporta até 20 MB/s de taxa de transferência de eventos. O número de eventos alocados em uma EPU depende da taxa de transferência consumida por cada event poller. Você paga pelo número de EPUs usadas e pela duração de sua execução, medida em horas da Unidade event poller. Para obter detalhes, consulte a definição de preço do AWS Lambda.

Melhores práticas e considerações

A configuração ideal de event pollers mínimos e máximos para seu Kafka Event Source Mapping (ESM) depende dos requisitos de desempenho de sua aplicação. Comece com os event pollers mínimos padrão para definir o perfil de desempenho e ajuste os event pollers com base nos padrões de processamento de mensagens observados e nos requisitos de desempenho de sea aplicação. Para cargas de trabalho com tráfego intenso e necessidades rígidas de desempenho, aumente o número mínimo de event pollers para lidar com picos repentinos. Você pode ajustar os event pollers mínimos necessários avaliando a taxa de transferência desejada, a taxa de transferência observada, que depende de fatores como as mensagens ingeridas por segundo e o tamanho médio da carga útil, e usando a capacidade de taxa de transferência de um event poller (até 5 MB/s) como referência. Observe que, para manter o processamento ordenado em uma partição, o Lambda limita o máximo de event pollers ao número de partições no tópico.

Atualize suas configurações de rede para remover os endpoints VPC do PrivateLink e as permissões associadas aos ESMs existentes ao ativar o Modo Provisionado.

Conclusão

O Modo Provisionado para Lambda ESM permite que você ajuste a taxa de transferência de seus ESMs Kafka configurando um número mínimo e máximo de event pollers. Isso fornece um comportamento responsivo de escalonamento automático para aplicativos Kafka que têm requisitos de desempenho rigorosos e apresentam tráfego imprevisível e com picos de tráfego. Você pode ajustar suas event pollers configuradas com base em seus requisitos e monitorar o uso por meio das métricas do CloudWatch. O Modo Provisionado também simplifica a configuração da rede ao remover a necessidade de configurar o PrivateLink.

Para obter mais recursos de aprendizado sem servidor, visite Serverless Land.

Este blog é uma tradução do conteúdo original em inglês (link aqui).

Biografia dos Autores

Tarun Rai Madan, gerente de produto principal em Serverless
Rajesh Kumar Pandey, engenheiro de software principal em Serverless

Biografia do Tradutor

Rodrigo Peres é Arquiteto de Soluções na AWS, com mais de 20 anos de experiência trabalhando com arquitetura de soluções, desenvolvimento de sistemas e modernização de sistemas legados.

Biografia do Revisor

Daniel Abib é arquiteto de soluções sênior na AWS, com mais de 25 anos trabalhando com gerenciamento de projetos, arquiteturas de soluções escaláveis, desenvolvimento de sistemas e CI/CD, microsserviços, arquitetura Serverless & Containers e segurança. Ele trabalha apoiando clientes corporativos, ajudando-os em sua jornada para a nuvem.

https://www.linkedin.com/in/danielabib/