Kubernetes + Apache Kafka + KEDA: escalando aplicações que processam eventos com facilidade

Renato Groffe
3 min readJul 31, 2022

Esta imagem/print traz uma aplicação no momento exato em que a mesma escala num cluster Kubernetes, utilizando para isto o projeto KEDA (Kubernetes Event-driven Autoscaling) + a ferramenta de linha de comando k9s e tomando por base o número de eventos acumulados em um tópico do Apache Kafka.

Apresentei inclusive um exemplo similar em uma live recente no Canal .NET, cujo conteúdo pode ser assistido gratuitamente no YouTube:

Já disponibilizei toda a configuração que utilizei neste exemplo como um repositório no GitHub:

https://github.com/renatogroffe/Kubernetes-KEDA-AppInsights-Kafka-EventHubs-DotNet6_VotacaoTecnologias

Caso achem útil a solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá!

Neste caso utilizei o Kafka a partir de uma instância do Azure Event Hubs (através da porta 9093), uma solução oferecida pela nuvem Microsoft para streaming e processamento de eventos. A listagem a seguir traz o Secret em que foram criadas as configurações esperadas para este deployment no Kubernetes:

O próprio Deployment (baseado na imagem pública renatogroffe/workerquestao-kafka-appinsights-dotnet6) referencia este Secret:

Mas o que faz então nossa aplicação escalar?

Isto acontecerá através da configuração de um ScaledObject, estrutura provida pelo KEDA e que aponta para o Deployment descrito anteriormente.

Neste tipo de objeto teremos o número mínimo e máximo de réplicas Pods que serão criados (minReplicaCount e maxReplicaCount), o período em segundos que servirá de base para que o KEDA aloque ou desaloque mais instâncias, a seção triggers com a configurações para a escalabilidade com Kafka (lagThreshold indica a quantidade de eventos acumulados em um tópico que serve de métrica para escalar a aplicação) e authenticationRef referenciando as permissões de acesso:

As permissões de acesso para este exemplo foram indicadas em um TriggerAuthentication, outra das estruturas oferecidas pelo KEDA:

O deployment de todas essas estruturas aconteceu através do comando a seguir:

kubectl apply -f <ARQUIVO YAML> -n votacao

Em que <ARQUIVO .YAML> indica o YAML com as configurações de cada objeto, com a criação do mesmo ocorrendo no namespace votacao.

E como configurar o KEDA no Kubernetes? Trata-se de uma tarefa relativamente simples, bastando para isto realizarmos um deployment via chart Helm em um namespace criado especificamente para esse fim. Tal ajuste possibilitará então controlar a escalabilidade de qualquer aplicação que possua um ScaledObject em um cluster:

Além do próprio Kafka, o KEDA conta triggers para facilitar a escalabilidade de aplicações baseadas em outras tecnologias como RabbitMQ, Azure Service, Azure Event Hubs, Amazon SQS e muito mais. No post a seguir trago um outro exemplo de uso do KEDA:

Kubernetes: dicas, truques, conteúdos gratuitos… | Abril-2022

Para saber mais aqueles que ficaram curiosos sobre a ferramenta k9s (uma alternativa gratuita para se acessar um cluster Kubernetes em uma interface gráfica via linha de comando), deixo o link de um artigo que publiquei também neste blog:

K9s: monitoramento, gerenciamento e testes com Kubernetes sem complicações

--

--

Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker