Use o LinkedIn Cruise Control para Apache Kafka com o Amazon MSK - Amazon Managed Streaming for Apache Kafka

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Use o LinkedIn Cruise Control para Apache Kafka com o Amazon MSK

Você pode usar LinkedIn o Cruise Control para reequilibrar seu cluster Amazon MSK, detectar e corrigir anomalias e monitorar o estado e a integridade do cluster.

nota

Se o rebalanceamento inteligente estiver ativado para seus clusters baseados no Express recém-criados, você não poderá usar ferramentas de terceiros, como o Cruise Control, para rebalancear partições. Primeiro, você deve pausar o rebalanceamento inteligente para usar a API de reatribuição de partições fornecida por essas ferramentas de terceiros.

Para baixar e compilar o Cruise Control
  1. Crie uma EC2 instância da Amazon na mesma Amazon VPC do cluster Amazon MSK.

  2. Instale o Prometheus na instância da EC2 Amazon que você criou na etapa anterior. Anote o IP privado e a porta. O número padrão da porta é 9090. Para obter informações sobre como configurar o Prometheus de modo a agregar métricas de seu cluster, consulte Monitore um cluster do MSK Provisioned com o Prometheus.

  3. Baixe o Cruise Control na EC2 instância da Amazon. (Como alternativa, você pode usar uma EC2 instância separada da Amazon para o Cruise Control, se preferir.) Para um cluster que tenha o Apache Kafka versão 2.4.*, use a versão 2.4.* mais recente do Cruise Control. Se seu cluster tiver uma versão do Apache Kafka anterior à 2.4.*, use a versão mais recente do 2.0.* Cruise Control.

  4. Descompacte o arquivo do Cruise Control e acesse a pasta descompactada.

  5. Execute o comando a seguir para instalar o git.

    sudo yum -y install git
  6. Execute o comando a seguir para inicializar o repositório local. Your-Cruise-Control-FolderSubstitua pelo nome da sua pasta atual (a pasta que você obteve ao descompactar o download do Cruise Control).

    git init && git add . && git commit -m "Init local repo." && git tag -a Your-Cruise-Control-Folder -m "Init local version."
  7. Execute o seguinte comando para compilar o código-fonte.

    ./gradlew jar copyDependantLibs
Para configurar e executar o Cruise Control
  1. Faça as seguintes atualizações no arquivo config/cruisecontrol.properties. Substitua os servidores de bootstrap de exemplo e a string bootstrap-agentes pelos valores do seu cluster. Para obter essas strings para seu cluster, você pode ver os detalhes do cluster no console. Como alternativa, você pode usar as operações GetBootstrapBrokerse da DescribeClusterAPI ou seus equivalentes de CLI.

    # If using TLS encryption, use 9094; use 9092 if using plaintext bootstrap.servers=b-1.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094,b-2.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094,b-3.test-cluster.2skv42.c1.kafka.us-east-1.amazonaws.com:9094 # SSL properties, needed if cluster is using TLS encryption security.protocol=SSL ssl.truststore.location=/home/ec2-user/kafka.client.truststore.jks # Use the Prometheus Metric Sampler metric.sampler.class=com.linkedin.kafka.cruisecontrol.monitor.sampling.prometheus.PrometheusMetricSampler # Prometheus Metric Sampler specific configuration prometheus.server.endpoint=1.2.3.4:9090 # Replace with your Prometheus IP and port # Change the capacity config file and specify its path; details below capacity.config.file=config/capacityCores.json

    Para agentes Express, recomendamos que você não use DiskCapacityGoal em nenhuma das metas definidas nas suas configurações do analisador.

  2. Edite o config/capacityCores.json arquivo para especificar o tamanho correto do disco, os núcleos de CPU e in/out os limites de rede. Para agentes Express, a entrada de capacidade DISK só é necessária para configurar o Cruise Control. Como o MSK gerencia todo o armazenamento dos agentes Express, você deve definir esse valor em um número extremamente alto, como Integer.MAX_VALUE (2147483647). Para corretores padrão, você pode usar a operação de DescribeClusterAPI (ou a CLI describe-cluster) para obter o tamanho do disco. Para núcleos de CPU e in/out limites de rede, consulte Tipos de EC2 instância da Amazon.

    Standard broker config/capacityCores.json
    { "brokerCapacities": [ { "brokerId": "-1", "capacity": { "DISK": "10000", "CPU": { "num.cores": "2" }, "NW_IN": "5000000", "NW_OUT": "5000000" }, "doc": "This is the default capacity. Capacity unit used for disk is in MB, cpu is in number of cores, network throughput is in KB." } ] }
    Express broker config/capacityCores.json
    { "brokerCapacities":[ { "brokerId": "-1", "capacity": { "DISK": "2147483647", "CPU": {"num.cores": "16"}, "NW_IN": "1073741824", "NW_OUT": "1073741824" }, "doc": "This is the default capacity. Capacity unit used for disk is in MB, cpu is in number of cores, network throughput is in KB." } ] }
  3. Opcionalmente, você pode instalar a interface do usuário do Cruise Control. Para baixá-la, acesse Como configurar o frontend do Cruise Control.

  4. Execute o comando a seguir para iniciar o Cruise Control. Considere usar uma ferramenta como screen ou tmux para manter uma sessão de longa duração aberta.

    <path-to-your-CRUISE-CONTROL-installation>/bin/kafka-cruise-control-start.sh config/cruisecontrol.properties 9091
  5. Use o Cruise Control APIs ou a interface do usuário para garantir que o Cruise Control tenha os dados de carga do cluster e que esteja fazendo sugestões de rebalanceamento. A obtenção de uma janela de métricas válida pode levar alguns minutos.

    Importante

    Somente as versões 2.5.60 e superiores do Cruise Control são compatíveis com agentes Express, que não expõem endpoints do Zookeeper.

