Integrações — Kafka
Visão geral das integrações
Esta página descreve como configurar integrações com o Apache Kafka instalado através do chart tdp-kafka.
O chart implanta um cluster Kafka gerido pelo operador Strimzi e, opcionalmente, conectores Debezium para captura de dados em tempo real (Change Data Capture — CDC).
Para configurações de autenticaç ão e segurança (LDAP, TLS, LDAP na Kafka UI), consulte Segurança — Kafka.
Além do CDC via Debezium, o Kafka também se integra com outros três componentes da plataforma:
- Trino: consulte o conector Kafka para consultar tópicos via SQL.
- OpenMetadata: o Kafka pode ser registado como Messaging Service — consulte Integrações — OpenMetadata.
- Ranger: as políticas de acesso aos tópicos podem ser centralizadas via
rangerIntegrations.kafka— consulte Integrações — Ranger.
Kafka Connect e Debezium
O chart tdp-kafka suporta a criação de clusters Kafka Connect com conectores Debezium para CDC de bases de dados relacionais.
O Debezium captura eventos de alteração (INSERT, UPDATE, DELETE) da base de dados e publica-os em tópicos Kafka.
Bases de dados suportadas
| Tipo | Chave em kafkaConnects | Base de dados |
|---|---|---|
| PostgreSQL | kafkaConnects.postgres | PostgreSQL |
| MySQL | kafkaConnects.mysql | MySQL / MariaDB |
| SQL Server | kafkaConnects.sqlserver | Microsoft SQL Server |
| Oracle | kafkaConnects.oracle | Oracle Database |
Como activar um conector
Para cada base de dados que pretende monitorizar:
- Active o tipo de conector com
kafkaConnects.<CONNECTOR_TYPE>.enabled: true. - Configure o cluster Kafka Connect em
kafkaConnects.<CONNECTOR_TYPE>.connect. - Configure os conectores individuais em
kafkaConnects.<CONNECTOR_TYPE>.connectors. - Defina as credenciais da base de dados utilizando
createSecretousecretName.
Endereço interno do cluster Kafka
O parâmetro bootstrapServers define o endereço interno do cluster Kafka ao qual o Kafka Connect se liga.
Quando o chart tdp-kafka é instalado com o release name tdp-kafka no mesmo namespace, o endereço predefinido é:
bootstrapServers: tdp-kafka-kafka-bootstrap:9092
Se o release name ou namespace forem diferentes, ajuste o valor de bootstrapServers em conformidade.
Gestão de credenciais
O chart oferece duas formas de fornecer credenciais da base de dados ao conector:
| Opção | Parâmetros | Recomendação |
|---|---|---|
| Secret criado pelo chart | createSecret: true + user + password | Apenas em ambientes de teste; evitar em produção |
| Secret existente | createSecret: false + secretName | Recomendado para produção |
values.yamlAo usar createSecret: true, a palavra-passe é fornecida como parâmetro Helm.
Nunca faça commit de palavras-passe em texto simples em ficheiros values.yaml versionados no Git.
Em produção, prefira createSecret: false com um Kubernetes Secret pré-existente referenciado via secretName.
Exemplo: conector PostgreSQL com Secret existente
Este exemplo utiliza um Kubernetes Secret pré-existente para as credenciais da base de dados, evitando palavras-passe em texto simples no values.yaml.
1. Crie o Secret com as credenciais da base de dados:
kubectl -n <NAMESPACE> create secret generic <DEBEZIUM_SECRET_NAME> \
--from-literal=username='<DATABASE_USER>' \
--from-literal=password='<PASSWORD>'
2. Configure o conector no values.yaml:
kafkaConnects:
postgres:
enabled: true
connect:
name: connect-debezium-postgres
replicas: 1
bootstrapServers: tdp-kafka-kafka-bootstrap:9092
kafkaVersion: "4.1.0"
connectors:
appdb:
enabled: true
name: debezium-postgres-<APPLICATION_NAME>
topicPrefix: "<TOPIC_PREFIX>"
postgres:
createSecret: false
secretName: "<DEBEZIUM_SECRET_NAME>"
host: "<DATABASE_HOST>.<DB_NAMESPACE>.svc.cluster.local"
port: "5432"
dbname: "<DATABASE_NAME>"
- Substitua
<TOPIC_PREFIX>pelo prefixo desejado para os tópicos Kafka gerados pelo conector (ex.:pgapp). - O campo
hostdeve referenciar o serviço Kubernetes da base de dados — normalmente no formato<SERVICE_NAME>.<NAMESPACE>.svc.cluster.local. kafkaVersiondeve ser compatível com a versão do cluster Kafka instalado (verappVersionnoChart.yamldotdp-kafka).
Exemplo: conector MySQL com Secret existente
kafkaConnects:
mysql:
enabled: true
connect:
name: connect-debezium-mysql
replicas: 1
bootstrapServers: tdp-kafka-kafka-bootstrap:9092
kafkaVersion: "4.1.0"
connectors:
appdb:
enabled: true
name: debezium-mysql-<APPLICATION_NAME>
topicPrefix: "<TOPIC_PREFIX>"
mysql:
createSecret: false
secretName: "<DEBEZIUM_SECRET_NAME>"
host: "<DATABASE_HOST>.<DB_NAMESPACE>.svc.cluster.local"
port: "3306"
databaseIncludeList: "<DATABASE_NAME>"
Exemplo: conetor SQL Server com Secret existente
kafkaConnects:
sqlserver:
enabled: true
connect:
name: connect-debezium-sqlserver
replicas: 1
bootstrapServers: tdp-kafka-kafka-bootstrap:9092
kafkaVersion: "4.1.0"
connectors:
appdb:
enabled: true
name: debezium-sqlserver-<APPLICATION_NAME>
topicPrefix: "<TOPIC_PREFIX>"
sqlserver:
createSecret: false
secretName: "<DEBEZIUM_SECRET_NAME>"
host: "<DATABASE_HOST>.<DB_NAMESPACE>.svc.cluster.local"
port: "1433"
databaseNames: "<DATABASE_NAME>"
Exemplo: conetor Oracle com Secret existente
kafkaConnects:
oracle:
enabled: true
connect:
name: connect-debezium-oracle
replicas: 1
bootstrapServers: tdp-kafka-kafka-bootstrap:9092
kafkaVersion: "4.1.0"
connectors:
appdb:
enabled: true
name: debezium-oracle-<APPLICATION_NAME>
topicPrefix: "<TOPIC_PREFIX>"
oracle:
createSecret: false
secretName: "<DEBEZIUM_SECRET_NAME>"
host: "<DATABASE_HOST>.<DB_NAMESPACE>.svc.cluster.local"
port: "1521"
dbname: "<CDB_NAME>"
pdbName: "<PDB_NAME>"
Validação dos conectores
Após a instalação, verifique se os recursos foram criados correctamente:
kubectl get kafkaconnect -n <NAMESPACE>
kubectl get kafkaconnector -n <NAMESPACE>
Para ver os detalhes de um conector específico:
kubectl describe kafkaconnector <CONNECTOR_NAME> -n <NAMESPACE>
Para ver os registos do pod Kafka Connect:
kubectl logs -n <NAMESPACE> -l strimzi.io/cluster=<CONNECT_NAME> --tail=100
Os recursos KafkaConnect e KafkaConnector são CRDs do Strimzi.
Certifique-se de que o chart tdp-crds está instalado antes de activar conectores Debezium.
Consulte Instalação via Helm para a ordem de instalação dos charts.