O autor selecionou o Free and Open Source Fund para receber uma doação como parte do programa Write for DOnations.
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.
Para acompanhar, você precisará de:
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
:
- 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
:
- 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:
- sudo adduser kafka sudo
Seu usuário** kafka** agora está pronto. Logue nesta conta usando su
:
- 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.
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:
- mkdir ~/Downloads
Use curl
para baixar os binários Kafka:
- 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:
- mkdir ~/kafka && cd ~/kafka
Extraia o arquivo que você baixou usando o comando tar
:
- 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.
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:
- nano ~/kafka/config/server.properties
Vamos adicionar um valor que nos permitirá excluir tópicos do Kafka. Adicione o seguinte ao final do arquivo:
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.
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
:
- sudo nano /etc/systemd/system/zookeeper.service
Digite 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 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
:
- sudo nano /etc/systemd/system/kafka.service
Digite 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 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:
- sudo systemctl start kafka
Para garantir que o servidor inicializou com sucesso, verifique os registros de diário para a unidade kafka
:
- sudo journalctl -u kafka
Você deve ver um resultado similar ao seguinte:
OutputJul 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:
- sudo systemctl enable kafka
Agora que começamos e ativamos os serviços, vamos verificar 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:
Primeiro, crie um tópico chamado TutorialTopic
digitando:
- ~/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:
- 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:
- ~/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:
OutputHello, 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.
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
:
- sudo apt install ruby ruby-dev build-essential
Agora, você pode instalar o KafkaT usando o comando gem:
- 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
:
- 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:
{
"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:
- kafkat partitions
Você verá o seguinte resultado:
OutputTopic 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.
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.
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:
- 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:
- sudo passwd kafka -l
Neste ponto, apenas root ou um usuário sudo pode logar como kafka
digitando o comando a seguir:
- sudo su - kafka
No futuro, se você quer destravá-lo, use passwd
com a opção -u
:
- sudo passwd kafka -u
Agora, você restringiu com sucesso os privilégios de admin do usuário kafka.
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.
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!