토스증권의 수 천개 실시간 데이터 파이프라인 운영방법 #2: MSA 환경 Observability 높이기
· 토스 · 토스 기술 블로그
소개
Kafka Broker request log를 활용해서 서비스 간 의존성 파악하기
AI 핵심 요약
수많은 서비스 Pod와 Kafka Topic 사이의 연결을 소스 코드 수정 없이 실시간으로 파악하려 했지만, 커널 연결 정보나 코드 분석만으로는 애플리케이션 수준의 관계를 정확히 알기 어려웠습니다. Kafka Broker의 request log를 검토한 뒤, 모든 Client가 주기적으로 호출하는 METADATA API만 기록하도록 해 로그량과 Broker 부하를 줄이면서 연결 정보를 수집했습니다. 로그에 없는 Consumer Group과 서비스 이름은 Consumer Lag metric 및 Kubernetes conntrack 데이터와 ClickHouse에서 조인해 보완하고, Materialized View로 결과를 제공했습니다. 완성된 service_graph를 리니지 메타데이터와 Grafana에 연결해 서비스별 Producer·Consumer 관계를 확인할 수 있게 했으며, 관측 데이터는 수집뿐 아니라 여러 팀이 쉽게 활용하도록 제공하는 것이 중요하다는 점을 보여줍니다.
- 커널 수준의 연결 정보만으로는 애플리케이션의 Topic이나 Consumer Group을 알 수 없으므로, 필요한 관측 정보를 수집할 계층을 구분해야 합니다.
- Kafka request log를 전부 기록하면 Broker에 부하를 줄 수 있으니, 호출 빈도가 낮고 모든 Client가 주기적으로 사용하는 METADATA API를 선별해 기록합니다.
- METADATA 로그에 없는 Consumer Group 정보는 Consumer Lag metric과 clientId로 결합해 보완할 수 있습니다.
- IP와 Port를 서비스 이름으로 해석할 때는 Kubernetes Node의 conntrack 정보를 활용하고, ClickHouse에서 여러 데이터 소스를 조인합니다.
- 복잡한 조인을 ClickHouse Materialized View로 미리 계산해 두면 다른 팀이 결과 테이블을 간단히 조회하고 재사용할 수 있습니다.
비슷한 학습 자료
토스ㅣSLASH 21 - 토스 데이터의 흐름과 활용
SLASH · YouTube
토스증권의 수천 개 실시간 데이터 파이프라인 운영방법 #1: Visualize Lineage
강병수 · 토스 기술 블로그
토스증권 Apache Kafka 데이터센터 이중화 구성 #3: Offset Sync
김용우 · 토스 기술 블로그
토스증권 Apache Kafka 데이터센터 이중화 구성 #2: 데이터 미러링
송지수 · 토스 기술 블로그
토스증권 Apache Kafka 데이터센터 이중화 구성 #1
강병수 · 토스 기술 블로그
ksqlDB를 활용한 증권사의 실시간 데이터 처리하기
강병수 · 토스 기술 블로그