CDC & Debezium

diense_kk·2023년 8월 20일
0

Developer

목록 보기
4/8
post-thumbnail

CDC

DBMS의 변경 데이터를 사용해 후속처리를 취할 수 있도록 데이터를 추적하기 위해 사용되는 소프트웨어 디자인 패턴들의 집합

CDC의 구현 기법

  1. timestamp
  • 특징
    테이블 내 마지막 변경 시점을 기록하는 timestamp(update date) 컬럼 존재
    더 최근의 timestamp 값을 갖는 레코드가 발견되면 변경된 것으로 식별
    변경된 데이터를 감지하는 일반적이면서도 간단한 CDC 매커니즘

  • 주의사항
    변경 감지가 필요한 테이블에 timestamp 컬럼 관리 필요
    실시간 변경 데이터 반영 힘듬

  1. trigger
  • 특징
    변경 감지가 필요한 테이블에 trigger 생성
    insert/update/delete 발생 시 queue 형식의 테이블에 기록
    데이터 수집기에서는 queue 테이블을 조회하여 insert/update/delete 작업 실행

  • 주의사항
    DB의 성능 저하 문제

  1. Log Scanner
  • 특징
    요즘에는 일반적으로 Log Scanner 방식을 CDC라고 부르는 추세
    대부분의 DB에는 DB의 모든 이벤트를 저장하는 트랜잭션 로그가 존재 ex) Binlog(MySQL), WAL(PostgreSQL) 등
    트랜잭션 로그에서 변경데이터를 추출(insert/update/delete)
    로그 기반이기 때문에 개발자의 실수로 인한 이벤트 누락이 없음
    DB에 직접 쿼리 하지 않기 때문에 DB 부하 최소화
    timestamp 및 trigger 등의 생성 불필요
    실시간 변경 데이터 처리 가능

  • 주의사항
    DB 설정 및 DB 계정 권한에 따라 도입 제한
    예를 들어 DB성능 향상을 위해 트랜잭션 로그를 생성하지 않을 수 있음
    운영 이슈로 인한 데이터 bulk 작업과 같이 변경 데이터의 양이 많을 경우 동기화 지연 발생 가능성 존재

오픈소스 CDC 툴

  1. Debezium

RedHat에서 지원하는 Apache Kafka 기반의 분산 CDC 플랫폼
DB의 변경사항을 캡처하여 Kafka의 topic에 변경사항을 발행
기본적으로 하나의 테이블의 변경사항은 하나의 topic에 발행
소비자는 kafka의 topic에서 메세지를 구독하여 data warehouse, cache, search engine 등에 동기화 가능
MySQL, PostgreSQL, MongoDB, Oracle 등 다양한 DB를 지원

Debezium

Debezium이란?

Debezium은 카프카 커넥터의 Source 커넥터의 집합이다. CDC를 사용하여 데이터베이스의 변경 사항을 수집한다.
Debezium은 데이베이스의 로우 레벨의 변경 사항을 캡처하여 애플리케이션이 변경 내용을 보고 이를 처리할 수 있도록 해주는 분산 서비스이다.

Debezium은 모든 로우 레벨의 변경을 changed event stream에 기록한다. 애플리케이션은 이 스트림을 통해 변경 이벤트을 순서대로 읽는다.

Debezium은 다양한 커넥터들을 제공한다. Debezium의 목표는 다양한 DBMS의 변경 사항을 캡쳐하고 유사한 구조의 변경 이벤트를 produce 하는 커넥터 라이브러리를 구축하는 것이다. 현재는 MongoDB, MySQL, PostgreSQL, SQL Server, Oracle, Db2, Cassandra 등을 지원한다.

Debezium Features

Debezium은 Log based CDC로 아래와 같은 특징이 있다.
1. 모든 데이터 변경이 캡쳐된다.
2. 변경 이벤트를 큰 딜레이없이 생성한다.
3. data model 변경을 필요로 하지 않는다.
4. 변경뿐만 아니라 삭제도 캡쳐한다.
5. 레코드의 과거 상태도 캡처가능 하다.

0개의 댓글