Apache Kafka — Tipos de Deployments

Luan Moreno M. Maciel
Engenharia de Dados Academy
8 min readNov 6, 2019

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.

começando no Apache Kafka da forma certa!

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:

  1. Segundo projeto da Apache Software Foundation (ASF) mais ativo
  2. 100.000+ organizações utilizando globalmente
  3. Está presente em mais de 60% da Fortune 100 (empresas mais ricas do mundo)
  4. Trilhões de mensagens consumidas por dia
  5. 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

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

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:

  1. Connectors
  2. KSQL
  3. Schema Registry
  4. REST Proxy
  5. Control Center

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)

Amazon 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:

  1. O MSK é um produto considerado novo, entrou em GA (General Availability) após março de 2019, portanto algumas features estão faltando.
  2. 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.
  3. A integração com o serviço de monitoramento da Amazon, o CloudWatch é um grande plus.
  4. 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

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:

  1. Fácil de provisionar e configurar
  2. Garante, 99.9% de SLA e Uptime
  3. Utiliza Managed Disks, possível de ter um nó (Broker) com até 16 TB
  4. Azure foi internamente redesenhado para possuir por padrão Rack Awareness em duas dimensões
  5. Disponibilidade de scale-up ou scale-down, ou seja, com um clique você consegue modificar a configuração do seu cluster
  6. 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)

Kubernetes

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

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:

  1. Sem necessidade de configuração de Cluster
  2. Somente paga pelo que você usa
  3. Garantia de SLA de 99.95%
  4. Escalabilidade garantida
  5. 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:

  1. 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.
  2. 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.
  3. 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.
  4. Azure HDInsight = para empresas que possuem seu deployment no Azure e querem usar o Apache Kafka esse é o caminho certo.
  5. 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.
  6. 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:

  1. Se está começando a “Distribuição” da Confluent é seu melhor ponto de partida
  2. 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/
  3. Para ambientes de desenvolvimento sugiro as seguintes opções = Confluent ou Kafka no Kubernetes
  4. 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

--

--