해당 기사에서는 MSK 클러스터의 HeapMemoryAfterGC 메트릭과 관련하여 모니터링 하는 방법과 권장치보다 높았을때 완화 시킬수있는 방법에 대해 가이드합니다.
목적
Amazon MSK(Amazon Managed Streaming for Apache Kafka) 클러스터에서 HeapMemoryAfterGC 메트릭이 AWS 문서에서 권장하는 60%를 초과하는 경우,
응답 지연, 높은 대기 시간과 같은 성능 문제를 야기할 수 있으며, 심각한 경우 메모리 부족으로 인해 브로커 장애가 발생할 수 있습니다.
따라서 해당 기사에서는 해당 지표가 권장 수치를 넘었을때 알림을 설정하는 방법과 이를 해결 하기 위한 방법을 제공합니다.
모니터링
- AWS 관리 콘솔에서 MSK 서비스로 이동합니다.
- 클러스터 목록에서 원하는 클러스터를 선택합니다.
- Cloudwatch 경보 생성 을 클릭하여 검색창에 HeapMemoryAfterGC를 검색합니다.
- 경보를 생성하고 싶은 MSK브로커의 id를 선택하여 [지표 선택]을 클릭합니다.
- 임계값 유형을 [정적],[보다 큼]으로 설정하여 60으로 지정합니다.
(AWS 문서에서는 HeapMemoryAfterGC를 60% 이하로 권장하고 있습니다.)
- 이후 [경보 상태]로 클릭한뒤 보내기를 원하는 Amazon SNS 토픽을 설정합니다.
위의 과정을 통해 HeapMemoryAfterGC의 지표가 60%를 넘을때 이를 Amazon SNS를 통해 알림을 받을 수 있습니다. [1]
해결 방안
AWS에서 권장하는 HeapMemoryAfterGC의 지표가 60%를 초과하는 경우, 다음과 같은 방법을 통해 메모리 사용량를 줄일 수 있습니다:
- 트래픽 줄이기 : 트래픽을 줄이는것이 가능한 경우, 클러스터로 유입되는 트래픽을 줄여 메모리 사용량을 낮출 수 있습니다.
- 클러스터 확장(Scale up): MSK 클러스터를 더 큰 브로커 인스턴스 유형으로 확장하여 더 많은 메모리를 제공할 수 있습니다. 더 큰 인스턴스 유형을 사용하면 Kafka 프로세스에 할당되는 메모리 양이 늘어나 메모리 여유 공간이 확보됩니다.
- 애플리케이션 최적화: transactional.id.expiration.ms 값을 기본 7일에서 1일로 줄여 메모리 사용량을 낮출 수 있습니다. [1]
- ConnectionCount 최소화: 많은 연결 세션 으로 인해 네트워크 스레드의 CPU 사용량이 높아지고, 각 연결 세션이 힙 메모리를 차지하여 메모리 사용량이 높아집니다. 이를 최소화 하여 메모리 사용량을 최적화 할 수 있습니다. [2]
이러한 조치를 통해 HeapMemoryAfterGC 메트릭을 낮추고 MSK 클러스터의 성능과 안정성을 개선할 수 있습니다.
참고 자료
[1] Apache Kafka 메모리 모니터링
https://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/bestpractices.html#bestpractices-monitor-memory
[2] 모니터링을 위한 Amazon MSK 지표 CloudWatch- DEFAULT 수준 모니터링
https://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/metrics-details.html#default-metrics