Instalando Apache Pulsar no Kubernetes

Mateus Oliveira
Engenharia de Dados Academy
5 min readJun 28, 2022

Falando de Big Data, não podemos falar de 2 grandes trends no mundo de engenharia de dados.

  • Kubernetes = Sem dúvida próxima senão a atual geração de infraestrutura de big data, hoje sem dúvida para desenvolvimento não se fala em outra coisa e porque analytics seria diferente.
  • Apache Pulsar = Plataforma de streaming de dados que veio para competir de frente com Apache Kafka, claro que além das similaridades ainda temos os diferenciais: Apache BookKeeper, geo-replication, Pulsar Functions e Tiered Storage (tem muita mais coisa por isso temos um artigo só para falar dos conceitos)

Antes de entrarmos no Hands-On de como instalar o Apache Pulsar temos que entender algumas coisas, não adianta somente fazer o get started sem saber aos conceitos básicos que podemos te ajudar muito lá na frente.

O que são tenants e namespaces no Apache Pulsar?

Vamos começar pelo Tenant, é a unidade mais basica de categorização de um tópico, ou seja tópicos são armazenados em um determinado namespace que está dentro de um tenant que por sua vez está espalhado nos clusters de Pulsar, acredito que com a imagem fica mais claro.

Vamos entender primeiro como estão organizados os dados. Primeiro temos o Apache Pulsar Cluster (Broker e BookKeeper) dentro do cluster temos a primeira camada que é o Tenant, por exemplo o Tenant BackEnd para aplicações back-end e outro Tenant FrontEnd para aplicações do nosso front-end, nesse camada podemos aplicar por exemplo configurações de autorização, já podemos entender um pouco melhor o desejo, por exemplo agora podemos ver que a aplicação de BackEnd tem acesso ao tópico de user-log e a aplicação de FrontEnd não, (acesso em verde OK, acesso em vermelho NEGADO).

Agora temos o namespace, o namespace é uma organização lógica dentro do Tenant, podemos separar pro microserviços que irão utilizar por exemplo e agrupar os tópicos dentro dos namespaces, outra habilidade que teremos usando namespaces é de aplicar um grupo de politicas em todos os tópicos de uma determinada namespace, por exemplo, configurar tempo de retenção por namespace.

Entendido essa parte conceitual, fica mais simples de seguirmos para a parte prática.

Vamos as seguintes ferramentas usar:

  • Minikube = Ambiente de implementação
  • Helm = Gerenciador de pacotes de aplicação do Kubernetes
  • Pulsar Helm chart [oficial] = Repositório oficial do Apache Pulsar para Kubernetes

Iremos usar o get started pois a documentação está em um excelente nível mas vamos explicar cada passo a passo em português.

Primeiro passo é adicionar o repositório do Helm chart localmente:

helm repo add apache https://pulsar.apache.org/charts

Casos em que já tem ele adicionado, você pode atualizar com o seguinte comando:

helm repo update

Agora vamos baixar o repositório do helm localmente na nossa maquina, e acessar a pasta, esse passo é necessário para preparmos o ambiente.

git clone https://github.com/apache/pulsar-helm-chart
cd pulsar-helm-chart

Será executado um script agora de preparação, esse script além de criar os secrets para o deployment, configura o usuário e senha do dashboard do grafana e da UI de gerenciamento do Pulsar para pulsar/pulsar.

Além disso vale ressaltar alguns coisas, -n é a para especificar a namespace que irá utilizar por exemplo iremos usar o nome ingestion, que é o nome que normalmente eu uso para aplicações de ingestão e armazenamento em tempo real, -k é o nome da aplicação na sua implementação helm, neste caso irei usar somente pulsar

./scripts/pulsar/prepare_helm_release.sh \
-n ingestion \
-k pulsar \
-c

Agora é a hora de implementar, dentro do examples, temos os arquivos yamls para deployment, podemos customizar e criar novos yamls de acordo com as nossas necessidades, por exemplo, quantos replicas por componentes e configurações por componentes. No yaml padrão do minikube não o Pulsar Manager, adicionei para vermos a interface gráfica.

# disable auto recovery
components:
autorecovery: false
pulsar_manager: true

Aplicando o Helm chart no minikube:

helm install \
--values examples/values-minikube.yaml \
--set initialize=true \
--namespace ingestion\
pulsar apache/pulsar

Ponto de atenção para Minikube, não esquecer de abrir um outra aba ou sessão no terminal é executar o comando abaixo para criação de load balancer local.

minikube tunnel

Agora só aguardar que os pods inicializarem é o seu ambiente está pronto.

mateusoliveira@mateuss-MacBook-Pro pulsar-helm-chart % k get pods
NAME READY STATUS RESTARTS
pulsar-bookie-0 1/1 Running 0
pulsar-bookie-init-vtql2 0/1 Completed 0
pulsar-broker-0 1/1 Running 0
pulsar-grafana-6b99586f69-t8gz4 1/1 Running 0
pulsar-prometheus-6f4fdcbf48-b6tnt 1/1 Running 0
pulsar-proxy-0 1/1 Running 0
pulsar-pulsar-init-d8m79 0/1 Completed 0
pulsar-pulsar-manager-5c9ddcc44d-2l6kp 1/1 Running 0
pulsar-toolset-0 1/1 Running 0
pulsar-zookeeper-0 1/1 Running 0

Agora vamos acessar a UI do Pulsar Manager, mas antes disso, vamos configurar um usuário administrador para o nosso cluster.

CSRF_TOKEN=$(curl http://localhost:9527/pulsar-manager/csrf-token)curl \-H 'X-XSRF-TOKEN: $CSRF_TOKEN' \-H 'Cookie: XSRF-TOKEN=$CSRF_TOKEN;' \-H "Content-Type: application/json" \-X PUT http://localhost:9527/pulsar-manager/users/superuser \-d '{"name": "admin", "password": "apachepulsar", "description": “admin user for apache pulsar on minikube”, "email": “adminpulsar@test.org"}'

Esse comando irá criar um superuser para acesso e controle do Pulsar Manager.

Após isso ele irá solicitar a criação de um novo environment (Ambiente) com o nome do amniente a a URL de serviço, o nome pode ser a sua escolha e a URL é essa abaixo:

http://pulsar-broker.ingestion.svc.cluster.local:8080

Depois de criar o ambiente é só clicar no nome do ambiente e teremos essa tela:

Dessa forma temos um UI de gereciamento para criação de tenants, namespaces e informações sobre tópicos.

Espero que tenham gostado do conteúdo e iremos trazer mais coisas de Apache Pulsar e engenharia de dados no perfil Engenharia de dados Academy.

Continue nos acompanhando para mais conteúdo gratuito e feito para a comunidade de engenharia de dados.

--

--