기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
표준 브로커 모범 사례
이 주제에서는 Amazon를 사용할 때 따라야 할 몇 가지 모범 사례를 간략하게 설명합니다MSK. Amazon MSK Replicator 모범 사례에 대한 자세한 내용은 섹션을 참조하세요MSK Replicator 사용 모범 사례.
클라이언트 측 고려 사항
애플리케이션의 가용성 및 성능은 서버 측 설정뿐만 아니라 클라이언트 설정에도 따라 달라집니다.
-
고가용성을 위해 클라이언트를 구성합니다. Apache Kafka와 같은 분산 시스템에서는 고가용성을 보장하는 것이 신뢰할 수 있고 내결함성 있는 메시징 인프라를 유지하는 데 매우 중요합니다. 브로커는 업그레이드, 패치 적용, 하드웨어 장애 및 네트워크 문제와 같이 계획된 이벤트와 계획되지 않은 이벤트 모두에 대해 오프라인 상태가 됩니다. Kafka 클러스터는 오프라인 브로커 오류를 처리할 수 있으므로 Kafka 클라이언트도 브로커 장애 조치를 정상적으로 처리해야 합니다. 에 대한 전체 세부 정보를 참조하세요Apache Kafka 클라이언트 모범 사례.
-
클라이언트 연결 문자열에 각 가용 영역의 브로커가 하나 이상 포함되어 있는지 확인합니다. 클라이언트의 연결 문자열에 여러 브로커가 있으면 특정 브로커가 업데이트를 위해 오프라인 상태일 때 장애 조치를 수행할 수 있습니다. 여러 브로커를 통해 연결 문자열을 가져오는 방법에 대한 자세한 내용은 Amazon MSK 클러스터의 부트스트랩 브로커 가져오기 단원을 참조하십시오.
-
성능 테스트를 실행하여 클라이언트 구성이 성능 목표를 충족하도록 허용하는지 확인합니다.
서버 측 고려 사항
클러스터 크기 조정: 표준 브로커당 파티션 수
다음 표에는 표준 브로커당 권장되는 파티션 수(리더 및 팔로워 복제본 포함)가 나와 있습니다. 권장 파티션 수는 적용되지 않으며 프로비저닝된 모든 주제 파티션에서 트래픽을 전송하는 시나리오에 대한 모범 사례입니다.
브로커 크기 | 브로커당 권장 파티션 수(리더 및 팔로어 복제본 포함) | 업데이트 작업을 지원하는 최대 파티션 수 |
---|---|---|
kafka.t3.small |
300 | 300 |
kafka.m5.large 또는 kafka.m5.xlarge |
1000 | 1500 |
kafka.m5.2xlarge |
2000 | 3000 |
kafka.m5.4xlarge , kafka.m5.8xlarge , kafka.m5.12xlarge , kafka.m5.16xlarge 또는 kafka.m5.24xlarge |
4000 | 6000 |
kafka.m7g.large 또는 kafka.m7g.xlarge |
1000 | 1500 |
kafka.m7g.2xlarge |
2000 | 3000 |
kafka.m7g.4xlarge , kafka.m7g.8xlarge , kafka.m7g.12xlarge 또는 kafka.m7g.16xlarge |
4000 | 6000 |
파티션 수가 높고 처리량이 낮은 사용 사례가 있지만 모든 파티션에서 트래픽을 전송하지 않는 경우, 클러스터가 파티션 수가 높을수록 정상 상태를 유지하는지 확인하기 위해 충분한 테스트 및 성능 테스트를 수행한 경우 브로커당 더 많은 파티션을 패키징할 수 있습니다. 브로커당 파티션 수가 최대 허용 값을 초과하고 클러스터에 과부하가 걸리면 다음 작업을 수행할 수 없습니다.
-
클러스터 구성 업데이트
-
더 작은 브로커 크기로 클러스터 업데이트
-
AWS Secrets Manager 보안 암호를 SASL/SCRAM 인증이 있는 클러스터와 연결
파티션 수가 많으면 Prometheus 스크레이핑 CloudWatch 에서 Kafka 지표가 누락될 수도 있습니다.
파티션 수를 선택하는 방법에 대한 지침은 Apache Kafka는 클러스터당 200K 파티션 지원
클러스터의 적절한 크기: 클러스터당 표준 브로커 수
MSK 프로비저닝된 클러스터에 적합한 수의 표준 브로커를 결정하고 비용을 이해하려면 MSK 크기 조정 및 요금
기본 인프라가 Apache Kafka 성능에 미치는 영향을 이해하려면 AWS 빅 데이터 블로그에서 Apache Kafka 클러스터의 크기를 올바르게 조정하여 성능 및 비용을 최적화하는 모범 사례를 참조하세요
m5.4xl, m7g.4xl 또는 더 큰 인스턴스에 대한 클러스터 처리량 최적화
m5.4xl, m7g.4xl 또는 더 큰 인스턴스를 사용하는 경우 num.io.threads 및 num.network.threads 구성을 조정하여 MSK 프로비저닝된 클러스터 처리량을 최적화할 수 있습니다.
Num.io.threads는 Standard 브로커가 요청을 처리하는 데 사용하는 스레드 수입니다. 인스턴스 크기에 지원되는 CPU 코어 수까지 스레드를 더 추가하면 클러스터 처리량을 개선하는 데 도움이 될 수 있습니다.
Num.network.threads는 Standard 브로커가 모든 수신 요청을 수신하고 응답을 반환하는 데 사용하는 스레드 수입니다. 네트워크 스레드는 들어오는 요청을 요청 대기열에 배치하여 io.threads에서 처리합니다. num.network.threads를 인스턴스 크기에 지원되는 CPU 코어 수의 절반으로 설정하면 새 인스턴스 크기를 완전히 사용할 수 있습니다.
중요
대기열 포화로 인한 혼잡이 발생할 수 있으므로 num.io.threads를 늘리기 전에 num.network.threads를 늘리지 마세요.
인스턴스 크기 | num.io.threads의 권장값 | num.network.threads의 권장값 |
---|---|---|
m5.4xl |
16 |
8 |
m5.8xl |
32 |
16 |
m5.12xl |
48 |
24 |
m5.16xl |
64 |
32 |
m5.24xl |
96 |
48 |
m7g.4xlarge |
16 |
8 |
m7g.8xlarge |
32 |
16 |
m7g.12xlarge |
48 |
24 |
m7g.16xlarge |
64 |
32 |
최신 Kafka AdminClient 를 사용하여 주제 ID 불일치 문제 방지
Kafka AdminClient 버전 2.8.0 이상을 사용하여 MSK 프로비저닝된 클러스터의 주제 파티션을 늘리거나 재할당--zookeeper
하기 위해 플래그가 2.8.0보다 낮은 Kafka 버전을 사용하면 주제의 ID가 손실됩니다(오류:가 파티션의 주제 ID와 일치하지 않음). --zookeeper
플래그는 Kafka 2.5에서 더 이상 사용되지 않으며 Kafka 3.0부터 제거된다는 점에 유의하세요. 0.8.x~2.4.x 버전에서 2.5.0으로 업그레이드
주제 ID 불일치를 방지하려면 Kafka 관리자 작업에 Kafka 클라이언트 버전 2.8.0 이상을 사용하세요. 또는 클라이언트 2.5 이상에서는 --zookeeper
플래그 대신 --bootstrap-servers
플래그를 사용할 수 있습니다.
고가용성 클러스터 빌드
다음 권장 사항을 사용하면 업데이트 중에(예: 브로커 크기 또는 Apache Kafka 버전을 업데이트할 때) 또는 AmazonMSK이 브로커를 교체할 때 MSK 프로비저닝된 클러스터를 쉽게 사용할 수 있습니다.
-
3개의 AZ 클러스터를 설정합니다.
-
복제 인수(RF)가 3 이상인지 확인합니다. RF가 1이면 롤링 업데이트 중에 오프라인 파티션이 발생할 수 있고 RF가 2이면 데이터 손실이 발생할 수 있다는 점에 유의하세요.
-
최소 동기화 내 복제본(분ISR)을 최대 RF - 1로 설정합니다. RF와 같은 최소값ISR은 롤링 업데이트 중에 클러스터에가 생성되지 않도록 할 수 있습니다. 최소ISR 2를 사용하면 복제본 하나가 오프라인 상태일 때 3방향 복제 주제를 사용할 수 있습니다.
CPU 사용량 모니터링
Amazon은 브로커(로 정의CPU User + CPU System
)의 총 CPU 사용률을 60% 미만으로 유지할 것을 MSK 강력히 권장합니다. 클러스터 총 사용 CPU 가능한 비율이 40% 이상인 경우 Apache Kafka는 필요한 경우 클러스터의 브로커 간에 CPU 로드를 재배포할 수 있습니다. 이 작업이 필요한 경우의 한 가지 예는 Amazon이 브로커 오류를 MSK 감지하고 복구하는 경우입니다.이 경우 Amazon은 패치 적용과 같은 자동 유지 관리를 MSK 수행합니다. 또 다른 예는 사용자가 브로커 크기 변경 또는 버전 업그레이드를 요청하는 경우입니다.이 두 경우 Amazon은 한 번에 하나의 브로커를 오프라인으로 전환하는 롤링 워크플로를 MSK 배포합니다. 리드 파티션이 있는 브로커가 오프라인 상태가 되면 Apache Kafka는 파티션 책임자를 재할당하여 클러스터 내 다른 브로커에게 작업을 재분배합니다. 이 모범 사례를 따르면 클러스터에 이러한 운영 이벤트를 견딜 수 있는 충분한 CPU 헤드룸이 있는지 확인할 수 있습니다.
Amazon CloudWatch 지표 수학을 사용하여 인 복합 지표를 생성할 수 있습니다CPU User + CPU System
. 복합 지표가 평균 CPU 사용률 60%에 도달하면 트리거되는 경보를 설정합니다. 이 경보가 트리거되면 다음 옵션 중 하나를 사용하여 클러스터를 확장합니다.
-
옵션 1(권장): 다음으로 큰 크기로 브로커 크기를 업데이트합니다. 예를 들어 현재 크기가
kafka.m5.large
인 경우kafka.m5.xlarge
를 사용하도록 클러스터를 업데이트합니다. 클러스터에서 브로커 크기를 업데이트할 때 AmazonMSK은 브로커를 롤링 방식으로 오프라인으로 전환하고 파티션 리더십을 다른 브로커에 일시적으로 재할당한다는 점에 유의하세요. 크기 업데이트는 일반적으로 브로커당 10~15분 정도 소요됩니다. -
옵션 2: 생산자로부터 수집된 모든 메시지가 라운드 로빈 쓰기를 사용하는 주제가 있는 경우(즉, 메시지에 키가 지정되지 않고 순서가 소비자에게 중요하지 않은 경우) 브로커를 추가하여 클러스터를 확장합니다. 또한 처리량이 가장 많은 기존 주제에 파티션을 추가할 수도 있습니다. 그런 다음
kafka-topics.sh --describe
를 사용하여 새로 추가된 파티션이 새 브로커에 할당되었는지 확인합니다. 이전 옵션에 비해 이 옵션의 가장 큰 이점은 리소스와 비용을 더 세부적으로 관리할 수 있다는 점입니다. 또한 CPU 부하가 60%를 크게 초과하는 경우이 옵션을 사용할 수 있습니다. 이러한 형태의 조정으로 인해 일반적으로 기존 브로커에 대한 부하가 증가하지 않기 때문입니다. -
옵션 3: 브로커를 추가하여 MSK 프로비저닝된 클러스터를 확장한 다음 라는 파티션 재할당 도구를 사용하여 기존 파티션을 재할당합니다
kafka-reassign-partitions.sh
. 그러나 이 옵션을 사용하면 파티션이 재할당된 후 클러스터가 브로커 간에 데이터를 복제하는 데 리소스를 사용해야 합니다. 이전 두 옵션에 비해 처음에는 클러스터의 부하가 크게 증가할 수 있습니다. 따라서 복제로 인해 추가 CPU 로드 및 네트워크 트래픽이 발생하므로 CPU 사용률이 70%를 초과할 때는이 옵션을 사용하지 MSK 않는 것이 좋습니다. Amazon은 이전 두 옵션을 사용할 수 없는 경우에만이 옵션을 사용하는 것이 MSK 좋습니다.
기타 권장 사항:
-
로드 배포를 위한 프록시로서 브로커당 총 CPU 사용률을 모니터링합니다. 브로커의 CPU 사용률이 지속적으로 고르지 않은 경우 로드가 클러스터 내에 균등하게 분산되지 않는다는 신호일 수 있습니다. 파티션 할당을 통해 로드 분산을 지속적으로 관리하려면 Cruise Control을 사용하는 것이 좋습니다.
-
생산 및 소비 지연을 모니터링합니다. 생산 및 소비 지연 시간은 CPU 사용률에 따라 선형적으로 증가할 수 있습니다.
-
JMX 스크레이프 간격: Prometheus 기능을 사용하여 공개 모니터링을 활성화하는 경우 Prometheus 호스트 구성(prometheus.yml)에 60초 이상의 스크레이프 간격(scrape_interval: 60초)을 사용하는 것이 좋습니다. 스크레이프 간격을 줄이면 클러스터의 CPU 사용량이 높아질 수 있습니다.
디스크 공간 모니터링
메시지의 디스크 공간이 부족하지 않도록 KafkaDataLogsDiskUsed
지표를 감시하는 CloudWatch 경보를 생성합니다. 이 지표의 값이 85% 이상에 도달하면 다음 작업 중 하나 이상을 수행합니다.
-
Amazon MSK 클러스터의 자동 조정를 사용합니다. 표준 브로커의 수동 조정에 설명된 대로 브로커 스토리지를 수동으로 늘릴 수도 있습니다.
-
메시지 보존 기간 또는 로그 크기를 줄입니다. 이렇게 하는 방법에 대한 정보는 데이터 보존 파라미터 조정 단원을 참조하십시오.
-
사용되지 않는 항목을 삭제합니다.
경보를 설정하고 사용하는 방법에 대한 자세한 내용은 Amazon CloudWatch 경보 사용을 참조하세요. Amazon MSK 지표의 전체 목록은 섹션을 참조하세요Amazon MSK 프로비저닝 클러스터 모니터링.
데이터 보존 파라미터 조정
메시지를 소비해도 로그에서 제거되지 않습니다. 정기적으로 디스크 공간을 확보하려면 메시지가 로그에 유지되는 기간인 보존 기간을 명시적으로 지정하면 됩니다. 보존 로그 크기를 지정할 수도 있습니다. 보존 기간 또는 보존 로그 크기에 도달하면 Apache Kafka는 로그에서 비활성 세그먼트를 제거하기 시작합니다.
클러스터 수준에서 보존 정책을 지정하려면, log.retention.hours
, log.retention.minutes
, log.retention.ms
또는 log.retention.bytes
파라미터 중 하나 이상을 설정합니다. 자세한 내용은 사용자 지정 Amazon MSK 구성 단원을 참조하십시오.
주제 수준에서 보존 파라미터를 지정할 수도 있습니다.
-
주제별로 보존 기간을 지정하려면 다음 명령을 사용합니다.
kafka-configs.sh --bootstrap-server $bs --alter --entity-type topics --entity-name
TopicName
--add-config retention.ms=DesiredRetentionTimePeriod
-
주제별로 보존 로그 크기를 지정하려면 다음 명령을 사용합니다.
kafka-configs.sh --bootstrap-server $bs --alter --entity-type topics --entity-name
TopicName
--add-config retention.bytes=DesiredRetentionLogSize
주제 수준에서 지정하는 보존 파라미터는 클러스터 수준 파라미터보다 우선합니다.
비정상 종료 후 로그 복구 속도 향상
비정상 종료 후 브로커는 로그 복구를 수행하므로 다시 시작하는 데 시간이 걸릴 수 있습니다. 기본적으로 Kafka는 로그 디렉터리당 단일 스레드만 사용하여 해당 복구를 수행합니다. 예를 들어 수천 개의 파티션이 있는 경우 로그 복구를 완료하는 데 몇 시간이 소요될 수 있습니다. 로그 복구 속도를 높이려면 구성 속성 num.recovery.threads.per.data.dir
을 사용하여 스레드 수를 늘리는 것을 권장합니다. CPU 코어 수로 설정할 수 있습니다.
Apache Kafka 메모리 모니터링
Apache Kafka가 사용하는 메모리를 모니터링하는 것을 권장합니다. 그렇지 않으면 클러스터를 사용할 수 없게 될 수 있습니다.
Apache Kafka가 사용하는 메모리 양을 확인하려면 HeapMemoryAfterGC
지표를 모니터링하면 됩니다. HeapMemoryAfterGC
는 가비지 수집 후 사용 중인 전체 힙 메모리의 백분율입니다. 가 60%를 HeapMemoryAfterGC
초과할 때 조치를 취하는 CloudWatch 경보를 생성하는 것이 좋습니다.
메모리 사용량을 줄이기 위해 취할 수 있는 조치는 다양합니다. Apache Kafka를 구성하는 방식에 따라 달라집니다. 예를 들어 트랜잭션 메시지 전송을 사용하는 경우 Apache Kafka 구성에서 transactional.id.expiration.ms
값을 604800000
밀리초에서 86400000
밀리초(7일에서 1일로)로 줄일 수 있습니다. 이를 통해 각 트랜잭션의 메모리 사용량이 줄어듭니다.
브로커가 아닌MSK 브로커를 추가하지 마세요.
ZooKeeper기반 MSK 프로비저닝된 클러스터의 경우 Apache ZooKeeper 명령을 사용하여 브로커를 추가하는 경우 이러한 브로커는 MSK 프로비저닝된 클러스터에 추가되지 않으며 Apache ZooKeeper 에 클러스터에 대한 잘못된 정보가 포함됩니다. 이로 인해 데이터가 손실될 수 있습니다. 지원되는 MSK 프로비저닝된 클러스터 작업은 섹션을 참조하세요Amazon MSK 주요 기능 및 개념.
전송 중 암호화 활성화
전송 중 암호화와 활성화하는 방법에 대한 자세한 내용은 전송 중인 Amazon MSK 암호화 단원을 참조하십시오.
파티션 재할당
파티션을 동일한 MSK 프로비저닝된 클러스터의 다른 브로커로 이동하려면 라는 파티션 재할당 도구를 사용할 수 있습니다kafka-reassign-partitions.sh
. 예를 들어, 클러스터를 확장하거나 브로커를 제거하기 위해 파티션을 이동하도록 새로운 브로커를 추가한 후에는 새로운 브로커에 파티션을 다시 할당하여 해당 클러스터를 재분배할 수 있습니다. MSK 프로비저닝된 클러스터에 브로커를 추가하는 방법에 대한 자세한 내용은 섹션을 참조하세요Amazon MSK 클러스터의 브로커 수 확장. MSK 프로비저닝된 클러스터에서 브로커를 제거하는 방법에 대한 자세한 내용은 섹션을 참조하세요Amazon MSK 클러스터에서 브로커 제거. 파티션 재할당 도구에 대한 자세한 내용은 Apache Kafka 설명서의 클러스터 확장