백엔드
토스증권 Apache Kafka 데이터센터 이중화 구성 #3: Offset Sync
두줄요약
토스증권이 Kafka Active-Active 환경에서 consumer offset sync를 구현한 방식을 소개했습니다. Timestamp 검색과 Header 참조를 나눠 쓰며 유실을 막고, 작업 상황의 중복까지 줄이도록 운영했습니다.
핵심 내용
- Apache Kafka Active-Active 이중화 환경에서 consumer offset sync를 설계한 사례
- 기존 MirrorMaker2와 Confluent Replicator의 방식과 한계 비교
- 50:50 구조와 100:0 구조에 따라 Timestamp 검색 방식과 Header 참조 방식으로 분리한 구현
- 재난 상황의 유실 방지와 작업 상황의 중복 제거를 모두 만족시키기 위한 모니터링과 운영 방식 정리
선택 이유
- MM2의 보수적 변환은 유실은 막지만 중복이 늘고, 동일 토픽명·비미러 토픽 제약이 존재
- Confluent Replicator는 Timestamp 기반으로 간편하지만 Apache Kafka 기본 환경에서는 그대로 쓰기 어려움
- 100:0 구조에서는 Timestamp 검색으로 유실 없이 동기화, 50:50 구조에서는 헤더의 원본 offset을 기준으로 미러 메시지만 동기화
트레이드오프
- Timestamp 검색은 일반적인 증가 패턴에서는 유실 없이 동작하지만, timestamp 순서가 꼬이면 중복 가능성 존재
- Header 참조 방식은 미러된 메시지만 동기화해 유실을 줄이지만, Offset Sync 성공 확률과 지연 문제가 발생
- 작업 상황에서는 트래픽을 한쪽으로 몰아 X자 꼬임을 해소해 중복과 유실을 모두 줄이는 운영 필요
성능/운영 포인트
- timestamp 역전 상황을 메트릭으로 기록해 중복 가능성을 조기 감지
- 일정 주기 Offset Sync와 10분 윈도우 변화량을 통해 동기화 정상 여부를 모니터링
- Topic·consumer별 대시보드로 Mirroring, InSync, 지연 상태를 추적하며 장애 대응과 이전 작업 수행