들어가기 앞서
MSK 업그레이드 메커니즘, 고려 사항과 Best Practice 에 대해 알아보겠습니다.
Amazon MSK 업그레이드 메커니즘
Amazon MSK는 소프트웨어에 대한 롤링 업데이트 방식을 통해 클러스터의 고가용성을 유지합니다. 이 과정에서 브로커는 한 번에 하나씩 재부팅되며, Kafka는 자동으로 리더십을 다른 온라인 브로커로 이전합니다. Kafka 클라이언트는 이러한 리더십 변화를 자동으로 감지하여, 업데이트 중에도 MSK 클러스터에 대한 데이터 읽기와 쓰기를 지속할 수 있는 메커니즘을 갖추고 있습니다.
구성 변경 시 브로커가 일시적으로 오프라인 상태가 되면, 클라이언트에서 간헐적인 연결 해제 오류가 발생할 수 있습니다. 이는 정상적인 현상입니다. 또한 짧은 시간(최대 2분, 일반적으로 그보다 짧음) 동안 p99 읽기 및 쓰기 지연(latency)이 일시적으로 증가할 수 있으며, 이때 지연은 보통 수백 밀리초에서 최대 약 2초 정도까지 발생할 수 있습니다. 이러한 지연은 클라이언트가 새 리더 브로커에 다시 연결되는 과정에서 나타나는 일시적인 현상으로, 데이터의 생성(Produce) 및 소비(Consume)에는 영향을 미치지 않으며 재연결 이후에는 정상적으로 해소됩니다.
Amazon MSK 업그레이드 고가용성 유지 방안
MiniSR (mininsyncreplicas) : 프로듀서가 메세지를 성공적으로 쓰기 위해 필요한 최소 동기와 레플리카의 수
RF (Replication Factor) : 데이터를 몇 개의 복제본에 저장할지를 결정하는 옵션, 브로커의 수와 같음
Amazon MSK의 업데이트(예: 브로커 크기 변경, Apache Kafka 버전 업그레이드, 브로커 교체 등) 시에도 고가용성을 유지하기 위해 다음과 같은 구성을 권장합니다.
- Replication Factor(RF) 설정
- 2-AZ 클러스터의 경우 RF는 2 이상으로 설정해야 합니다.
- 3-AZ 클러스터의 경우 RF는 3 이상으로 설정해야 합니다.
- 가능하다면 3개의 가용영역(AZ)을 사용하는 구성을 권장합니다. 하지만 이는 필수 사항은 아닙니다.
- 단, 가용영역(AZ) 수는 클러스터 생성 시에만 설정할 수 있습니다.
- Minimum In-Sync Replica(minISR) 설정
- minISR은 최대 [RF - 1]로 설정해야 합니다.
- 이는 하나의 레플리카가 오프라인이거나 복제되지 않은 상태에서도 파티션의 복제 세트(replication set)가 유지되도록 하기 위함입니다.
- 클라이언트 연결 구성
- 클라이언트는 여러 브로커(broker)에 동시에 연결할 수 있도록 설정해야 합니다.
- 연결 문자열에 여러 브로커 주소를 포함하면, 특정 브로커가 패치 중일 때 자동으로 다른 브로커로 Failover가 가능합니다.
b-3.test.xxxxxx.kafka.us-east-1.amazonaws.com:9092,
b-2.test.xxxxxx.kafka.us-east-1.amazonaws.com:9092,
b-1.test.xxxxxx.kafka.us-east-1.amazonaws.com:9092
Amazon MSK 업그레이드 절차 (Console)
- https://console.aws.amazon.com/msk/ 에 접속하여 Amazon MSK 콘솔을 엽니다.
- 탐색 메뉴에서 MSK 클러스터가 위치한 리전을 선택합니다.
- 업그레이드를 진행할 MSK 클러스터를 선택합니다.
- ‘속성’ 탭으로 이동하여 ‘Apache Kafka 버전’ 섹션에서 ‘업그레이드(Upgrade)’를 선택합니다.
- Apache Kafka 버전 섹션에서 다음 단계를 수행합니다.
- Apache Kafka 버전 선택 드롭다운 목록에서 업그레이드할 버전을 선택합니다. 예: 3.9.x
- (선택 사항) 현재 클러스터 버전과 업그레이드 대상 버전 간의 호환성을 확인하려면 ‘버전 호환성(Version compatibility)’을 선택합니다. 이후 ‘선택(Select)’을 눌러 진행하거나 ‘취소(Cancel)’로 돌아갈 수 있습니다.
- 클러스터 구성 업데이트 확인란(Cluster configuration update) 을 선택하면, 업그레이드된 Kafka 버전과 호환되는 새 구성 개정이 자동으로 적용됩니다. 이 설정은 업그레이드 후 기능 호환성과 안정성을 보장합니다. 단, 기존의 사용자 지정 구성을 그대로 유지하려면 이 단계를 건너뜁니다.
- ‘Upgrade(업그레이드)’ 버튼을 선택하여 업그레이드를 시작합니다.
https://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/version-upgrades.html
Apache Kafka 버전 업그레이드 - Amazon Managed Streaming for Apache Kafka
Amazon MSK는 대부분의 Apache Kafka 버전으로의 현재 위치 업그레이드를 지원합니다. 그러나 ZooKeeper 기반 Kafka 버전에서 KRaft 기반 버전으로 업그레이드할 때는 새 클러스터를 생성해야 합니다. 그런
docs.aws.amazon.com
Amazon MSK 업그레이드 절차 (Terraform)
Terraform을 사용하여 Amazon MSK 클러스터를 업그레이드하는 방법은 매우 간단합니다. 단지 kafka_version 값을 새로운 버전으로 변경하면 됩니다. 그러나 단순히 버전만 변경하고 terraform apply를 실행하면 중복된 configuration로 인해 아래와 같은 에러가 발생할 수 있습니다.
Error: creating MSK cluster failed: InvalidParameter: Configuration info cannot be updated to same ARN and revision.
│ status code: 400, request id: 5b63dbef-xxxx-xxxx-xxxx-2e86d731f1ab
이 문제는 기존 aws_msk_configuration 리소스가 이전 Kafka 버전에 종속되어 있기 때문입니다. 즉, 현재 클러스터가 참조 중인 Configuration은 이전 버전용으로 생성된 것이므로, 새 Kafka 버전에서는 호환되지 않아 충돌이 발생합니다. 이를 해결하려면 새로운 Configuration 리소스를 생성하고, 해당 Configuration을 MSK 클러스터에 다시 연결해야 합니다.
# 새 Kafka Configuration 생성
resource "aws_msk_configuration" "msk_config_v2" {
name = "msk-config-v2"
kafka_versions = ["3.7.0"] # 새로 업그레이드할 Kafka 버전
server_properties = <<PROPERTIES
auto.create.topics.enable = true
delete.topic.enable = true
PROPERTIES
}
# MSK 클러스터 정의 (Kafka 버전 및 새 Config 연결)
resource "aws_msk_cluster" "example" {
cluster_name = "example-cluster"
kafka_version = "3.7.0" # 업그레이드 대상 Kafka 버전
number_of_broker_nodes = 2
broker_node_group_info {
instance_type = "kafka.m5.large"
client_subnets = [
aws_subnet.subnet_a.id,
aws_subnet.subnet_b.id
]
security_groups = [aws_security_group.msk_sg.id]
}
configuration_info {
arn = aws_msk_configuration.msk_config_v2.arn
revision = aws_msk_configuration.msk_config_v2.latest_revision
}
encryption_info {
encryption_in_transit {
client_broker = "TLS"
in_cluster = true
}
}
}
- kafka_version을 새 버전으로 변경한다.
- 새 버전에 맞는 aws_msk_configuration 리소스를 추가로 생성한다.
- aws_msk_cluster 리소스의 configuration_info를 새 Configuration로 갱신한다.
References
https://repost.aws/ko/knowledge-center/msk-avoid-disruption-during-patching
보안 패치 적용 중 MSK 클러스터의 고가용성 유지
보안 패치를 적용할 때 MSK 클러스터에서 고가용성을 유지하기 위한 몇 가지 모범 사례를 알고 싶습니다.
repost.aws
https://repost.aws/ko/knowledge-center/msk-upgrade-cluster-issues
MSK 클러스터 업그레이드 시 문제 해결
Amazon Managed Streaming for Apache Kafka(Amazon MSK) 클러스터를 업그레이드할 때 문제를 해결해야 합니다.
repost.aws
https://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/version-upgrades.html
Apache Kafka 버전 업그레이드 - Amazon Managed Streaming for Apache Kafka
Amazon MSK는 대부분의 Apache Kafka 버전으로의 현재 위치 업그레이드를 지원합니다. 그러나 ZooKeeper 기반 Kafka 버전에서 KRaft 기반 버전으로 업그레이드할 때는 새 클러스터를 생성해야 합니다. 그런
docs.aws.amazon.com
'AWS > 솔루션 사례 & 문제 해결' 카테고리의 다른 글
| [AWS] CloudFront to ALB 간 직접 접근 차단 (0) | 2025.11.30 |
|---|---|
| [AWS] AI 캐리커처 생성 이벤트 Solution Architect (2) | 2025.07.31 |
| AWS: CloudWatch 멀티 계정 멀티 리전 활성화 (경보 생성 포함) (0) | 2025.04.30 |
| AWS: 재부팅 후 UserData 적용 실패 사례 (MIME 구성 관련) (0) | 2025.04.22 |
| AWS: Cross-Account 환경에서 중앙 집중형 이벤트 알람 구성 (0) | 2025.04.18 |