Ir para o conteúdo

Como soluciono problemas de alto uso de memória do heap no meu cluster do Amazon MSK?

5 minuto de leitura
0

Quero solucionar o alto uso de memória do heap no meu cluster do Amazon MSK (Amazon Managed Streaming for Apache Kafka).

Resolução

Monitore a métrica HeapMemoryAfterGC

Use o Amazon CloudWatch para monitorar a métrica HeapMemoryAfterGC que mostra a porcentagem da memória total do heap que permanece em uso após a conclusão da coleta de resíduos. Monitore HeapMemoryAfterGC em vez das métricas MemoryFree ou MemoryUsed.

É uma prática recomendada manter HeapMemoryAfterGC abaixo de 60%. Quando HeapMemoryAfterGC ultrapassa 60%, seu cluster do Apache Kafka pode sofrer degradação de desempenho. Crie um alarme do Amazon CloudWatch que será acionado quando HeapMemoryAfterGC ultrapassar 60% e outro alarme do CloudWatch para quando atingir o limite de 80%.

Reduza as conexões de clientes

Um número alto de conexões ou conexões curtas podem causar alto uso de memória do heap em um cluster do Amazon MSK. Para melhorar o desempenho, encerre as conexões ativas desnecessárias de cliente e reduza o número total de conexões onde for possível.

Monitore as métricas connections-count, connection-close-rate e connection-creation-rate. Se as três métricas e HeapMemoryAfterGC estiverem altos, reduza a contagem de conexões. Para obter mais informações, consulte a seção Conexões de cliente em Desempenho do cliente Apache Kafka.

Gerencie grupos de consumidores

Commits frequentes do offset do consumidor ou um grande número de grupos de consumidores podem causar alto uso de memória do heap. Para resolver esse problema, remova grupos de consumidores não utilizados.

Além disso, diminua o valor de offsets.retention.minutes. O valor padrão é 7 dias (10.080 minutos). Para obter mais informações, consulte offsets.retention.minutes no site do Kafka.

Melhore o tamanho e as partições das mensagens

Se a distribuição de partições for desigual entre os agentes ou você exceder as partições de cada agente em um cluster, pode ocorrer um alto uso de memória do heap.

Para resolver esse problema, realize as seguintes ações:

  • Se o valor de message.max.bytes for alto, reduza-o. O valor padrão é 1 MB. Valores significativamente maiores, como 16 MB, podem aumentar o uso da memória.
  • Use o número apropriado de partições para cada agente.
  • Equilibre a distribuição de partições entre agentes.

Gerencie mensagens transacionais

Muitos IDs de produtor ou o acúmulo de entradas de estado do produtor podem causar alto uso de memória do heap.

Se seu cluster usa entrega de mensagens transacionais, diminua o valor de transactional.id.expiration.ms. Para versões do Kafka anteriores à 3.4.0, reduza o valor de 604.800.000 ms (7 dias) para 86.400.000 ms (1 dia).

Para as versões 3.4.0 e posteriores do Kafka, producer.id.expiration.ms controla a expiração do produtor. Por padrão, producer.id.expiration.ms está definido como 1 dia. Para obter mais informações, consulte Separate configuration for producer ID expiry (Configuração separada para expiração do ID do produtor) no site do Confluence.

Analise o tipo e a escalabilidade da instância do seu agente

O alto tráfego de entrada ou saída pode causar alto uso de memória do heap. Monitore as métricas BytesInPerSec, BytesOutPerSec, ReplicationBytesInPerSec e ReplicationBytesOutPerSec. Se as três métricas e HeapMemoryAfterGC estiverem altos, reduza o tráfego ou aumente o tamanho do seu agente para obter mais memória.

Melhore a configuração do segmento

Valores baixos de segment.ms e segment.bytes podem causar um número excessivo de arquivos mapeados na memória.

Quando o valor de segment.ms é baixo, o Kafka cria novos segmentos de log com mais frequência, o que resulta em muitos descritores de arquivos abertos. Quando o cluster atinge a cota máxima de arquivos abertos, o uso da memória do heap aumenta e os agentes ficam instáveis.

Para resolver esse problema, aumente o valor de segment.ms em todos os tópicos. O valor padrão de segment.ms de 604.800.000 ms (7 dias). Um valor de log.segment.bytes de 1.073.741.824 bytes (1 GB) é apropriado para a maioria dos cenários. No entanto, modifique os valores de acordo com seus requisitos de retenção e compactação. Para obter mais informações, consulte segment.ms e log.segment.bytes no site do Kafka.

Solução de problemas adicionais

Realize as seguintes ações:

  • Verifique as configurações do seu servidor e cluster e modifique-as para melhorar o desempenho e a confiabilidade.
  • Se você ativou o armazenamento em camadas em seus clusters, espere de 60 a 70% de uso do heap ao ler dados da camada remota. Monitore a métrica RemoteFetchBytesPerSec com HeapMemoryAfterGC.
  • Se você usa o Prometheus para monitorar seu cluster, defina seu intervalo de coleta da configuração do host do Prometheus para 60 segundos ou mais. Intervalos mais longos reduzem a quantidade de coleta de métricas.
  • Os agentes T3 podem usar créditos de CPU para aumentar temporariamente o desempenho. Se você exceder a linha de base, o uso da memória aumenta. É possível atualizar para um tipo de instância maior.
  • Se você ainda enfrentar problemas, reinicie o agente ou crie uma interação de suporte para interagir com o AWS Support.

Informações relacionadas

A memória está baixa

Monitorar o espaço em disco

Usar alarmes do Amazon CloudWatch

Práticas recomendadas para clientes Apache Kafka

AWS OFICIALAtualizada há 7 meses