Saltar para o conteúdo principal
Versão Next

Configuração do Kafka

O chart tdp-kafka implanta um cluster Apache Kafka gerenciado pelo operador Strimzi, além de uma interface web (Kafka UI) e suporte a conectores Debezium via Kafka Connect.

Visão geral

PropriedadeValor
Charttdp-kafka
Kafka4.1.0
Versão do Chart3.0.0

O que é o Strimzi?

O Strimzi é um operador Kubernetes especializado no ciclo de vida de clusters Kafka. Em vez de gerenciar processos Kafka manualmente, o Strimzi traduz recursos Kubernetes nativos (como KafkaNodePool e Kafka) em brokers configurados, monitorados e atualizados de forma declarativa.

A versão 4.1.0 do chart tdp-kafka opera no modo KRaft (Kafka sem ZooKeeper), disponível desde o Kafka 3.3 e padrão a partir do Kafka 3.7. O KRaft elimina a dependência do ZooKeeper, simplificando a topologia e reduzindo a latência de operações de metadados.

Para saber mais

Consulte Apache Kafka — Conceitos para uma visão completa da ferramenta, sua arquitetura e funcionamento.

Componentes implantados

ComponenteDescrição
Cluster KafkaBrokers e controllers gerenciados pelo Strimzi via KafkaNodePool
Entity OperatorGerencia KafkaTopic e KafkaUser como recursos Kubernetes
Kafka UIInterface web para monitoramento, navegação de tópicos e mensagens
Kafka ConnectInfraestrutura para conectores Debezium (CDC) — opcional

Pré-requisitos

  • Kubernetes 1.27+
  • Helm 3.2.0+
  • StorageClass disponível com capacidade suficiente para os volumes dos brokers

Instalação (OCI)

Terminal input
helm install <release> \
oci://registry.tecnisys.com.br/tdp/charts/tdp-kafka \
-n <namespace> --create-namespace

Configuração do cluster Kafka

Node Pool

No Strimzi com KRaft, os nós do cluster são declarados em Node Pools (KafkaNodePool). Cada pool define a quantidade de réplicas, os papéis exercidos pelos nós e o armazenamento.

nodePool:
name: brokers
replicas: 4
roles: ["controller", "broker"]
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: true
kraftMetadata: shared
CampoDescrição
rolesUm nó pode ser controller, broker ou ambos. Em clusters pequenos, combine os dois papéis. Em clusters grandes, separe-os em pools distintos
storage.type: jbodJBOD (Just a Bunch of Disks) permite múltiplos volumes por nó, maximizando throughput de I/O
deleteClaim: trueOs PVCs serão excluídos ao remover o NodePool. Defina false em produção se quiser preservar os dados
kraftMetadata: sharedIndica que este volume também armazena metadados KRaft
Dimensionamento em produção

Com 4 réplicas combinando controller e broker, o quórum KRaft e a replicação de dados coexistem nos mesmos nós. Para cargas intensas, considere pools separados: um pool de controllers (3 réplicas) e um pool de brokers (quantos forem necessários).

Versão e metadados

name: tdp-kafka
kafkaVersion: 4.1.0
metadataVersion: 4.1-IV1
clusterLabel: "tdp"

O campo metadataVersion corresponde ao inter-broker protocol version do KRaft. Mantenha-o alinhado à kafkaVersion durante instalações novas. Em atualizações, aumente apenas após todos os brokers estarem na nova versão.

Listeners

Os listeners definem os pontos de entrada do cluster para produtores e consumidores.

listeners:
plain:
enabled: true
port: 9092
tls:
enabled: true
port: 9093
ListenerPortaQuando usar
plain9092Comunicação interna ao cluster, ambientes de desenvolvimento ou redes privadas confiáveis
tls9093Comunicação sobre redes não confiáveis ou quando clientes exigem criptografia em trânsito

O nome do serviço de bootstrap segue a convenção Strimzi: <name>-kafka-bootstrap. Exemplo com o nome padrão tdp-kafka:

  • Plain: tdp-kafka-kafka-bootstrap:9092
  • TLS: tdp-kafka-kafka-bootstrap:9093

Replicação e durabilidade

config:
offsets.topic.replication.factor: 3
transaction.state.log.replication.factor: 3
transaction.state.log.min.isr: 2
default.replication.factor: 3
min.insync.replicas: 2

Estes parâmetros determinam o equilíbrio entre durabilidade e disponibilidade:

