데브포일 홈
DEV MODE - 실서버 영향 없음 📦 배포 관리
CDC & 데이터 레이크 통합
+600 XP
LEVEL 96 QUEST

CDC & 데이터 레이크 통합

DB 변경을 실시간 캡처! Debezium CDC + Bronze/Silver/Gold 데이터 레이크 + Apache Iceberg + 실시간 ETL 통합 아키텍처

LEVEL 96 - CDC & DATA LAKE GRAND FINALE

CDC & 데이터 레이크 통합

DB 변경을 실시간으로 캡처하고, 데이터 레이크에 적재하는
Debezium CDC + Bronze/Silver/Gold 아키텍처의 대단원

Kafka + Flink + CDC + Iceberg = 완벽한 실시간 데이터 파이프라인

1 Debezium CDC - PostgreSQL WAL 기반 실시간 변경 캡처

CDC(Change Data Capture)는 데이터베이스의 모든 변경사항을 실시간으로 캡처하여 Kafka 토픽으로 전달합니다. 애플리케이션 코드 변경 없이 DB 변경을 스트리밍으로 전환하는 마법입니다.

docker-compose.yml - Debezium CDC 인프라
# Debezium CDC 인프라 스택
version: "3.9"
services:

  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: shorts_platform
      POSTGRES_USER: shorts
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    command:
      - "postgres"
      - "-c"
      - "wal_level=logical"          # CDC 필수: 논리적 복제 활성화
      - "-c"
      - "max_replication_slots=4"     # Debezium 복제 슬롯
      - "-c"
      - "max_wal_senders=4"           # WAL 전송 프로세스
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  kafka:
    image: confluentinc/cp-kafka:7.6.0
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_NODE_ID: 1
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
      CLUSTER_ID: ${KAFKA_CLUSTER_ID}
    ports:
      - "9092:9092"

  debezium:
    image: debezium/connect:2.5
    environment:
      BOOTSTRAP_SERVERS: kafka:9092
      GROUP_ID: debezium-cluster
      CONFIG_STORAGE_TOPIC: debezium-configs
      OFFSET_STORAGE_TOPIC: debezium-offsets
      STATUS_STORAGE_TOPIC: debezium-status
      CONNECT_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
      CONNECT_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
    depends_on:
      - kafka
      - postgres
    ports:
      - "8083:8083"

  schema-registry:
    image: confluentinc/cp-schema-registry:7.6.0
    environment:
      SCHEMA_REGISTRY_HOST_NAME: schema-registry
      SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: kafka:9092
    ports:
      - "8081:8081"

volumes:
  pgdata:
CDC 커넥터 등록 - curl 명령
# Debezium PostgreSQL 커넥터 등록
curl -X POST http://localhost:8083/connectors \
  -H "Content-Type: application/json" \
  -d '{
    "name": "shorts-cdc-connector",
    "config": {
      "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
      "database.hostname": "postgres",
      "database.port": "5432",
      "database.user": "debezium",
      "database.password": "'${DEBEZIUM_PASSWORD}'",
      "database.dbname": "shorts_platform",
      "topic.prefix": "cdc",
      "table.include.list": "public.videos,public.channels,public.revenue,public.analytics",
      "plugin.name": "pgoutput",
      "slot.name": "debezium_slot",
      "publication.name": "dbz_publication",
      "snapshot.mode": "initial",
      "tombstones.on.delete": "true",
      "transforms": "unwrap",
      "transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
      "transforms.unwrap.add.fields": "op,table,source.ts_ms",
      "transforms.unwrap.delete.handling.mode": "rewrite",
      "heartbeat.interval.ms": "10000",
      "errors.tolerance": "all",
      "errors.deadletterqueue.topic.name": "dlq.cdc-errors"
    }
  }'
<100ms
CDC 캡처 지연시간
WAL
PostgreSQL 논리적 복제
0
앱 코드 변경 필요
🔒
여기까지는 미리보기입니다
CDC & 데이터 레이크 통합
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)