피드로 돌아가기
Kafka Connect로 DB 데이터 쉽게 연동하기
컬리 기술블로그컬리 기술블로그
Backend

Kafka Connect로 DB 데이터 쉽게 연동하기

컬리가 Kafka Connect JDBC 소스 커넥터로 MySQL·Oracle·PostgreSQL의 데이터를 쿼리 기반 CDC 방식으로 동기화하며 timestamp.delay.interval.ms 옵션 튜닝으로 데이터 누락 문제 해결

2025년 3월 4일12intermediate

Context

컬리는 다양한 관계형 데이터베이스(MySQL, Oracle, PostgreSQL)의 데이터를 분석 플랫폼으로 통합해야 했으나, 각 DB의 구조와 처리 방식이 상이해 관리가 복잡했다. 로그 기반 CDC(Debezium)는 DB별 트랜잭션 로그(BinLog, WAL, Redo Log) 분석 도구의 복잡한 설정과 높은 권한이 필요했다.

Technical Solution

  • Kafka Connect JDBC Source Connector 도입: RDBMS에서 주기적 SQL 쿼리로 데이터를 추출해 Kafka로 전송하는 쿼리 기반 CDC 방식 적용
  • Incremental Query Mode(증분 쿼리 모드) 운영: Auto Increment PK 또는 Timestamp 컬럼을 오프셋으로 저장해 이전 처리 데이터를 건너뛰고 신규 데이터만 추출
  • Timestamp and Incrementing Mode 선택: 동일 timestamp를 가진 다중 레코드의 부분 실패 시 PK 값으로 미처리 레코드를 정확히 감지 및 재전송
  • 데이터 누락 방어를 위한 timestamp.delay.interval.ms 옵션 설정: 트랜잭션 미완료 데이터로 인한 누락을 방지하기 위해 쿼리 실행 시각에서 일정 시간(예: 2분)을 감산한 지점까지만 데이터 수집 범위 제한
  • 트랜잭션 타임아웃과 쿼리 주기를 고려한 옵션값 튜닝: 데이터 적재 지연과 누락 간의 균형을 맞추기 위해 비즈니스 특성에 맞게 지연 시간값 조정

Impact

아티클에 정량적 성능 수치가 명시되지 않음

Key Takeaway

JDBC 소스 커넥터는 DB별 로그 분석 도구 의존성을 제거하고 쿼리 기반으로 표준화된 구현을 가능하게 하지만, 주기적 폴링으로 인한 데이터 누락을 timestamp.delay.interval.ms로 보정할 때 지연시간 증가 트레이드오프를 감수해야 한다. 따라서 트랜잭션 특성과 허용 가능한 지연 범위를 먼저 파악해 옵션값을 결정하는 것이 안정적인 파이프라인 구축의 핵심이다.


다중 이기종 RDBMS에서 데이터를 Kafka로 수집하는 팀에서 Kafka Connect JDBC Source Connector의 Timestamp and Incrementing Mode를 사용할 때, timestamp.delay.interval.ms를 트랜잭션 타임아웃 시간 이상으로 설정하면 미완료 트랜잭션으로 인한 데이터 누락을 방지하면서도 지연시간 증가를 최소화할 수 있다.

원문 읽기