ULC Lab · implementação reproduzível
Laboratório: Pipeline Kafka com Integração PostgreSQL
Você implementará um pipeline de dados real-time usando Apache Kafka, integrando um produtor, um consumidor e uma base PostgreSQL. O laboratório leva cerca de 2 horas e meia.

- Duração estimada
- 150 min
- Passos
- 14
- Validações
- 4
- Versões da documentação consultada
- Apache Kafka 3.6.0 · Apache ZooKeeper 3.8.3 · PostgreSQL 15 · Kafka Connect JDBC consulte a documentação · OpenJDK 17
Este laboratório ensina como instalar e operar um cluster Kafka de nó único, criar tópicos, enviar e consumir mensagens, e integrar com um banco PostgreSQL usando Kafka Connect. O objetivo é demonstrar, em ambiente controlado, como dados podem fluir de uma aplicação para um banco via Kafka, simulando cenários comuns em redes de fibra dedicadas como a da Upnetix.
Topologia
Três máquinas virtuais (ou três containers): uma para o Kafka e ZooKeeper, uma para o PostgreSQL, e uma para o produtor/consumidor de mensagens. O produtor envia dados para o Kafka, que repassa ao consumidor e ao PostgreSQL via Kafka Connect. Endereços de exemplo: Kafka/ZooKeeper (192.168.56.10), PostgreSQL (192.168.56.11), Cliente (192.168.56.12).
+----------------+ +-----------+ +----------------+
| Produtor CLI |-----> | Kafka |-----> | Consumidor |
| (192.168.56.12)| |(192.168.56.10)| | (192.168.56.12)|
+----------------+ +-----------+ +----------------+
|
v
+-------------+
| PostgreSQL |
|(192.168.56.11)|
+-------------+
Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| Máquina virtual para Kafka/ZooKeeper | 2 vCPU, 2GB RAM, porta 9092 e 2181 abertas, Ubuntu 22.04 ou similar |
| Máquina virtual para PostgreSQL | 1 vCPU, 1GB RAM, porta 5432 aberta, Ubuntu 22.04 ou similar |
| Máquina virtual para cliente | 1 vCPU, 1GB RAM, Ubuntu 22.04 ou similar |
| Apache Kafka | Apache 2.0 · 3.6.0 |
| Apache ZooKeeper | Apache 2.0 · 3.8.3 |
| PostgreSQL | PostgreSQL · 15 |
| Kafka Connect JDBC | Apache 2.0 · consulte a documentação |
| OpenJDK | GPLv2 + Classpath Exception · 17 |
Roteiro
- Preparar ambiente e hosts
Configure as três VMs ou containers com os endereços IP privados sugeridos. Garanta conectividade de rede entre elas.
O que você deve ver: Ping entre as máquinas responde normalmente.
- Instalar Java (OpenJDK 17) em todas as VMs
O Kafka e o Kafka Connect rodam sobre JVM. Instale o OpenJDK 17.
sudo apt update && sudo apt install openjdk-17-jdk -yO que você deve ver: java -version retorna versão 17.
- Instalar e configurar ZooKeeper
O Kafka depende do ZooKeeper para coordenação. Instale e inicie o serviço.
sudo apt install zookeeperd -y sudo systemctl enable --now zookeeperO que você deve ver: systemctl status zookeeper mostra o serviço ativo.
- Instalar Apache Kafka
Baixe e extraia o Kafka na VM designada. Não use pacotes do sistema, prefira o binário oficial.
wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz tar -xzf kafka_2.13-3.6.0.tgz cd kafka_2.13-3.6.0O que você deve ver: Diretório kafka_2.13-3.6.0 criado com binários.
- Configurar e iniciar o Kafka
Edite o server.properties para ajustar o listeners ao IP da VM. Inicie o Kafka apontando para o ZooKeeper.
nano config/server.properties # Altere listeners=PLAINTEXT://192.168.56.10:9092 bin/kafka-server-start.sh -daemon config/server.propertiesO que você deve ver: netstat -tulnp | grep 9092 mostra o Kafka ouvindo.
- Instalar PostgreSQL e criar banco/tabela
No host do PostgreSQL, instale o banco e crie um banco de testes e tabela para ingestão.
sudo apt install postgresql -y sudo -u postgres psql -c "CREATE DATABASE kafkatest;" sudo -u postgres psql -d kafkatest -c "CREATE TABLE messages (id SERIAL PRIMARY KEY, content TEXT);"O que você deve ver: \dt no psql mostra a tabela messages.
- Testar conexão do Kafka com PostgreSQL
Garanta que a porta 5432 está acessível do host Kafka.
psql -h 192.168.56.11 -U postgres -d kafkatestO que você deve ver: Conexão estabelecida sem erro.
- Instalar Kafka Connect e plugin JDBC
Kafka Connect permite integração com bancos. Baixe o conector JDBC e extraia em plugins.
cd kafka_2.13-3.6.0 mkdir plugins # Baixe o JDBC Connector (consulte a documentação para a versão): wget https://packages.confluent.io/maven/io/confluent/kafka-connect-jdbc/ # complete o link conforme a versão unzip kafka-connect-jdbc-*.zip -d plugins/O que você deve ver: plugins/kafka-connect-jdbc-* criado com arquivos .jar.
- Iniciar Kafka Connect
Inicie o Kafka Connect standalone apontando para o plugin JDBC.
bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.propertiesO que você deve ver: Kafka Connect inicializa e aguarda jobs.
- Criar tópico Kafka
Crie um tópico chamado test-messages para o pipeline.
bin/kafka-topics.sh --create --topic test-messages --bootstrap-server 192.168.56.10:9092 --partitions 1 --replication-factor 1O que você deve ver: Mensagem de sucesso de criação do tópico.
- Configurar Kafka Connect Sink para PostgreSQL
Crie um arquivo JSON de configuração para o conector JDBC apontando para o PostgreSQL.
nano jdbc-sink.json # Exemplo básico: { "name": "jdbc-sink", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector", "tasks.max": "1", "topics": "test-messages", "connection.url": "jdbc:postgresql://192.168.56.11:5432/kafkatest", "connection.user": "postgres", "connection.password": "<senha>", "auto.create": "true", "insert.mode": "insert", "table.name.format": "messages" } } curl -X POST -H "Content-Type: application/json" --data @jdbc-sink.json http://localhost:8083/connectorsO que você deve ver: Retorno JSON com status do conector.
- Produzir mensagens via CLI
No host cliente, envie mensagens para o tópico usando o console producer.
bin/kafka-console-producer.sh --broker-list 192.168.56.10:9092 --topic test-messages > Olá Kafka > Mensagem 2O que você deve ver: Mensagens aceitas sem erro.
- Consumir mensagens via CLI
No host cliente, consuma mensagens do tópico para validar o fluxo.
bin/kafka-console-consumer.sh --bootstrap-server 192.168.56.10:9092 --topic test-messages --from-beginningO que você deve ver: Mensagens enviadas aparecem no terminal.
- Validar ingestão no PostgreSQL
No PostgreSQL, confira se as mensagens chegaram na tabela.
sudo -u postgres psql -d kafkatest -c "SELECT * FROM messages;"O que você deve ver: Linhas com o conteúdo das mensagens produzidas.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Kafka está ouvindo na porta 9092 | netstat -tulnp | grep 9092 | Porta 9092 em LISTEN |
| Tópico criado com sucesso | bin/kafka-topics.sh --list --bootstrap-server 192.168.56.10:9092 | test-messages aparece na lista |
| Produtor envia e consumidor recebe mensagens | bin/kafka-console-consumer.sh --bootstrap-server 192.168.56.10:9092 --topic test-messages --from-beginning | Mensagens digitadas no producer aparecem no consumer |
| Mensagens gravadas no PostgreSQL | sudo -u postgres psql -d kafkatest -c "SELECT * FROM messages;" | Mensagens aparecem como linhas na tabela |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Kafka não inicia | Configuração do listeners errada ou porta em uso | Verifique server.properties e se a porta 9092 está livre |
| Kafka Connect não encontra plugin JDBC | Diretório de plugins não configurado corretamente | Confirme o caminho e permissões dos arquivos .jar |
| Conector JDBC retorna erro de autenticação | Usuário ou senha do PostgreSQL incorretos | Ajuste as credenciais no arquivo de configuração do conector |
| Mensagens não aparecem no PostgreSQL | Conector não está ativo ou tópico errado | Verifique status do conector e nome do tópico |
| Produtor não conecta ao Kafka | Firewall ou listeners incorretos | Confirme IP/porta e regras de firewall |
Segurança e hardening
- Não use senhas padrão em produção
- Restrinja acesso às portas 9092, 2181 e 5432 apenas às máquinas necessárias
- Remova arquivos de configuração sensíveis após o uso
- Considere TLS e autenticação SASL para Kafka em ambientes reais
Checklist final
Referências
- Apache Kafka Quickstart · Apache Software Foundation (Kafka) (kafka.apache.org)
- Kafka Connect JDBC Connector · Confluent (docs.confluent.io)
- Apache ZooKeeper Documentation · Apache Software Foundation (ZooKeeper) (zookeeper.apache.org)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 3 oficiais
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
