Amazon에서 Apache Kafka용 사용 LinkedIn크루즈 제어 MSK - Amazon Managed Streaming for Apache Kafka

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon에서 Apache Kafka용 사용 LinkedIn크루즈 제어 MSK

LinkedIn의 Cruise Control을 사용하여 Amazon MSK 클러스터를 재조정하고, 이상을 감지 및 수정하고, 클러스터의 상태와 상태를 모니터링할 수 있습니다.

Cruise Control을 다운로드하고 빌드하려면 다음을 수행합니다.
  1. Amazon MSK 클러스터와 동일한 Amazon에서 Amazon EC2 인스턴스VPC를 생성합니다.

  2. 이전 단계에서 생성한 Amazon EC2 인스턴스에 Prometheus를 설치합니다. 프라이빗 IP와 포트를 기록해 둡니다. 기본 포트 번호는 9090입니다. 클러스터에 대한 지표를 집계하도록 Prometheus를 구성하는 방법에 대한 자세한 내용은 Prometheus를 사용하여 MSK 프로비저닝된 클러스터 모니터링 섹션을 참조하세요.

  3. Amazon EC2 인스턴스에서 Cruise Control을 다운로드합니다. (또는 원하는 경우 크루즈 제어에 별도의 Amazon EC2 인스턴스를 사용할 수 있습니다.) Apache Kafka 버전 2.4.*가 설치된 클러스터의 경우 최신 2.4.* Cruise Control 릴리스를 사용합니다. 클러스터에 2.4.*보다 오래된 Apache Kafka 버전이 있는 경우, 최신 2.0.* Cruise Control 릴리스를 사용합니다.

  4. Cruise Control 파일의 압축을 푼 다음 압축을 푼 폴더로 이동합니다.

  5. 다음 명령을 실행하여 git을 설치합니다.

    sudo yum -y install git
  6. 다음 명령을 실행하여 로컬 리포지토리를 초기화합니다. Your-Cruise-Control-Folder를 현재 폴더( Cruise Control 다운로드를 압축 해제할 때 얻은 폴더)의 이름으로 바꿉니다.

    git init && git add . && git commit -m "Init local repo." && git tag -a Your-Cruise-Control-Folder -m "Init local version."
  7. 다음 명령을 실행하여 소스 코드를 빌드합니다.

    ./gradlew jar copyDependantLibs
Cruise Control을 구성하고 실행하려면 다음을 수행합니다.
  1. config/cruisecontrol.properties 파일을 다음과 같이 업데이트합니다. 예제 부트스트랩 서버 및 부트스트랩 브로커 문자열을 클러스터에 대한 값으로 바꿉니다. 클러스터에 대한 이러한 문자열을 얻으려면 콘솔에서 클러스터 세부 정보를 확인할 수 있습니다. 또는 GetBootstrapBrokersDescribeCluster API 작업 또는 이에 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

    익스프레스 브로커의 경우 분석기 구성DiskCapacityGoal에 구성된 목표에를 사용하지 않는 것이 좋습니다.

  2. config/capacityCores.json 파일을 편집하여 올바른 디스크 크기와 CPU 코어 및 네트워크 입/출력 제한을 지정합니다. Express 브로커의 경우 DISK 용량 항목은 크루즈 제어를 설정하는 데만 필요합니다. 는 Express 브로커의 모든 스토리지를 MSK 관리하므로이 값을와 같이 매우 높은 수로 설정해야 합니다Integer.MAX_VALUE (2147483647). 표준 브로커의 경우 DescribeCluster API 작업(또는 describe-clusterCLI)을 사용하여 디스크 크기를 얻을 수 있습니다. CPU 코어 및 네트워크 입/출력 제한은 Amazon EC2 인스턴스 유형을 참조하세요.

    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. Cruise Control UI를 설치할 수 있습니다(선택 사항). 다운로드하려면 Cruise Control 프런트엔드 설정을 참조하세요.

  4. 다음 명령을 실행하여 Cruise Control을 시작합니다. screen 또는 tmux와 같은 도구를 사용하거나 장기 실행 세션을 열어 두는 것을 고려하세요.

    <path-to-your-kafka-installation>/bin/kafka-cruise-control-start.sh config/cruisecontrol.properties 9091
  5. Cruise Control APIs 또는 UI를 사용하여 Cruise Control에 클러스터 로드 데이터가 있고 리밸런싱을 제안하고 있는지 확인합니다. 유효한 지표 창을 가져오는 데 몇 분 정도 소요될 수 있습니다.

    중요

    Express 브로커는 Zookeeper 엔드포인트를 노출하지 않으므로 Cruise Control 버전 2.5.60 이상만 Express 브로커와 호환됩니다.

