// Tutorial //

Como instalar o Apache Kafka no Ubuntu 18.04

Published on December 12, 2019
Default avatar
By bsder and Hathy A
Português
Como instalar o Apache Kafka no Ubuntu 18.04

O autor selecionou o Free and Open Source Fund para receber uma doação como parte do programa Write for DOnations.

Introdução

O Apache Kafka é um message broker popularmente distribuído projetado para lidar de forma eficiente com grandes volumes de dados em tempo real. Um cluster Kafka é não só altamente escalável e tolerante a falhas, mas ele também tem uma taxa de transferência muito mais alta comparada com outros message brokers como o ActiveMQ e o RabbitMQ. Embora ele seja geralmente usado como um sistema de mensagens publicar/assinar, muitas organizações também o usam para a agregação de registros porque ele oferece armazenamento persistente para mensagens publicadas.

Um sistema de mensagens publicar/assinar permite que um ou mais produtores publiquem mensagens sem considerar o número de consumidores ou como irão processar as mensagens. Clientes assinantes são notificados automaticamente sobre atualizações e a criação de novas mensagens. Este sistema é mais eficiente e escalável do que sistemas onde clientes questionam periodicamente para determinar se novas mensagens estão disponíveis.

Neste tutorial, você instalará e usará o Apache Kafka 2.1.1 no Ubuntu 18.04.

Pré-requisitos

Para acompanhar, você precisará de:

  • Um servidor Ubuntu 18.04 e um usuário que não seja o root com privilégios sudo. Siga os passos especificados neste guia se não tiver um usuário que não seja root configurado.
  • Pelo menos 4GB de RAM no servidor. As instalações sem essa quantidade de RAM podem fazer com que o serviço Kafka falhe, com a máquina virtual Java (JVM) que lança uma exceção “Fora de Memória” durante a inicialização.
  • OpenJDK 8 instalado no seu servidor. Para instalar essa versão, siga essas instruções sobre a instalação de versões específicas do OpenJDK. O Kafka está escrito em Java, de modo que ele exige um JVM; no entanto, o script de inicialização shell possui um erro de detecção de versão que faz com que ele não comece com versões JVM acima de 8.

Passo 1 — Criando um Usuário para o Kafka

Uma vez que o Kafka pode lidar com pedidos em uma rede, você deve criar um usuário dedicado para ele. Isso minimiza os danos na sua máquina Ubuntu caso o servidor Kafka seja comprometido. Criaremos um usuário **kafka **dedicado neste passo, mas você deve criar um usuário que não seja root para executar outras tarefas neste servidor uma vez que você tenha terminado de configurar o Kafka.

Logado como usuário sudo que não seja root, crie um usuário chamado kafka com o comando useradd:

  1. sudo useradd kafka -m

A flag -m garante que um diretório home seja criada para o usuário. Este diretório home, /home/kafka, agirá como nossa pasta de trabalho para executar comandos nas seções abaixo.

Defina a senha usando passwd:

  1. sudo passwd kafka

Adicione o usuário **kafka **ao grupo sudo com o comando adduser, de modo que ele tenha os privilégios necessários para instalar as dependências do Kafka:

  1. sudo adduser kafka sudo

Seu usuário** kafka** agora está pronto. Logue nesta conta usando su:

  1. su -l kafka

Agora que criamos o usuário específico do Kafka, podemos seguir para o download e extração dos binários Kafka.

Passo 2 — Fazendo download e Extraindo os Binários Kafka

Vamos baixar e extrair os binários Kafka em pastas dedicadas no diretório home do nosso usuário kafka.

Para começar, crie uma pasta em /home/kafka chamada Downloads para armazenar os seus downloads:

  1. mkdir ~/Downloads

Use curl para baixar os binários Kafka:

  1. curl "https://www.apache.org/dist/kafka/2.1.1/kafka_2.11-2.1.1.tgz" -o ~/Downloads/kafka.tgz

Crie um diretório chamado kafka e mude para este diretório. Este é o diretório base da instalação do Kafka:

  1. mkdir ~/kafka && cd ~/kafka

Extraia o arquivo que você baixou usando o comando tar:

  1. tar -xvzf ~/Downloads/kafka.tgz --strip 1

Especificamos a flag --strip 1 para garantir que o conteúdo do arquivo seja extraído efetivamente em ~/kafka/ e não em outro diretório (como ~/kafka/kafka_2.11-2.1.1/) dentro dele.

Agora que baixamos e extraímos os binários com sucesso, podemos começar a configurar para que o Kafka permita que deletemos tópicos.

Passo 3 — Configurando o Servidor do Kafka

O comportamento padrão do Kafka não nos permitirá excluir um um_ tópico_, a categoria, grupo ou nome do feed para os quais mensagens podem ser publicadas. Para modificar isso, vamos editar o arquivo de configuração.

