Apache Kafka — Tipos de Deployments
O que você precisa saber para entender os tipos de deployment do Apache Kafka em qualquer ambiente (On-Premises, Nuvem ou Container) da melhor maneira possível.
Disclaimer
A motivação inicial desse artigo é mostrar quais são as melhores formas de se realizar o deployment do Apache Kafka para Testes, POC, QA, Desenvolvimento e Produção.
Outro ponto importante é que não abordo sobre custo, na verdade com o tempo você vai entender que isso é relativo, e que depende da maturidade e fase que sua empresa está passando.
Uma das grandes dificuldades que encontramos hoje em dia é aonde será realizado o deployment do produto/serviço que estamos utilizando, existem tantas opções e com Apache Kafka não se faz diferente, algumas informações importantes sobre esse serviço:
- Segundo projeto da Apache Software Foundation (ASF) mais ativo
- 100.000+ organizações utilizando globalmente
- Está presente em mais de 60% da Fortune 100 (empresas mais ricas do mundo)
- Trilhões de mensagens consumidas por dia
- O maior cluster conhecido possui 1.000 brokers (servidores)
Para empresas que utilizam ele em seu dia a dia sabe o como se faz crítico a disponibilidade e escalabilidade desse produto, portanto nesse guia irei discutir as mais utilizadas opções para você que deseja garantir o sucesso do seu projeto.
Apache Kafka
O Apache Kafka é um produto open-source da Apache Software Foundation (ASF).
Costumo dizer que essa opção é a porta de entrada da maioria dos estudantes, navegar pelo site, entender um pouco sobre o produto e realizar o download, existem diversos guias e manuais rápidos que ajudam você a entender um pouco sobre o mundo do streaming e do Kafka no próprio site, mas sendo sincero, como isso se traduz para o mundo empresarial?
Bem, brincar com essa opção OSS (open-source software) em desenvolvimento ou para testes pessoais é até utilizada, porém em produção não tenho visto isso acontecendo, simplesmente pelo fato de que a maioria das empresas hoje não investe o deployment de seus produtos e serviços em máquinas físicas (bare-metal) ou máquinas virtuais (VMs).
Pro-Tip = Utilize somente em ambiente de teste ou em pequenos projetos que não necessite a instalação e configuração do Cluster, porque de fato é doloroso lidar com arquiteturas distribuídas na vida real.
Confluent
Dos criadores do Apache Kafka, a Confluent é a empresa que acelera o Apache Kafka ao nível enterprise, tornando a instalação, configuração, gerenciamento e orquestração mais fácil e palpável!
Uma das mais importantes novidades dessa plataforma é que desde sua versão 5.2 é possível utilizar todas suas features FREE FOREVER, é isso mesmo, para um single-node cluster, você não paga nada!
Algumas features que me fazem ❤️ a Confluent:
Não fique com medo de utilizar, muitos iniciantes pensam que essa “distribuição” de alguma forma é uma modificação do Kafka, mas, na verdade, não é!
Pro-Tip = Eu recomendo extremamente para testes, desenvolvimento e até QA com um single-node cluster, assim você pode fazer seus projetos e POC de forma muito mais rápida e efetiva, para produção, por ser pago caso se use mais de um nó iremos ver algumas outras opções que são mais interessantes!
AWS = MSK (Managed Streaming Kafka)
A Amazon liberou em 2019 um serviço totalmente gerenciado pela Cloud, chamado de Managed Streaming Kafka (MSK).
Basicamente esse serviço remove a necessidade de você instalar, configurar e gerenciar o Apache Kafka dentro da infraestrutura da AWS, ou seja, você paga por hora e tem toda a garantia da Amazon de que seu serviço estará up & running.
Alguns comentários sobre o Amazon MSK:
- O MSK é um produto considerado novo, entrou em GA (General Availability) após março de 2019, portanto algumas features estão faltando.
- Esse produto é de fato para empresas que desejam ou já rodam seus serviços na Amazon, é lógico que isso não impede de você rodar seu Apache Kafka lá, porém normalmente rodamos um pipeline de dados na mesma Cloud.
- A integração com o serviço de monitoramento da Amazon, o CloudWatch é um grande plus.
- O serviço ainda não oferece escalabilidade em um clique, se você desejar aumentar seu cluster será necessário criar outro.
É um serviço de que fato vale a pena olhar, porém deixo aqui alguns blogs para vocês lerem mais a respeito.
Pro-Tip = Para pipelines que serão desenvolvidos na Amazon e se tem o interesse de utilizar o Kafka como backbone ou como um enterprise data hub (EDH) eu extremamente recomendo em produção mas com algumas ressalvas! Leia os artigos acima e se após isso ainda estiver interessado siga em frente e coloque em seu projeto.
Azure = HDInsight
Claro que o Azure oferece o mesmo tipo de serviço, totalmente gerenciável, resiliente e pago por hora e não é porque sou MVP (Most Valuable Professional) da Microsoft, mas este serviço já está maduro e continua sendo atualizado e acelerado pelo time de produto da Microsoft constantemente!
É um serviço que está disponível desde 2017 e que possuí diversos clientes utilizando o mesmo hoje em dia.
Alguns pontos interessantes sobre Kafka dentro do HDInsight:
- Fácil de provisionar e configurar
- Garante, 99.9% de SLA e Uptime
- Utiliza Managed Disks, possível de ter um nó (Broker) com até 16 TB
- Azure foi internamente redesenhado para possuir por padrão Rack Awareness em duas dimensões
- Disponibilidade de scale-up ou scale-down, ou seja, com um clique você consegue modificar a configuração do seu cluster
- Integração com o Azure Monitor para gerenciamento das métricas do Kafka (JMX)
Pro-Tip = Esse de fato é o caminho se você estiver pensando em colocar todo o seu pipeline na nuvem da Microsoft e utilizar PaaS (produtos como um serviço) para a diminuição do trabalho administrativo, o custo benefício é gigantesco além de possuir uma das mais novas versões do Kafka dentro de um produto gerenciável.
Kubernetes (K8S)
Bem, o Kubernetes está dominando o mundo e isso não sou eu que estou falando, se você não conhece o mais famoso orquestrador de containers pare o que estiver fazendo agora e leia sobre.
A ascensão do Kubernetes foi tão agressiva que hoje em dia a maioria dos clientes utiliza conteinerização ao invés de virtualização (VM) e é claro que você pode utilizar o Apache Kafka em um container, porém com diversas ressalvas, antes de tudo entenda a diferença entre aplicações stateful e stateless isso é um dos principais conceitos quando estamos trabalhando com containers.
De acordo com a Confluent, 33% de seus clientes estão migrando o Apache Kafka para o Kubernetes e é claro em produção, portanto fique atento nessa hype!
Estamos falando de uma realidade não somente em relação custo benefício, mas como se gera um impacto positivo de não somente ter o Apache Kafka no Kubernetes mas também todos seus produtos, serviços, APIs e assim por diante.
Pro-Tip = Não somente em produção, mas para seu pipeline de Big Data assim como de CI/CD essa proposta é atrativa, poder rodar as mesmas configurações do seu cluster de produção em sua máquina local e ter uma réplica do que está acontecendo isso facilita em todos os termos, considere de fato isso se sua empresa tem a mente em containers.
Confluent Cloud
Quando algo é redesenhado para a Cloud isso de fato chama a minha atenção e deveria chamar a sua também! A Confluent lançou o Confluent Cloud que é o Apache Kafka para a Nuvem e não somente isso, você pode fazer o deployment na sua Cloud de preferência — Google Cloud, Microsoft Azure e AWS.
Nessa proposta, você pode realmente utilizar toda a força do Apache Kafka com todas as facilidades da Confluent pagando somente pelo que você usa.
Alguns pontos de destaque:
- Sem necessidade de configuração de Cluster
- Somente paga pelo que você usa
- Garantia de SLA de 99.95%
- Escalabilidade garantida
- Latência de até 30 ms
Para mais informações — https://www.confluent.io/confluent-cloud/
Pro-Tip = Na realidade, empresas desejam cada vez mais se afastar do gerenciamento e adminstração de serviços portanto a escolha de soluções SaaS (software como um serviço) faz total sentido, utilizar o Apache Kafka dentro da Confluent Cloud é uma das melhores opções sem dúvida alguma.
Conclusão e Dicas
Segue todas as opções e um breve comentário sobre elas:
- Apache Kafka = realizar a configuração é doloroso e requer uma inúmera quantidade de pessoas no time envolvidas, no dia a dia não vemos isso sendo aderido, essa instalação é o que chamamos de Vanilla Kafka.
- Confluent = ponto de partida para POCs, projetos e desenvolvimento, nessa distribuição se torna muito mais fácil administrar e gerenciar o Apache Kafka e como dito, para um nó a licença é free.
- Amazon MSK = para empresas que possuem sua infraestrutura e pipelines na AWS é uma boa opção a ser considerada, mas com algumas ressalvas, veja na seção apropriada e leia atentamente.
- Azure HDInsight = para empresas que possuem seu deployment no Azure e querem usar o Apache Kafka esse é o caminho certo.
- Kubernetes = é a plataforma de orquestração dominante no mercado e utilizada amplamente, portanto sabendo configurar o Kafka nesse ambiente pode ser usado desde desenvolvimento a produção, de fato há diversas empresas que já utilizam esse tipo de deployment.
- Confluent Cloud = para muitas empresas que desejam ser ágeis e que valorizam seu tempo focado em seu negócio, ofertas SaaS (Software as a Service) faz total sentido, portanto aqui é de fato a melhor proposta sem dúvidas alguma.
Algumas dicas pessoais:
- Se está começando a “Distribuição” da Confluent é seu melhor ponto de partida
- Se quer fazer uma POC com sucesso, traga os dados para dentro do Apache Kafka, recomendo fortemente o Kafka Connect API — https://www.confluent.io/hub/
- Para ambientes de desenvolvimento sugiro as seguintes opções = Confluent ou Kafka no Kubernetes
- Para produção = Se seu time já trabalha, gerencia e mantém containers com Kubernetes então realizar o deployment do Kafka soa como uma ótima opção, porém se deseja somente se preocupar com o negócio e realmente não possuir administração sobre, escolha a Confluent Cloud