Kafka Connect 트러블슈팅: PostgreSQL to ES 데이터 파이프라인 구축 노하우 공개!

by DD
7개월 전
조회수 13

DebeziumPostgreSQL Disk Full 문제 해결을 위해 heartbeat 설정을 추가함

LSN 유실 문제를 해결하고자 SnapshotQuery SPI를 구현하여 데이터 유실 방지를 구현함

ES Sink ConnectorTransforms를 직접 구현하여 ES 인덱스 유연성을 확보하고 도큐먼트 버전 관리를 개선함

Debezium을 활용한 CDC 파이프라인 구조

DebeziumPostgreSQL WAL을 기반으로 변경 사항을 캡처하여 Kafka로 전송한다. 따라서 heartbeat 설정을 통해 변경 사항이 없는 경우에도 LSN을 갱신하여 Disk Full 문제를 해결한다. 구체적으로, heartbeat 메시지를 주기적으로 전송하여 PostgreSQL Slot의 LSN을 업데이트한다.

데이터 유실 방지를 위한 SnapshotQuery SPI 구현

Debezium 재시작 시 LSN 유실로 인한 데이터 유실을 방지하기 위해 SnapshotQuery SPI를 구현했다. 따라서 snapshot.select.statement.overrides 설정을 통해 최신 데이터만 조회하도록 쿼리를 변경하거나, CustomIntervalSnapshotQuery를 구현하여 유연한 스냅샷 쿼리를 제공한다.

ES Sink Connector의 Transforms 구현과 버전 관리

ES Sink ConnectorTimestampRouter 한계를 극복하기 위해 Transforms를 직접 구현했다. 구체적으로, 메시지 키를 활용하여 ES 인덱스를 동적으로 설정하고, 도큐먼트 ID를 관리한다. 결과적으로, 파티션 추가에 따른 버전 충돌 문제를 해결하기 위해 LSN을 활용한 헤더 기반 버전 관리를 도입했다.

PostgreSQL to ES: (2) Kafka Connect 트러블슈팅