AI Briefing

아파치 플링크 CDC, MySQL 실시간 연동 시 조직 맞춤 최적화 사례 공개

·2024.09.04 00:00

핵심 내용

Flink CDC 2.4.1 기반 MySQL 연동 시 단계별 카프카 토픽 분리와 DDL 보안 대응 로직을 적용했다.

1 / 11

자세히 보기

데이터 분석 플랫폼 조직이 서비스 DB 부하 최소화를 위해 Apache Flink와 Flink CDC를 활용해 MySQL 간 실시간 연동(CDC)을 구축한 사례를 공유했다. 기존 Debezium 기반 방식의 대규모 스냅샷 지연 문제를 해결하고, 실무 운영에 필요한 보안 및 안정성 기능을 커스터마이징했다.

단계별 카프카 토픽 분리 및 재시작 로직

스냅샷 단계의 병렬 처리와 Binlog 스트림 단계의 순서 보장을 위해 카프카 토픽을 분리하는 로직을 구현했다. 기존 Flink Job은 실행 중 토픽 변경이 불가능했으나, 스냅샷 완료 시 Watchtower 알림 시스템으로 GTIDs를 반환하고 Binlog 전용 토픽으로 재시작하는 방식을 채택했다.

  • flink-connector-mysql-cdc 수정: onFinishedSplits 및 assignSplits 함수에 단계 전환 알림 및 GTIDs 반환 로직 추가
  • 재시작 절차: 스냅샷 종료 후 잡 중지 -> 반환된 GTIDs와 Binlog 목적 토픽으로 Binlog 스트림 단계 시작

DDL 이벤트 감지 및 보안 대응

서비스 테이블의 스키마 변경(DDL) 시 민감 데이터가 해싱 없이 적재되는 것을 방지하기 위해 DDL 이벤트 감지 시 해당 이벤트와 이후 이벤트를 스킵하는 로직을 적용했다. 예외 발생으로 잡을 중단하는 방식은 메시지 커밋 보장 문제로 기각되었다.

  • 스킵 로직: handleQueryEvent 함수에서 SchemaChangeEvent 감지 시 이후 모든 이벤트 무시
  • 재연동 지원: DDL 이벤트의 GTIDs 정보를 알림 시스템으로 전송하여 재연동 시 기준점으로 활용

DB 스위칭 감지 및 자동 재연동

MySQL 복제 서버 도메인으로 접속 중 주 서버로 스위칭되는 것을 방지하기 위해 자동 재연결 로직을 추가했다. 주 서버 연결을 방지하고 복제 서버 도메인으로 재연결하도록 설계했다.

  • DNSIpChecker: 주-복제 2대 구성에서 DNS IP 변경 감지 시 예외 발생 및 재연결
  • ReadOnlyChecker: InnoDB Cluster 환경에서 read_only 설정값 조회를 통해 주 서버 연결 여부 판단

버전 및 호환성

본 사례는 Apache Flink 1.17.1과 Flink CDC 2.4.1을 기준으로 작성되었다. Flink CDC 3.1 이상 버전은 스냅샷 단계만 수행하는 기능 등이 개선되었으나, 3.x 버전은 Flink 1.18 호환성을 요구하므로 주의가 필요하다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.