Amazon용 Cruise Control의 자동 배포 템플릿 사용 MSK

또한이 CloudFormation 템플릿을 사용하여 Cruise Control 및 Prometheus를 쉽게 배포하여 Amazon MSK 클러스터의 성능에 대한 심층적인 인사이트를 얻고 리소스 사용률을 최적화할 수 있습니다.

주요 기능:
  • Cruise Control 및 Prometheus가 사전 구성된 Amazon EC2 인스턴스의 자동 프로비저닝.

  • Amazon MSK 프로비저닝 클러스터 지원.

  • PlainText 및 IAM를 사용한 유연한 인증.

  • Cruise Control에 대한 Zookeeper 종속성 없음

  • Amazon S3 버킷에 저장된 자체 구성 파일을 제공하여 Prometheus 대상, Cruise Control 용량 설정 및 기타 구성을 쉽게 사용자 지정할 수 있습니다.

파티션 리밸런싱 지침

Kafka 파티션 재할당 지침

Kafka의 파티션 재할당은 리소스 집약적일 수 있습니다. 브로커 간에 중요한 데이터를 전송하여 네트워크 정체를 일으키고 클라이언트 운영에 영향을 미칠 수 있기 때문입니다. 다음 모범 사례는 제한 속도를 조정하고, 동시성 제어를 활용하고, 재할당 유형을 이해하여 클러스터 작업 중단을 최소화하여 파티션 재할당을 효과적으로 관리하는 데 도움이 됩니다.

크루즈 제어의 동시성 관리

크루즈 제어는 파티션 및 리더십 이동의 동시성을 제어하는 자동 조정 파라미터를 제공합니다. 다음 파라미터는 재할당 중에 허용 가능한 로드를 유지하는 데 도움이 됩니다.

  • 최대 동시 파티션 이동:를 정의num.concurrent.partition.movements.per.broker하여 동시 브로커 간 파티션 이동을 제한하여 과도한 네트워크 사용률을 방지합니다.

    예제
    num.concurrent.partition.movements.per.broker = 5

    이 설정은 각 브로커가 지정된 시간에 파티션을 10개 이하로 이동하도록 제한하여 브로커 간에 로드의 균형을 맞춥니다.

제한을 사용하여 대역폭 제어

  • 제한 파라미터: 를 사용하여 파티션 재할당을 수행할 때 --throttle parameterkafka-reassign-partitions.sh사용하여 브로커 간 데이터 이동에 대한 최대 전송 속도(초당 바이트)를 설정합니다.

    예제
    --throttle 5000000

    이렇게 하면 최대 대역폭이 5MB/s로 설정됩니다.

  • 밸런스 스로틀 설정: 적절한 스로틀 속도를 선택하는 것이 중요합니다.

    너무 낮게 설정하면 재할당이 훨씬 더 오래 걸릴 수 있습니다.

    너무 높게 설정하면 클라이언트에서 지연 시간이 증가할 수 있습니다.

  • 보수적인 조절률로 시작하고 클러스터 성능 모니터링에 따라 조정합니다. 프로덕션 환경에 적용하기 전에 선택한 스로틀을 테스트하여 최적의 균형을 찾습니다.

스테이징 환경에서 테스트 및 검증

프로덕션 환경에서 재할당을 구현하기 전에 유사한 구성의 스테이징 환경에서 로드 테스트를 수행합니다. 이를 통해 파라미터를 미세 조정하고 라이브 프로덕션에서 예상치 못한 영향을 최소화할 수 있습니다.