Search

CDC 전략에 대해서

MySQL 데이터의 이진 로그 복제

이진 로그란?
데이터베이스에서 수행된 모든 작업에 대한 기록을 보관하는 로그
다른 mysql 인스턴스로 데이터를 복제하는 것이 목적이지만, 이진 로그를 통해 데이터 웨어하우스로 보낼 데이터를 수집하기 용이함
우선, 바이너리로그에 대해서 간단히 알아보면 아래와 같습니다.
MariaDB 의 바이너리로그의 내용및 활용은 아래와 같습니다.
MariaDB는 바이너리로그라는 파일에 DB 에서 발생한 변경내역을 저장한다.
해당 로그의 역할및 활용에는 여러가지가 존재하지만 가장 중요한 부분은 바로 복제/복구의 활용이다.
만약 MariaDB 서버에서 디스크가 모자란다는 알람이 와서 확인해보, 해당 바이너리 로그가 관리없이 많이 쌓여있음을 확인할 수 있습니다 → 저희는 아직 아닙니다.
하나, MariaDB는 바이너리로그라는 파일에 DB 에서 발생한 변경내역을 저장한다.
해당 로그의 역할및 활용에는 여러가지가 존재하지만 가장 중요한 부분은 바로 복제/복구의 활용이다.
둘, MariaDB 의 환경설정중 expire_logs_days 를 변경함으로써 삭제주기를 조절할 수 있다.
셋, MariaDB bin log 를 삭제하려면, purge binary logs to 명령어를 사용하면됨.

CDC 개요

CDC(변경 데이터 캡처)는 SQL Server 에이전트를 사용하여 테이블에 적용되는 삽입, 업데이트 및 삭제 작업을 기록
데이터 베이스 내의 원본 테이블의 변경 내용을 반영해야 하지만, 원본 복제본을 고치는 기술은 적합하지 않기 때문에
구조화되고 안정적인 변경 데이터 스트림이 필요해서 CDC를 사용하게 됩니다.

CDC(Changed Data Capture)

변경된 데이터를 판별 및 추적하는데 사용되는 소프트웨어 설계 패턴
쉽게 말해서 변경된 내용을 골라내는 기술(실시간 데이터 변경 이력 관리)
DBMS가 CUD 전에 작업내용을 Logging(write-ahead-logging)
CDC가 Source DB의 로그를 읽어 변경된 내용을 Target DB에 적용
Golden Gate(Oracle), Binlog(MySQL), WAL(PostgreSQL), Debezium 등이 대표적
실시간 처리 가능(새벽마다 통계 및 분석을 위한 대량 배치 작업을 줄일 수 있음)
데이터 변경분만 전송되기에 효율적으로 자원을 사용 가능
구성 방법
1.
mysql 서버에서 이진 로그를 활성화 + 구성
2.
초기 전체 테이블 추출을 실행 + 로드
3.
지속적으로 이진 로그 추출
4.
추출된 이진 로그를 데이터 베이스로 변환하여 로드

카프카 및 Debezium을 통한 스트리밍 데이터 수집

mysql 이진 로그 또는 pg WALs와 같은 CDC 시스템을 통해 데이터를 수집할 경우, 프레임워크의 도움이 필요합니다. 구현이 복잡하기 때문인데요.
Debezium은 여러 오픈 소스 서비스로 구성된 분산 시스템으로, 일반적인 CDC 시스템에서 행 수준 변경을 캡처한 후 다른 시스템에서 사용할 수 있는 이벤트로 스트리밍합니다.
설치에 필요한 세 가지 주요 구성 요소가 있습니다.
아파치 주키퍼: 분산 환경을 관리하고 각 서비스의 구성을 처리
아파치 카프카: 분산 스트리밍 플랫폼
아파치 카프카 커넥트: 데이터를 카프카를 통해 쉽게 스트리밍할 수 있도록 카프카를 다른 시스템과 연결. CDC 시스템의 데이터를 카프카 토픽으로 변환
카프카는 토픽 별로 정리된 메세지를 교환합니다. 하나의 시스템(sql 등)은 토픽에 publish(produce)할 수도 있고, 토픽을 consume 혹은 subscribe할 수도 있습니다.
Debezium은 이 시스템의 연결을 모두 관리할 수 있는 오픈소스라고 보시면 되겠습니다.