As opções de configuração do Kafka são especificadas em server.properties. Abra este arquivo com o nano ou seu editor favorito:

  1. nano ~/kafka/config/server.properties

Vamos adicionar um valor que nos permitirá excluir tópicos do Kafka. Adicione o seguinte ao final do arquivo:

~/kafka/config/server.properties
delete.topic.enable = true

Salve o arquivo e saia do nano. Agora que configuramos o Kafka, podemos seguir para a criação de arquivos de unidade systemd para a executá-lo e permiti-lo na inicialização.

Passo 4 — Criando Arquivos de Unidade Systemd e Iniciando o Servidor do Kafka

Nesta seção, criaremos arquivos de unidade systemd para o serviço do Kafka. Isso nos ajudará a realizar ações de serviço comuns como iniciar, parar e reiniciar o Kafka de uma maneira consistente com outros serviços do Linux.

O Zookeeper é um serviço que o Kafka usa para gerenciar seu estado de cluster e configurações. É geralmente usado em muitos sistemas distribuídos como um componente integral. Se você quer saber mais sobre isso, visite os documentos Zookeeper oficiais.

Crie o arquivo de unidade para o zookeeper:

  1. sudo nano /etc/systemd/system/zookeeper.service

Digite a seguinte definição de unidade no arquivo:

