피드로 돌아가기
Debezium MSK Connect로 Failover 구현하여 서비스 안정성 높이기
올리브영 테크블로그올리브영 테크블로그
Backend

Debezium MSK Connect로 Failover 구현하여 서비스 안정성 높이기

카탈로그서비스개발팀이 Debezium MSK Connect에 Heartbeat 모니터링, Offset 기반 복구, Failover 시나리오 대응을 구현해 Connector 장애 시 데이터 정합성 유지

2024년 11월 7일12advanced

Context

Debezium MSK Connect 운영 중 Connector 중단, 데이터 불일치, 메시지 순서 보장 불가 등의 안정성 문제가 발생했다. 기존 테이블 구조와 신규 시스템 테이블이 다르기 때문에 Sink Connector 대신 별도의 Consumer Worker를 구성하여 데이터 변환 및 매핑을 직접 수행해야 했다.

Technical Solution

  • Topic Heartbeat 기능 도입: heartbeat.interval.ms와 topic.heartbeat.prefix 옵션으로 주기적 연결 상태 확인 및 Slack/온콜 시스템으로 실시간 알림
  • Offset 기반 복구 전략: 현재 Offset을 akhq로 확인하고 신규 Connector 생성 시 해당 Offset 정보로 설정하여 이전 오프셋부터 데이터 재처리
  • Consumer Worker 구성: MSK에서 수신한 메시지를 변환한 뒤 신규 시스템에 저장하며, 기존 토픽의 데이터를 재발행하여 데이터 보정
  • AOP 기반 메시지 처리 제어: 메시지 수정 시간 비교를 통해 최신 메시지만 처리하도록 설정
  • Failover 상황 대응: op="r" (스냅샷) 상태의 데이터를 op="f" (Failover) 상태로 강제 변환하고, after의 모든 key 값으로 ChangedFields 항목을 생성하여 기존 테이블 연관 토픽으로 재전송
  • snapshot.select.statement.overrides 옵션으로 특정 테이블의 스냅샷 쿼리 커스터마이징하여 필요한 데이터만 선택적 로드

Key Takeaway

MSK 기반 CDC 시스템에서는 Heartbeat 모니터링으로 조기 장애 감지, Offset 추적으로 데이터 연속성 보장, Failover 상황에서 op 상태 강제 변환으로 서비스 로직과의 정합성을 동시에 확보해야 한다.


Debezium MSK Connect를 운영하는 팀에서 Connector 장애 시 snapshot.select.statement.overrides로 특정 기간 데이터만 스냅샷 생성하고, op="r" 상태를 op="f"로 변환하며 AOP로 메시지 수정 시간을 비교하면 Failover 후에도 데이터 정합성과 메시지 순서를 유지할 수 있다.

원문 읽기