Usar o Cruise Control do LinkedIn para Apache Kafka com o Amazon MSK
Você pode usar o Cruise Control do LinkedIn para rebalancear seu cluster do Amazon MSK, detectar e corrigir anomalias e monitorar o estado e a integridade do cluster.
Para baixar e compilar o Cruise Control
Crie uma instância do Amazon EC2 na mesma Amazon VPC do cluster do Amazon MSK.
Instale o Prometheus na instância do Amazon EC2 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.
-
Faça o download do Cruise Control
na instância do Amazon EC2. (Como alternativa, se preferir você pode usar uma instância separada do Amazon EC2 para o Cruise Control.) 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. -
Descompacte o arquivo do Cruise Control e acesse a pasta descompactada.
-
Execute o comando a seguir para instalar o git.
sudo yum -y install git -
Execute o comando a seguir para inicializar o repositório local. Substitua
Your-Cruise-Control-Folderpelo 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 -aYour-Cruise-Control-Folder-m "Init local version." -
Execute o seguinte comando para compilar o código-fonte.
./gradlew jar copyDependantLibs
Para configurar e executar o Cruise Control
-
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 de API GetBootstrapBrokers e DescribeCluster ou seus equivalentes da 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.jsonPara agentes Express, recomendamos que você não use
DiskCapacityGoalem nenhuma das metas definidas nas suas configurações do analisador. -
Edite o arquivo
config/capacityCores.jsonpara especificar o tamanho correto do disco, os núcleos da CPU e os limites de entrada/saída da rede. Para agentes Express, a entrada de capacidadeDISKsó é 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, comoInteger.MAX_VALUE (2147483647). Para agentes Standard, você pode usar a operação da API DescribeCluster (ou a CLI describe-cluster) para obter o tamanho do disco. Para núcleos de CPU e limites de entrada/saída de rede, consulte Tipos de instância do Amazon EC2 . -
Opcionalmente, você pode instalar a interface do usuário do Cruise Control. Para baixá-la, acesse Como configurar o frontend do Cruise Control
. -
Execute o comando a seguir para iniciar o Cruise Control. Considere usar uma ferramenta como
screenoutmuxpara 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 Use as APIs do Cruise Control 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 modelo do CloudFormation
Principais recursos:
Provisionamento automatizado de uma instância do Amazon EC2 com o Cruise Control e o Prometheus pré-configurados.
Compatibilidade com o cluster provisionado do Amazon MSK.
Autenticação flexível com PlainText e 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.
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.brokerpara 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 = 5Essa 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 parameterpara definir uma taxa máxima de transferência (em bytes por segundo) para movimentação de dados entre agentes.exemplo Exemplo
--throttle 5000000Isso 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.