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)무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.