/etc/systemd/system/zookeeper.service
[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=kafka
ExecStart=/home/kafka/kafka/bin/zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties
ExecStop=/home/kafka/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

A seção [Unit] especifica que o Zookeeper exige conexão em rede e que o sistema de arquivos esteja pronto antes de começar.

A seção [Service] especifica que o systemd deve usar os arquivos de shell zookeeper-server-start.sh e zookeeper-server-start.sh para começar e parar o serviço. Ele também especifica que o Zookeeper deve ser reiniciado automaticamente se ele fechar inexplicavelmente.

A seguir, crie o arquivo de serviço systemd para o kafka:

  1. sudo nano /etc/systemd/system/kafka.service

Digite a seguinte definição de unidade no arquivo:

/etc/systemd/system/kafka.service
[Unit]
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties > /home/kafka/kafka/kafka.log 2>&1'
ExecStop=/home/kafka/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

A seção [Unit] especifica que este arquivo de unidade depende do zookeeper.service. Isso irá garantir que o zookeeper seja iniciado automaticamente quando o serviço kafka começar.

A seção [Service] especifica que o systemd deve usar os arquivos de shell kafka-server-start.sh e kafka-server-stop.sh para começar e parar o serviço. Ele também especifica que o Zookeeper deve ser reiniciado automaticamente se ele fechar inexplicavelmente.

Agora que as unidades foram definidas, inicie o Kafka com o comando a seguir:

  1. sudo systemctl start kafka

Para garantir que o servidor inicializou com sucesso, verifique os registros de diário para a unidade kafka:

  1. sudo journalctl -u kafka

Você deve ver um resultado similar ao seguinte:

Output
Jul 17 18:38:59 kafka-ubuntu systemd[1]: Started kafka.service.

Agora, você tem um servidor do Kafka escutando na porta 9092.

Enquanto inicializávamos o serviço kafka, se nós pudéssemos reiniciar nosso servidor, ele não seria iniciado automaticamente. Para ativar o kafka na inicialização do servidor, execute:

  1. sudo systemctl enable kafka

Agora que começamos e ativamos os serviços, vamos verificar a instalação.

Passo 5 — Testando a Instalação

Vamos publicar e consumir uma mensagem “Hello World” para garantir que o servidor do Kafka está se comportando corretamente. Publicando mensagens no Kafka exige:

  • Um produtor que permite a publicação de registros e dados em tópicos.
  • Um consumidor que lê mensagens e dados de tópicos.

Primeiro, crie um tópico chamado TutorialTopic digitando:

  1. ~/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

Você pode criar um produtor a partir da linha de comando usando o script kafka-console-producer.sh. Ele recebe o nome do host do servidor do Kafka, porta e um nome de tópico como argumentos.

Publique o string "Hello, World" no tópico TutorialTopic digitando:

  1. echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null

A seguir, você pode criar um consumidor no Kafka usando o script kafka-console-consumer.sh. Ele recebe o nome do host e porta do servidor ZooKeeper, junto com um nome de tópico como argumentos.

O comando a seguir consome mensagens do TutorialTopic. Observe o uso da flag --from-beginning que permite o consumo de mensagens que foram publicadas antes do início do consumidor:

  1. ~/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

Se não houver problemas de configuração, você deve ver Hello, World no seu terminal:

Output
Hello, World

O script continuará a executar, esperando que mais mensagens sejam publicadas no tópico. Sinta-se à vontade para abrir um novo terminal e iniciar um produtor para publicar mais algumas mensagens. Você deve poder ver todas elas na saída do consumidor.

Quando você acabar os testes, pressione CTRL+C para parar o script do consumidor. Agora que testamos a instalação, vamos prosseguir para a instalação do KafkaT.

Passo 6 — Instalar o KafkaT (Opcional)

O KafkaT é uma ferramenta do Airbnb que torna mais fácil para você ver detalhes sobre seu cluster do Kafka e executar certas tarefas administrativas da linha de comando. Uma vez que é uma gem Ruby, você precisará do Ruby para usá-la. Você também precisará do pacote build-essential para poder construir outras gems das quais ele depende. Instale-os usando o apt:

  1. sudo apt install ruby ruby-dev build-essential

Agora, você pode instalar o KafkaT usando o comando gem:

  1. sudo gem install kafkat

O KafkaT usa .kafkatcfg como o arquivo de configuração para determinar os diretórios e registro da instalação do seu servidor do Kafka. Ele também deve ter uma entrada apontando o KafkaT para a sua instância ZooKeeper.

Crie um arquivo novo chamado .kafkatcfg:

  1. nano ~/.kafkatcfg

Adicione as linhas a seguir para especificar as informações necessárias sobre o seu servidor do Kafka e a instância do Zookeeper:

~/.kafkatcfg
{
  "kafka_path": "~/kafka",
  "log_path": "/tmp/kafka-logs",
  "zk_path": "localhost:2181"
}

Agora, você está pronto para usar o KafkaT. Para um começo, veja como você usaria ele para ver os detalhes sobre todas as partições do Kafka:

  1. kafkat partitions

Você verá o seguinte resultado:

Output
Topic Partition Leader Replicas ISRs TutorialTopic 0 0 [0] [0] __consumer_offsets 0 0 [0] [0] ... ...

Você verá o TutorialTopic, além de __consumer_offsets, um tópico interno usado pelo Kafka para armazenar informações relacionadas ao cliente. Você pode ignorar com segurança linhas começando com __consumer_offsets.

Para aprender mais sobre o KafkaT, consulte o seu repositório do GitHub.

Passo 7 — Configurando um Cluster Multi-Nodal (Opcional)

Se você quer criar um cluster multi-broker usando mais máquinas Ubuntu 18.04, você deve repetir o passo 1, passo 4, e o passo 5 em cada uma das novas máquinas. Além disso, você deve fazer as seguintes alterações no arquivo server.properties para cada um deles:

  • O valor da propriedade broker.id deve ser alterado de modo que ele seja único ao longo do cluster. Esta propriedade identifica separadamente cada servidor no cluster e pode ter qualquer string como seu valor. Por exemplo, "server1", "server2", etc.

  • O valor da propriedade zookeeper.connect deve ser alterado de modo que todos os nós apontem para a mesma instância do ZooKeeper. Esta propriedade especifica o endereço da instância do Zookeeper e segue o formato :<PORT>. Por exemplo, "203.0.113.0:2181", "203.0.113.1:2181" etc.

Se você quer ter várias instâncias do ZooKeeper para o seu cluster, o valor da propriedade zookeeper.connect em cada nó deve ser uma string idêntica e separada por vírgulas que listem os endereços de IP e os números de porta de todas as instâncias do ZooKeeper.

Passo 8 — Restringindo o Utilizador do Kafka

Agora que todas as instalações estão prontas, você pode remover os privilégios de admin do usuário kafka. Antes de fazer isso, saia e logue novamente como se fosse qualquer outro usuário sudo que não seja root. Se você ainda estiver executando a mesma sessão de shell com a qual você tenha iniciado este tutorial, simplesmente digite exit.

Remova o usuário kafka do grupo sudo:

  1. sudo deluser kafka sudo

Para melhorar ainda mais a segurança do seu servidor Kafka, trave a senha do usuário kafka usando o comando passwd. Isso faz com que ninguém possa logar diretamente no servidor usando essa conta:

  1. sudo passwd kafka -l

Neste ponto, apenas root ou um usuário sudo pode logar como kafka digitando o comando a seguir:

  1. sudo su - kafka

No futuro, se você quer destravá-lo, use passwd com a opção -u:

  1. sudo passwd kafka -u

Agora, você restringiu com sucesso os privilégios de admin do usuário kafka.

Conclusão

Agora, você tem o Apache Kafka funcionando com segurança no seu servidor Ubuntu. Você pode usar isso nos seus projetos criando produtores do Kafka e consumidores usando clientes do Kafka, que estão disponíveis para a maioria das linguagens de programação. Para saber mais sobre o Kafka, você também pode consultar a sua documentação.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors
Default avatar
bsder

author

Developer and author at DigitalOcean.

Default avatar
Hathy A

author

Developer and author at DigitalOcean.

Default avatar
Developer and author at DigitalOcean.

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment
Leave a comment...

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click here to sign up and get $200 of credit to try our products over 60 days!
Try DigitalOcean for free