Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste guia, analisamos os pré-requisitos, as considerações de arquitetura e os principais componentes para implantar e operar um cluster Apache Kafka altamente disponível no Serviço Kubernetes do Azure (AKS) usando o Operador Strimzi.
Importante
O software de código aberto é mencionado em toda a documentação e amostras do AKS. O software que você implanta é excluído dos contratos de nível de serviço do AKS, da garantia limitada e do suporte do Azure. Ao usar a tecnologia de código aberto ao lado do AKS, consulte as opções de suporte disponíveis nas respetivas comunidades e mantenedores do projeto para desenvolver um plano.
A Microsoft assume a responsabilidade pela criação dos pacotes de código aberto que implantamos no AKS. Essa responsabilidade inclui ter a propriedade completa do processo de compilação, digitalização, assinatura, validação e correção rápida, juntamente com o controlo dos binários nas imagens de contentor. Para obter mais informações, consulte Gestão de vulnerabilidades para AKS e Cobertura de suporte AKS.
O que é Apache Kafka e Strimzi?
O Apache Kafka é uma plataforma de streaming de eventos distribuídos de código aberto projetada para lidar com dados de streaming de alto volume, alta taxa de transferência e tempo real. Como resultado, ele é usado por milhares de empresas para pipelines de dados de alto desempenho, análises de streaming, integração de dados e aplicativos de missão crítica. No entanto, gerenciar e dimensionar clusters Kafka pode ser desafiador e, muitas vezes, demorado.
Strimzi é um projeto de código aberto que simplifica a implantação, gerenciamento e operação do Apache Kafka no Kubernetes. Ele fornece um conjunto de Operadores Kubernetes e imagens de contêiner que automatizam tarefas operacionais complexas do Kafka por meio de configuração declarativa.
Os operadores Strimzi seguem o padrão de operador Kubernetes para automatizar as operações Kafka. Ele reconcilia continuamente o estado declarado dos componentes de Kafka com seu estado real, lidando com tarefas operacionais complexas automaticamente.
Para saber mais sobre Strimzi, consulte a documentação do Strimzi.
Componentes
Operador de cluster Strimzi
O Operador de Cluster Strimzi é o componente central que gerencia todo o ecossistema Kafka. Quando implantado, ele também pode provisionar o Operador de Entidade, que consiste em:
-
Operador de tópico: Automatiza a criação, modificação e exclusão de tópicos Kafka com base em
KafkaTopicrecursos personalizados. -
Operador de Usuário: Gerencia usuários Kafka e suas Listas de Controle de Acesso (ACLs) através de
KafkaUserrecursos personalizados.
Juntos, esses operadores criam um sistema de gerenciamento totalmente declarativo onde sua infraestrutura Kafka é definida como recursos do Kubernetes que você pode controlar a versão, auditar e implantar consistentemente em todos os ambientes.
Aglomerado de Kafka
O Operador de Cluster Strimzi gerencia clusters Kafka por meio de recursos personalizados especializados:
- KafkaNodePools: Defina grupos de nós Kafka com funções específicas (broker, controller ou ambos).
- Kafka: O principal recurso personalizado que une tudo, definindo configurações em todo o cluster.
Uma implantação típica de KafkaNodePools e Kafka inclui:
- Nós dedicados do broker que lidam com o tráfego de utilizadores e armazenamento de dados.
- Nós de controlo dedicados que gerem a coordenação e os metadados do cluster.
- Várias réplicas de cada componente distribuídas entre zonas de disponibilidade.
Controlo de Velocidade de Cruzeiro
O Cruise Control é um componente avançado que fornece balanceamento e monitoramento automatizados de carga de trabalho para clusters Kafka. Quando implantado como parte de um cluster Kafka gerenciado por Strimzi, o Cruise Control oferece:
- Reequilíbrio automatizado de partições: redistribui partições entre corretores para otimizar a utilização de recursos.
- Deteção de anomalias: identifica e alerta sobre o comportamento anormal do cluster.
- Capacidades de autocorreção: Resolve automaticamente problemas comuns de desequilíbrio de cluster.
- Análise de carga de trabalho: fornece informações sobre o desempenho do cluster e o uso de recursos.
O Cruise Control ajuda a manter o desempenho ideal à medida que sua carga de trabalho muda ao longo do tempo, reduzindo a necessidade de intervenção manual durante eventos de dimensionamento ou após falhas do corretor.
Limpador de Drenos
Strimzi Drain Cleaner é um utilitário projetado para ajudar a gerenciar pods de corretor Kafka implantados por Strimzi durante a drenagem do nó Kubernetes. Strimzi Drain Cleaner interceta as operações de drenagem dos nós Kubernetes através do seu webhook de admissão para coordenar uma manutenção sem interrupções de clusters Kafka. Quando é feita uma solicitação de despejo para pods de corretor Kafka, a solicitação é detectada e o Sistema de Limpeza anota os pods para sinalizar ao Operador de Cluster Strimzi para lidar com a reinicialização, garantindo que o cluster Kafka permaneça em um estado saudável. Esse processo mantém a integridade do cluster e a confiabilidade dos dados durante operações de manutenção de rotina ou falhas inesperadas do nó.
Quando usar Kafka no AKS
Considere executar Kafka no AKS quando:
- Você precisa de controle total sobre a configuração e as operações do Kafka.
- Seu caso de uso requer recursos específicos do Kafka que não estão disponíveis em ofertas gerenciadas.
- Você deseja integrar o Kafka com outros aplicativos em contêineres executados no AKS.
- Você precisa implantar em regiões onde os serviços Kafka gerenciados não estão disponíveis.
- Sua organização tem experiência existente em Kubernetes e orquestração de contêineres.
Para casos de uso mais simples ou quando a sobrecarga operacional for uma preocupação, considere serviços totalmente gerenciados, como Hubs de Eventos do Azure.
Considerações principais sobre o Kafka no AKS
Armazenamento de Discos do Azure
Para implantações do Kafka no AKS, usamos o driver Azure Disk CSI, que fornece volumes persistentes apoiados por discos gerenciados do Azure. Strimzi aproveita a configuração (Just a Bunch of Disks (JBOD) para gerenciar a persistência de dados.
Para garantir alta disponibilidade em falhas de infraestrutura, as classes de armazenamento devem ser configuradas com discos Premium SSD v2 distribuídos pelas zonas de disponibilidade usando o modo de ligação de volume WaitForFirstConsumer. Isso garante que os pods sejam programados em zonas onde seus volumes persistentes podem ser criados. O SSD Premium v2 pode oferecer a latência, IOPS alta e taxa de transferência consistente exigida por cargas de trabalho Kafka intensivas em IO com uma estrutura de custos otimizada.
A tabela seguinte fornece pontos de partida para configurações de SSD Premium v2 em diferentes tamanhos de cluster Kafka:
| Tamanho do cluster Kafka | Tamanho do disco | IOPS | Bandwidth |
|---|---|---|---|
|
Pequeno (3-9 corretores) |
1 TB | 5.000 | 250 MB/s |
|
Média (10-19 corretores) |
2 TB | 10.000 | 500 MB/s |
|
Grande (20+ corretores) |
Capacidade de armazenamento de 4 TB | 20 000 | 1.000 MB/s |
O IOPS real necessário, a largura de banda e o tamanho do disco variam de acordo com as características específicas da carga de trabalho do Kafka. Essas propriedades podem evoluir ao longo do tempo à medida que os requisitos de taxa de transferência e retenção do seu aplicativo mudam.
Conjuntos de nós
Selecionar os pools de nós apropriados para sua implantação do Kafka no AKS é uma decisão arquitetônica crítica que afeta diretamente o desempenho, a disponibilidade e a eficiência de custos. As cargas de trabalho Kafka têm padrões exclusivos de utilização de recursos — caracterizados por altas demandas de throughput, intensidade de E/S de armazenamento e a necessidade de desempenho consistente sob cargas variáveis. Kafka normalmente consome mais memória do que CPU. No entanto, os requisitos de CPU podem aumentar significativamente com a compactação/descompactação de mensagens, criptografia SSL/TLS ou cenários de alta taxa de transferência com muitas mensagens pequenas.
Considerando a arquitetura nativa do Kubernetes de Strimzi, onde cada broker Kafka é executado como um pod individual, a sua estratégia de seleção de nodes no AKS deve optimizar o dimensionamento horizontal, em vez de focar no dimensionamento vertical de um único nó. A configuração adequada do pool de nós no AKS garante a utilização eficiente de recursos, mantendo o isolamento de desempenho que os componentes Kafka exigem para operar de forma confiável.
O Kafka é executado usando uma JVM (Java Virtual Machines). O ajuste da JVM é fundamental para o desempenho ideal do Kafka, especialmente em ambientes de produção. O LinkedIn, os criadores do Kafka, compartilhou os argumentos típicos para executar o Kafka em Java para um dos clusters mais movimentados do LinkedIn: Kafka Java Configuration.
Para este guia, uma pilha de memória de 6 GB será usada como linha de base para corretores, com 2 GB adicionais alocados para acomodar o uso de memória fora da pilha. Para controladores, uma pilha de memória de 3GB será usada como referência, com 1GB adicional como sobrecarga.
Ao dimensionar VMs para sua implantação do Kafka, considere estes fatores específicos da carga de trabalho:
| Fator de carga de trabalho | Impacto no dimensionamento | Considerações |
|---|---|---|
| Taxa de transferência de mensagens | Uma taxa de transferência mais alta requer mais CPU, memória e capacidade de rede. | - Monitorar bytes de entrada e saída por segundo. - Considere o pico versus o rendimento médio. - Ter em conta as projeções de crescimento futuro. |
| Tamanho da mensagem | O dimensionamento de mensagens tem impacto nos requisitos de CPU, rede e disco. | - Mensagens pequenas (≤1KB) são mais ligadas à CPU. - Mensagens grandes (>1MB) são mais ligadas à rede. - Mensagens muito grandes podem exigir ajustes especializados. |
| Período de retenção | Uma retenção mais longa aumenta os requisitos de armazenamento. | - Calcular as necessidades totais de armazenamento com base na taxa de transferência × retenção. |
| Contagem de consumidores | Mais consumidores aumentam a carga da CPU e da rede. | - Cada grupo de consumidores acrescenta despesas gerais. - Padrões de fan-out elevados requerem recursos adicionais. |
| Particionamento de tópicos | As contagens de partições afetam a utilização da memória. | - Cada partição consome recursos de memória. - O excesso de particionamento pode degradar o desempenho. |
| Despesas gerais de infraestrutura | Componentes adicionais do sistema afetam os recursos disponíveis para Kafka. | - O driver CSI do Azure Disk tem uma sobrecarga de recursos mínima. - Agentes de monitoramento, componentes de log, políticas de rede e ferramentas de segurança adicionam sobrecarga extra. - Reserve uma margem para os componentes do sistema. |
Importante
As recomendações a seguir servem apenas como orientação inicial. Sua seleção ideal de SKU de VM deve ser adaptada às suas características específicas de carga de trabalho Kafka, padrões de dados e requisitos de desempenho. Estima-se que cada pod de corretor tenha ~8GB de memória reservada. Estima-se que cada pod do controlador tenha ~4GB de memória reservada. Os requisitos de memória da JVM e da memória heap podem ser maiores ou menores.
Aglomerados de Kafka pequenos a médios
| SKU de VM | processadores virtuais (vCPUs) | RAM | Rede | Densidade do corretor (Estimativas) | Principais benefícios |
|---|---|---|---|---|---|
| Standard_D8ds | 8 | 32 GB | 12.500 Mbps | 1-3 por nó | Econômico para dimensionamento horizontal, mas pode exigir mais nós à medida que a escala aumenta. |
| Standard_D16ds | 16 | 64 GB | 12.500 Mbps | 3-6 por nó | Utilização de recursos mais eficiente com vCPU e RAM adicionais, exigindo menos nós AKS. |
Grandes aglomerados de Kafka
| SKU de VM | processadores virtuais (vCPUs) | RAM | Rede | Densidade do corretor (Estimativas) | Principais benefícios |
|---|---|---|---|---|---|
| Standard_E16ds | 16 | 128 GB | 12.500 Mbps | 6+ por nó | - Melhor desempenho para operações de grande escala com uso intensivo de dados com maior proporção de memória para núcleo. - Pode suportar amontoados de memória maiores ou escalonamento horizontal mais expressivo. |
Antes de finalizar seu ambiente de produção, recomendamos seguir as seguintes etapas:
- Execute testes de carga com volumes e padrões de dados representativos.
- Monitore a utilização da CPU, memória, disco e rede durante picos de carga.
- Ajuste os SKUs do pool de nós AKS com base nos gargalos observados.
- Revise o custo das SKUs do pool de nós.
Alta disponibilidade e resiliência
Para garantir a alta disponibilidade de sua implantação do Kafka, você deve:
- Implante em várias zonas de disponibilidade.
- Configurar restrições correctas de distribuição de réplicas.
- Implemente orçamentos apropriados de interrupção de pod.
- Configure o Cruise Control para rebalanceamento de partições de tópicos.
- Use o Limpador de Drenos Strimzi para lidar com operações de drenagem de nodos e manutenção.
Acompanhamento e operações
A monitorização eficaz dos clusters de Kafka inclui:
- Configuração da coleta de métricas JMX.
- Monitoramento de atraso do consumidor com Kafka Exporter.
- Integração com o Azure Managed Prometheus e o Azure Managed Grafana.
- Alerta sobre indicadores-chave de desempenho e métricas de saúde.
Próximo passo
Contribuidores
A Microsoft mantém este artigo. Os seguintes colaboradores escreveram-no originalmente:
- Sergio Navar | Engenheiro de Clientes Senior
- Erin Schaffer | Desenvolvedora de Conteúdo 2