Pesquisa de site

Como instalar o Apache Kafka no Ubuntu 20.04


O autor selecionou o programa Write for DOnations.

Introdução

RabbitMQ. Embora seja geralmente usado como um sistema de mensagens publish/subscribe, muitas organizações também o usam para agregação de log porque oferece armazenamento persistente para mensagens publicadas.

Um sistema de mensagens de publicação/assinatura permite que um ou mais produtores publiquem mensagens sem considerar o número de consumidores ou como eles processarão as mensagens. Os clientes inscritos são notificados automaticamente sobre atualizações e criação de novas mensagens. Esse sistema é mais eficiente e escalável do que os sistemas em que os clientes pesquisam periodicamente para determinar se novas mensagens estão disponíveis.

Neste tutorial, você instalará e configurará o Apache Kafka 2.8.2 no Ubuntu 20.04.

Pré-requisitos

Para acompanhar você vai precisar de:

  • Um guia de configuração inicial do servidor se você não tiver um usuário não root configurado. Instalações com menos de 4 GB de RAM podem causar falhas no serviço Kafka.
  • Como instalar o Java com APT no Ubuntu 20.04. Kafka é escrito em Java, então requer uma JVM.

Etapa 1 — Criando um usuário para Kafka

Como o Kafka pode lidar com solicitações em uma rede, sua primeira etapa é criar um usuário dedicado para o serviço. Isso minimiza os danos à sua máquina Ubuntu caso alguém comprometa o servidor Kafka. Você criará um usuário kafka dedicado nesta etapa.

Faça login em seu servidor como seu usuário sudo não raiz e crie um usuário chamado kafka:

  1. sudo adduser kafka

Siga as instruções para definir uma senha e criar o usuário kafka.

Em seguida, adicione o usuário kafka ao grupo sudo com o comando adduser. Você precisa destes privilégios para instalar as dependências do Kafka:

  1. sudo adduser kafka sudo

Seu usuário kafka agora está pronto. Faça login na conta kafka usando su:

  1. su -l kafka

Agora que você criou um usuário específico do Kafka, está pronto para baixar e extrair os binários do Kafka.

Etapa 2 — Baixando e extraindo os binários do Kafka

Nesta etapa, você fará o download e extrairá os binários do Kafka em pastas dedicadas no diretório inicial do usuário kafka.

Para começar, crie um diretório em /home/kafka chamado Downloads para armazenar seus downloads:

  1. mkdir ~/Downloads

Use curl para baixar os binários do Kafka:

  1. curl "https://downloads.apache.org/kafka/2.8.2/kafka_2.13-2.8.2.tgz" -o ~/Downloads/kafka.tgz

Crie um diretório chamado kafka e mova para este diretório. Você usará este diretório como o diretório base da instalação do Kafka:

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

Extraia o arquivo baixado usando o comando tar:

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

Você especifica o sinalizador --strip 1 para garantir que o conteúdo do arquivo seja extraído no próprio ~/kafka/ e não em outro diretório (como ~/kafka /kafka_2.13-2.8.2/) dentro dele.

Agora que você baixou e extraiu os binários com sucesso, pode começar a configurar seu servidor Kafka.

Passo 3 — Configurando o Servidor Kafka

Um tópico Kafka é a categoria, grupo ou nome do feed no qual as mensagens podem ser publicadas. No entanto, o comportamento padrão do Kafka não permitirá que você exclua um tópico. Para modificar isso, você deve editar o arquivo de configuração, o que fará nesta etapa.

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

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

Primeiro, adicione uma configuração que permitirá excluir os tópicos do Kafka. Adicione a seguinte linha ao final do arquivo:

delete.topic.enable = true

Segundo, você mudará o diretório onde os logs do Kafka são armazenados modificando a propriedade log.dirs. Encontre a propriedade log.dirs e substitua a rota existente pela rota realçada:

log.dirs=/home/kafka/logs

Salve e feche o arquivo.

Agora que configurou o Kafka, você pode criar arquivos de unidade systemd para executar e habilitar o servidor Kafka na inicialização.

Etapa 4 — Criando arquivos de unidade systemd e iniciando o servidor Kafka

