Neste documento, descrevemos como monitorar um cluster do Serviço gerenciado para Apache Kafka para garantir a confiabilidade das suas cargas de trabalho do Kafka.
Visão geral
Confiabilidade é a capacidade de um sistema funcionar corretamente e de forma consistente ao longo do tempo. Para cargas de trabalho baseadas no Kafka, a confiabilidade abrange os próprios clusters do Kafka e os aplicativos clientes que produzem e consomem mensagens.
O Serviço Gerenciado para Apache Kafka foi projetado para tolerar e se recuperar de muitos erros comuns. Por exemplo, o serviço coloca réplicas em diferentes zonas para tolerância a falhas e reinicia automaticamente os brokers com falha. No entanto, outros fatores que afetam a confiabilidade estão fora do controle direto do serviço, como:
- Configuração do cliente
- Carga no cluster, incluindo carga média e picos
- O número de partições e réplicas
- Configurações de tópico, como retenção de mensagens
Para ter operações confiáveis, é importante monitorar o cluster em relação a esses parâmetros operacionais e mantê-los dentro dos intervalos recomendados. As seções a seguir descrevem algumas métricas importantes para a confiabilidade.
Capacidade do cluster
Para evitar sobrecarregar um cluster, monitore os seguintes indicadores. Crie alertas para receber notificações se eles ficarem fora do intervalo recomendado por um longo período.
Utilização da CPU. Tente manter a utilização da CPU abaixo de 80% em todos os agentes.
Uso do disco do broker: verifique se o uso do disco do broker permanece abaixo de 80%.
Contagem de partições. Tente manter menos de 4.000 partições por broker e menos de 100.000 partições por cluster.
Se o cluster estiver com pouca capacidade, considere as seguintes mitigações:
Aumente a contagem de vCPUs do cluster. Para mais informações, consulte Atualizar um cluster do Kafka.
Escalone verticalmente o cluster para adicionar mais brokers. Para informações sobre como o serviço provisiona corretores, consulte Provisionamento de corretores.
A tabela a seguir mostra consultas da linguagem de consulta do Prometheus (PromQL) para essas métricas que podem ser adicionadas a um painel do Cloud Monitoring personalizado.
| Sinal | Consulta PromQL |
|---|---|
| Uso da CPU | rate( { "managedkafka.googleapis.com/cpu/core_usage_time", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/cpu/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| Uso do disco do broker | max_over_time( { "managedkafka.googleapis.com/disk/used_bytes", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| Tamanho do segmento por partição | # Assumes that segment files are 225 MiB. Check your cluster configuration. 2*225*(1024*1024) * max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| Partições por broker | max by (resource_container, location, cluster_id, broker_index) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| Partições por cluster | max by (resource_container, location, cluster_id) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
Desequilíbrio de partição
Uma carga desigual pode impedir que um cluster do Kafka atenda às solicitações do cliente corretamente. O número de partições atribuídas a um único broker precisa ficar dentro de aproximadamente 10% da contagem média de partições por broker. Procure valores atípicos nessa métrica.
Para manter partições equilibradas, considere ativar o rebalanceamento automático no escalonamento vertical no cluster.
A tabela a seguir mostra consultas do PromQL que podem ser usadas para monitorar desequilíbrios de partição.
| Sinal | Consulta PromQL |
|---|---|
| Contagem de partições por broker | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| Desequilíbrio de partição | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) / on (resource_container, location, cluster_id) group_left avg by (resource_container, location, cluster_id) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) - 1 |
Replicação de partição
A replicação de dados é fundamental para garantir que suas cargas de trabalho sejam tolerantes a falhas. Em um cluster íntegro, cada partição em um tópico tem o número total de réplicas, com base no fator de replicação configurado do tópico.
Use os seguintes indicadores para monitorar a replicação de partição:
Abaixo do mínimo de réplicas sincronizadas (ISRs). Se uma partição tiver menos ISRs sincronizadas do que o mínimo configurado (
min.insync.replicas), haverá um risco grave de perda de dados e disponibilidade. Normalmente, essa situação é causada por capacidade insuficiente em um ou mais brokers ou por falhas de infraestrutura.Partições sub-replicadas. Uma partição está sub-replicada quando o número de réplicas sincronizadas fica abaixo do fator de replicação. Se uma partição permanecer com poucas réplicas por dezenas de minutos, pode haver um problema com os brokers, a capacidade de armazenamento ou algo mais.
Durante uma reinicialização gradual, os brokers ficam indisponíveis à medida que são reiniciados, causando uma sub-replicação temporária. Essa situação é esperada e não exige intervenção.
A tabela a seguir mostra consultas do PromQL que podem ser usadas para monitorar a replicação.
| Sinal | Consulta PromQL |
|---|---|
| Abaixo do mínimo de ISRs | max by ( resource_container, location, cluster_id ) ( max_over_time( { "managedkafka.googleapis.com/broker/under_min_isr_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| Em replicação | max by ( resource_container, location, cluster_id ) ( min_over_time( { "managedkafka.googleapis.com/broker/under_replicated_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[10m:${__interval}] ) ) |
A seguir
- Monitorar um cluster do Kafka
- Monitorar aplicativos cliente do Kafka
- Planejar o tamanho do cluster do Kafka
- Criar e gerenciar painéis personalizados