
백엔드
Apache Flink 어플리케이션의 End-to-End Latency 병목 찾아내기
두줄요약
Flink 어플리케이션의 end-to-end latency 병목을 찾기 위해 operator 지표와 flame graph를 활용하는 방법을 소개했습니다. 처리 시간과 처리 외 시간을 분리해 관측하고, 병목 유형별로 다른 개선 방향을 제시했습니다.
문제 상황
- Flink 어플리케이션의 end-to-end latency가 사용자 만족도에 직접 영향을 주는 상황
- 트래픽 증가, 경험 개선, 비용 절감 요구로 지속적인 성능 튜닝 필요
- 병목 구간을 정확히 찾지 못하면 개선 방향을 잘못 잡기 쉬운 상태
원인 분석
- 기존 latency 지표가 처리 시간만 포함해 처리 외 시간을 놓치는 문제
- 처리 시간과 처리 외 시간의 병목 원인이 서로 달라 해결 방식이 달라지는 구조
- LatencyMarker는 실서버 사용성, 정확도, 세부 분리 측면에서 한계 존재
해결 방법
- operator 단위로 처리 시간과 처리 외 시간을 별도 히스토그램으로 수집
- 병목 operator를 찾은 뒤 operator flame graph로 내부 실행 구간을 프로파일링
- 처리 시간 병목, 네트워크 I/O 병목, Flink 내부 코드 병목으로 나눠 점검
주의할 점
- flame graph는 기본 비활성화이며 관측 시 성능 저하가 발생할 수 있음
- 실서버보다 운영과 유사한 테스트 환경에서 활용하는 방식이 적합함
- 수집 중인 지표가 실제 의미와 일치하는지 코드 레벨에서 재확인 필요
적용해볼 점
- end-to-end latency를 처리 시간과 처리 외 시간으로 쪼개어 관측
- 느린 operator를 먼저 특정한 뒤 콜 스택과 코드 레벨을 함께 점검
- Kryo serializer처럼 내부 병목이 보이면 serializer나 네트워크 설정을 검토