Nesta seção, você criará arquivos unitários systemd para o serviço Kafka. Esses arquivos ajudarão você a executar ações de serviço comuns, como iniciar, parar e reiniciar o Kafka de maneira consistente com outros serviços do Linux.

Kafka usa documentos oficiais do Zookeeper. Você usará o Zookeper como um serviço com esses arquivos de unidade.

Crie o arquivo unit para zookeeper:

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

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

[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 requer que a rede e o sistema de arquivos estejam prontos antes de iniciar.

A seção [Service] especifica que systemd deve usar zookeeper-server-start.sh e zookeeper-server-stop.sh arquivos shell para iniciar e parar o serviço. Ele também especifica que o Zookeeper deve ser reiniciado se for encerrado de forma anormal.

Depois de adicionar este conteúdo, salve e feche o arquivo.

Em seguida, crie o arquivo de serviço systemd para kafka:

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

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

[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 de zookeeper.service, o que garantirá que o zookeeper seja iniciado automaticamente quando o o serviço kafka é iniciado.

A seção [Service] especifica que systemd deve usar kafka-server-start.sh e kafka-server-stop.sh arquivos shell para iniciar e parar o serviço. Ele também especifica que o Kafka deve ser reiniciado se for encerrado de forma anormal.

Salve e feche o arquivo.

Agora que você definiu as unidades, inicie o Kafka com o seguinte comando:

  1. sudo systemctl start kafka

Para garantir que o servidor foi iniciado com sucesso, verifique os logs do diário para a unidade kafka:

  1. sudo systemctl status kafka

Você receberá uma saída como esta:

Output
● kafka.service Loaded: loaded (/etc/systemd/system/kafka.service; disabled; vendor preset> Active: active (running) since Wed 2023-02-01 23:44:12 UTC; 4s ago Main PID: 17770 (sh) Tasks: 69 (limit: 4677) Memory: 321.9M CGroup: /system.slice/kafka.service ├─17770 /bin/sh -c /home/kafka/kafka/bin/kafka-server-start.sh /ho> └─17793 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMill>

Agora você tem um servidor Kafka escutando na porta 9092, que é a porta padrão que o servidor Kafka usa.

Você iniciou o serviço kafka. Mas se você reiniciar seu servidor, o Kafka não reiniciará automaticamente. Para ativar o serviço kafka na inicialização do servidor, execute o seguinte comando:

  1. sudo systemctl enable zookeeper

Você receberá uma resposta informando que um link simbólico foi criado:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/zookeeper.service → /etc/systemd/system/zookeeper.service.

Em seguida, execute este comando:

  1. sudo systemctl enable kafka

Você receberá uma resposta informando que um link simbólico foi criado:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/kafka.service → /etc/systemd/system/kafka.service.

Nesta etapa, você iniciou e ativou os serviços kafka e zookeeper. Na próxima etapa, você verificará a instalação do Kafka.

Etapa 5 — Testando a instalação do Kafka

Nesta etapa, você testará a instalação do Kafka. Você publicará e consumirá uma mensagem Hello World para garantir que o servidor Kafka esteja se comportando conforme o esperado.

A publicação de mensagens no Kafka requer:

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

Para começar, crie um tópico chamado TutorialTopic:

  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 espera o nome do host do servidor Kafka, uma porta e um tópico como argumentos.

Você receberá uma resposta informando que o tópico foi criado:

Output
Created topic TutorialTopic.

Agora publique a string Hello, World no tópico TutorialTopic:

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

Em seguida, crie um consumidor Kafka usando o script kafka-console-consumer.sh. Ele espera o nome de host e a porta do servidor ZooKeeper, juntamente com um nome de tópico, como argumentos. O comando a seguir consome mensagens de TutorialTopic. Observe o uso do sinalizador --from-beginning, que permite o consumo de mensagens que foram publicadas antes do consumidor ser iniciado:

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

Se não houver problemas de configuração, você receberá uma resposta Hello, World em seu terminal:

Output
Hello, World

O script continuará em execução, aguardando a publicação de mais mensagens. Para testar isso, abra uma nova janela de terminal e faça login no seu servidor. Lembre-se de fazer login como seu usuário kafka:

  1. su -l kafka

Neste novo terminal, inicie um produtor para publicar uma segunda mensagem:

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

Esta mensagem será carregada na saída do consumidor em seu terminal original:

Output
Hello, World Hello World from Sammy at DigitalOcean!

Quando terminar o teste, pressione CTRL+C para interromper o script do consumidor em seu terminal original.

Agora você instalou e configurou um servidor Kafka no Ubuntu 20.04. Na próxima etapa, você executará algumas tarefas rápidas para fortalecer a segurança do seu servidor Kafka.

Passo 6 — Fortalecendo o Servidor Kafka

Com a instalação concluída, você pode remover os privilégios de administrador do usuário kafka e fortalecer o servidor Kafka.

Antes de fazer isso, efetue logout e login novamente como qualquer outro usuário sudo não root. Se você ainda estiver executando a mesma sessão de shell com a qual iniciou este tutorial, digite exit.

Remova o usuário kafka do grupo sudo:

  1. sudo deluser kafka sudo

Para melhorar ainda mais a segurança do servidor Kafka, bloqueie a senha do usuário kafka usando o comando passwd. Esta ação garante que ninguém possa fazer login diretamente no servidor usando esta conta:

  1. sudo passwd kafka -l

O sinalizador -l bloqueia o comando para alterar a senha de um usuário (passwd).

Neste ponto, apenas root ou um usuário sudo pode efetuar login como kafka com o seguinte comando:

  1. sudo su - kafka

No futuro, se você quiser desbloquear a capacidade de alterar a senha, use passwd com a opção -u:

  1. sudo passwd kafka -u

Agora você restringiu com sucesso os privilégios de administrador do usuário kafka. Você está pronto para começar a usar o Kafka. Opcionalmente, você pode seguir a próxima etapa, que adicionará o KafkaT ao seu sistema.

Passo 7 — Instalando o KafkaT (opcional)

KafkaT foi desenvolvido para melhorar sua capacidade de visualizar detalhes sobre seu cluster Kafka e executar determinadas tarefas administrativas na linha de comando. Por ser uma gem Ruby, você precisará do Ruby para usá-la. Você também precisará do pacote build-essential para construir as outras gems das quais KafkaT depende.

Instale Ruby e o pacote build-essential usando apt:

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

Agora você pode instalar o KafkaT com o comando gem:

  1. sudo CFLAGS=-Wno-error=format-overflow gem install kafkat

O sinalizador de compilação Wno-error=format-overflow é necessário para suprimir os avisos e erros do Zookeeper durante o processo de instalação do kafkat.

Quando a instalação terminar, você receberá uma resposta informando que está concluída:

Output
... Done installing documentation for json, colored, retryable, highline, trollop, zookeeper, zk, kafkat after 3 seconds 8 gems installed

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

Crie um novo arquivo chamado .kafkatcfg:

  1. nano ~/.kafkatcfg

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

{
  "kafka_path": "~/kafka",
  "log_path": "/home/kafka/logs",
  "zk_path": "localhost:2181"
}

Salve e feche o arquivo. Agora você está pronto para usar o KafkaT.

Para visualizar detalhes sobre todas as partições Kafka, tente executar este comando:

  1. kafkat partitions

Você receberá a seguinte saída:

Output
[DEPRECATION] The trollop gem has been renamed to optimist and will no longer be supported. Please switch to optimist as soon as possible. /var/lib/gems/2.7.0/gems/json-1.8.6/lib/json/common.rb:155: warning: Using the last argument as keyword parameters is deprecated ... Topic Partition Leader Replicas ISRs TutorialTopic 0 0 [0] [0] __consumer_offsets 0 0 [0] [0] ... ...

A saída incluirá TutorialTopic e __consumer_offsets, um tópico interno usado pelo Kafka para armazenar informações relacionadas ao cliente. Você pode ignorar com segurança as linhas que começam com __consumer_offsets.

Para saber mais sobre KafkaT, consulte seu repositório GitHub.

Conclusão

Agora você tem o Apache Kafka rodando com segurança em seu servidor Ubuntu. Você pode integrar Kafka em sua linguagem de programação favorita usando clientes Kafka.

Para saber mais sobre o Kafka, você também pode consultar sua documentação.