Usar o modelo de implantação automatizada do Cruise Control para Amazon MSK

Você também pode usar esse CloudFormation modelo para implantar facilmente o Cruise Control e o Prometheus para obter informações mais detalhadas sobre o desempenho do seu cluster Amazon MSK e otimizar a utilização de recursos.

Principais atributos:
  • Provisionamento automatizado de uma EC2 instância da Amazon com Cruise Control e Prometheus pré-configurados.

  • Compatibilidade com o cluster provisionado do Amazon MSK.

  • Autenticação PlainText flexível com IAM.

  • Nenhuma dependência do Zookeeper para o Cruise Control.

  • Personalize facilmente os destinos do Prometheus, as configurações de capacidade do Cruise Control e outras configurações fornecendo seus próprios arquivos de configuração armazenados em um bucket do Amazon S3.

Diretriz de rebalanceamento de partição

Diretrizes para reatribuição de partições de Kafka

A reatribuição de partições no Kafka pode consumir muitos recursos, já que envolve a transferência de dados significativos entre agentes, o que pode causar congestionamento da rede e afetar as operações do cliente. As práticas recomendadas a seguir ajudam a gerenciar a reatribuição de partições de forma eficaz, ajustando as taxas de aceleração, aproveitando os controles de simultaneidade e explicando os tipos de reatribuição para minimizar a interrupção nas operações do cluster.

nota

Se você tiver um cluster baseado no Express recém-criado, use o rebalanceamento inteligente para distribuição automática de partições à medida que aumenta ou diminui seus clusters.

Gerenciar a simultaneidade no Cruise Control

O Cruise Control fornece parâmetros de ajuste automático para controlar a simultaneidade dos movimentos de partição e a liderança. Os parâmetros a seguir ajudam a manter uma carga aceitável durante as reatribuições:

  • Máximo de movimentações simultâneas de partições: defina num.concurrent.partition.movements.per.broker para limitar o máximo de movimentações simultâneas de partição entre agentes, evitando a utilização excessiva da rede.

    exemplo Exemplo
    num.concurrent.partition.movements.per.broker = 5

    Essa configuração limita cada agente a mover no máximo 10 partições a qualquer momento, equilibrando a carga entre os agentes.

Use o controle de utilização para monitorar a largura de banda

  • Parâmetro de controle de utilização: ao realizar a reatribuição de partições com kafka-reassign-partitions.sh, use --throttle parameter para definir uma taxa máxima de transferência (em bytes por segundo) para movimentação de dados entre agentes.

    exemplo Exemplo
    --throttle 5000000

    Isso define uma largura de banda máxima de 5 MB/s.

  • Configurações de controle de balanceamento: escolher uma taxa de aceleração apropriada é crucial:

    Se estiver muito baixa, a reatribuição pode levar muito mais tempo.

    Se estiver muito alta, os clientes podem experimentar aumentos de latência.

  • Comece com uma taxa de aceleração conservadora e ajuste com base no monitoramento do desempenho do cluster. Teste o acelerador escolhido antes de aplicá-lo em um ambiente de produção para encontrar o equilíbrio ideal.

Teste e valide em um ambiente de preparação

Antes de implementar reatribuições na produção, realize testes de carga em um ambiente de preparação com configurações semelhantes. Assim você pode ajustar os parâmetros e minimizar os impactos inesperados na produção real.