
핵심요약
이 글은 Flink 애플리케이션의 end-to-end latency를 낮추기 위해 병목을 진단하고 개선 포인트를 도출하는 과정을 소개합니다. Application Level의 지표 수집과 Operator Level의 Flame Graph 프로파일링을 통해 문제점을 식별하고 해결하는 방법을 다룹니다.
Flink 애플리케이션 End-to-End Latency 개선 방안
1. Application Level: Flink Operator 단위 지표 분석
- End-to-end latency 개선을 위해 Flink operator 별 처리 시간 파악이 필수입니다.
- 처리 시간과 처리 외 시간 두 종류의 히스토그램 지표를 추가하여 병목 구간을 정확히 진단합니다.
- 지표 분리는 문제 해결 방식 결정에 중요하며, Flink의 LatencyMarker 기능의 한계를 보완합니다.
2. Operator Level: Flame Graph 프로파일링 활용
- 병목 operator를 대상으로 Flame Graph를 활용하여 코드 레벨의 개선 포인트를 식별합니다.
- Flame Graph는 콜 스택을 시각화하여 함수 호출 시간과 패턴을 보여주며, 유저 코드와 Flink 내부 코드를 구분합니다.
- 프로파일링은 테스트 환경에서 진행하며, 실서버에서는 성능 저하 우려로 활성화를 권장하지 않습니다.
3. Flame Graph 분석을 통한 병목 해결 전략
- 처리 시간 병목: 어플리케이션 로직, blocking I/O, Flink state 사용 패턴을 코드 인스펙션으로 개선합니다.
- 처리 외 시간 병목 (네트워크 I/O): TaskManager 네트워크 설정 튜닝(taskmanager.network.*) 및 네트워크 인프라를 점검합니다.
- 처리 외 시간 병목 (Flink 내부 코드): Kryo serializer 대신 더 효율적인 POJO serializer 사용 등 serialization 방식을 최적화합니다.
4. 핵심 지표 정의의 중요성 및 결론
- 성능 튜닝 시작 전, 기존 수집 지표의 정의를 정확하게 이해하고 크로스체크하는 것이 매우 중요합니다.
- 잘못된 지표 해석은 잘못된 진단과 시간 낭비를 초래할 수 있음을 강조하며, 정확한 지표 분석 습관을 권장합니다.
하이퍼커넥트