Search
🔧

Flink CDC Kafka Connector 오픈소스 커스텀

개요

항목
내용
기간
2025.12.23 ~ 2026.01.27
역할
의사결정 및 구현 담당
기술 스택
Java/Kotlin, Apache Flink CDC, Kafka, Avro, Confluent Schema Registry
핵심
오픈소스 커스텀으로 Avro + Schema Registry 지원 추가

배경

상품 메타데이터는 CNPG(Cloud Native PostgreSQL)에 저장되어 있었고, 이 역시 MongoDB와 마찬가지로 색인과 통계 등 후처리 작업을 위해 CDC가 필요했습니다.
Flink CDC Pipeline YAML 방식이 PostgreSQL을 지원하므로, Kotlin DataStream API로 직접 코드를 작성하는 것보다 간단한 이 방식을 채택했습니다.

문제

타 부서에서 관리하는 Kafka 환경에서는 Schema Registry + Avro 포맷 사용이 필수였습니다. 그러나 Flink CDC Pipeline YAML 방식은 이를 지원하지 않았습니다.
flowchart LR
    A[PostgreSQL<br>CNPG] --> B[Flink CDC Pipeline<br>YAML 방식]
    B --> C[Kafka]
    C --> D[Schema Registry ❌<br>Avro 미지원 ❌]
Mermaid
복사
선택지는 세 가지였습니다:
선택지
장점
단점
MongoDB처럼 Kotlin DataStream API로 전환
완전한 제어
개발 비용 높음, YAML의 간편함을 포기
Kafka Consumer 쪽에서 변환
CDC 쪽 수정 불필요
아키텍처 복잡도 증가, 타 부서 협의 필요
오픈소스 커스텀
YAML 방식 유지 + 요구사항 충족
유지보수 부담

무엇을 했나

의사결정: 오픈소스 커스텀

오픈소스 커스텀은 유지보수와 문서 관리 등 관리 요소가 증가하지만, AI 에이전트를 적극 활용해 규격화하면 이러한 단점을 극복할 수 있을 것이라 판단했습니다.

구현 내용

flowchart LR
    A[PostgreSQL<br>CNPG] --> B[Flink CDC Pipeline<br>YAML 방식]
    B --> C[커스텀 Kafka Connector]
    C --> D[Avro 직렬화]
    D --> E[Schema Registry 등록]
    E --> F[Kafka]
Mermaid
복사
원래 커넥터 vs 커스텀 범위:
flowchart LR
    A[CDC Source<br>PostgreSQL] --> B[Serialization]
    B --> C[Kafka Producer]
    C --> D[Kafka]

    style B fill:#fff3cd,stroke:#ffc107
Mermaid
복사
원래 커넥터
커스텀 추가
value.format
debezium-json, canal-json
avro, debezium-avro
key.format
json, csv
avro
스키마 관리
없음
Schema Registry 연동 (조회/캐싱/호환성 검증)
Wire Format
평문 JSON
Confluent 호환 [0x00][SchemaID 4B][Avro Binary]
Envelope
debezium-json (before/after/op/source), canal-json (old/data/type)
debezium-avro (Avro 직렬화된 envelope)
Key/Value 분리
key와 value에 같은 계열만 적용 가능
각각 다른 포맷 지정 가능 (key: json, value: debezium-avro 등)
즉, 기존 커넥터의 Serialization 레이어(Serialization 영역)를 확장하여 Avro 직렬화 + Schema Registry 연동을 추가한 것이 핵심입니다.

AI 에이전트 활용 문서화

Claude Code를 활용하여 README.md(Configuration, Type Mapping, Wire Format 등)와 docs/ 하위 기술 문서(Avro 패키지 분석, 직렬화 스키마 개선 문서 등) 4건을 생성
커스텀 옵션 테이블, 타입 매핑 테이블, 예제 파이프라인 YAML 등을 문서화하여 유지보수 부담 경감

결과

요구사항을 충족하는 커스텀 Kafka Connector를 개발하여 운영에 적용
YAML 기반 파이프라인 정의 방식을 유지하면서도 Schema Registry + Avro 지원
타 부서의 Kafka 환경 요구사항(Schema Registry 필수)을 충족하면서도 CDC 파이프라인의 간결함을 유지

배운 점

커스텀 오픈소스의 가장 큰 단점인 문서화/유지보수 부담을 AI 에이전트로 문서 생성하여 대응함
MongoDB는 DataStream API로 전환, PostgreSQL은 YAML 유지 + 오픈소스 커스텀으로 간 것처럼 상황에 따라 다른 의사결정을 했고, 각각의 트레이드오프를 정리해두는 것이 후속 유지보수에 도움이 됨