ParâmetroSignificado
default.replication.factor: 3Cada tópico terá 3 cópias distribuídas em brokers distintos
min.insync.replicas: 2Um produtor com acks=all só recebe confirmação quando ao menos 2 réplicas estiverem sincronizadas. Tolera a perda de 1 broker sem perda de dados
offsets.topic.replication.factor: 3Controla a durabilidade dos offsets dos consumidores (tópico interno __consumer_offsets)
transaction.state.log.*Durabilidade do log de transações (produção transacional / exactly-once)
Clusters menores

Em ambientes com menos de 3 brokers, reduza *.replication.factor e min.insync.replicas ao número real de nós. Manter fatores maiores que o número de brokers impede a criação de tópicos.

Entity Operator

entityOperator:
enabled: true

O Entity Operator é um componente do Strimzi que observa recursos KafkaTopic e KafkaUser no namespace e os reconcilia com o cluster. Com ele habilitado, tópicos e usuários podem ser gerenciados de forma declarativa como manifests Kubernetes, sem acesso direto à API administrativa do Kafka.

Kafka UI

O Kafka UI oferece uma interface gráfica para inspecionar tópicos, visualizar mensagens, monitorar grupos de consumidores e acompanhar métricas básicas do cluster.

kafka-ui:
enabled: true
yamlApplicationConfig:
kafka:
clusters:
- name: TDP
bootstrapServers: <kafka-cluster-name>-kafka-bootstrap:9092
properties:
security.protocol: PLAINTEXT
auth:
type: LOGIN_FORM
spring:
security:
user:
name: admin
password: <ui-password>
service:
type: ClusterIP
port: 80
nodePort: 30081

Substitua <kafka-cluster-name> pelo valor de name definido no cluster (ex.: tdp-kafka) e <ui-password> por uma senha segura.

Senha padrão

A senha admin (padrão do chart) não deve ser mantida em ambientes acessíveis fora da rede interna. Troque antes de expor a interface.

Acesso

Port-forward (Kafka UI)

Terminal input
kubectl port-forward -n <namespace> svc/kafka-ui 8080:80

Acesse em http://localhost:8080.

NodePort (Kafka UI)

Terminal input
kubectl get nodes -o wide

Acesse em http://<node-ip>:30081 (ou a porta configurada em service.nodePort).

Bootstrap para produtores e consumidores

# Plain
<kafka-cluster-name>-kafka-bootstrap:9092

# TLS
<kafka-cluster-name>-kafka-bootstrap:9093

Kafka Connect / Debezium

O chart suporta conectores Debezium para captura de dados em tempo real (CDC) a partir de bancos relacionais. A configuração é feita sob kafkaConnects.*.

Documentação detalhada

Consulte Integrações — Kafka para exemplos completos de cada tipo de conector (PostgreSQL, MySQL, SQL Server, Oracle) e gestão de credenciais.

Autenticação da UI

Documentação detalhada

Consulte Segurança — Kafka para configurar autenticação LOGIN_FORM ou LDAP na interface web.

Solução de problemas

Terminal input
# Status dos pods do cluster
kubectl -n <namespace> get pods -l cluster=tdp

# Estado do cluster Kafka (recurso CRD)
kubectl -n <namespace> get kafkas

# Logs da Kafka UI
kubectl -n <namespace> logs -l app.kubernetes.io/name=kafka-ui

# Estado dos conectores Debezium
kubectl -n <namespace> get kafkaconnectors

# Detalhes do cluster
kubectl -n <namespace> describe kafka <kafka-cluster-name>

Desinstalação

Terminal input
helm uninstall <release> -n <namespace>

Parâmetros principais

ParâmetroDescriçãoValor padrão
nameNome do cluster Kafkatdp-kafka
kafkaVersionVersão do Kafka4.1.0
metadataVersionVersão de metadados KRaft4.1-IV1
clusterLabelLabel do clustertdp
listeners.plain.enabledListener plain habilitadotrue
listeners.plain.portPorta do listener plain9092
listeners.tls.enabledListener TLS habilitadotrue
listeners.tls.portPorta do listener TLS9093
config.default.replication.factorFator de replicação padrão dos tópicos3
config.min.insync.replicasMínimo de réplicas síncronas2
entityOperator.enabledEntity Operator habilitadotrue
nodePool.replicasNúmero de brokers/controllers4
nodePool.storage.volumes[0].sizeTamanho do volume por nó100Gi
kafka-ui.enabledKafka UI habilitadatrue
kafka-ui.service.typeTipo do serviço da UIClusterIP