728x90
반응형

향후 일을 하기 전에 어떤 기술 스텍들을 사용하는지 알아보던 중 Debezium 이라는 기술을 처음 들어보게 되었다.
그래서 Debezium 이 뭔지 알아보려고 한다.

 

Debezium 이란?

Debezium (이하, 데베지움) 의 공식 문서는 아래의 사이트에서 확인할 수 있다.

https://debezium.io/

 

Debezium

Debezium is an open source distributed platform for change data capture. Start it up, point it at your databases, and your apps can start responding to all of the inserts, updates, and deletes that other apps commit to your databases. Debezium is durable a

debezium.io

 

공식 문서에서 데베지움에 대해서 이렇게 설명하고 있다.

 

데베지움은 데이터베이스의 변경 사항을 캡처하여 애플리케이션이 변경 사항을 확인하고 이에 응답할 수 있도록 하는 분산 서비스의 집합이다. 데베지움은 각 데이터베이스 테이블 내의 모든 행 수준의 변경 사항을 변경 이벤트 스크림 에 기록하고 애플리케이션은 이러한 스트림을 읽기만 하면 변경 이벤트가 발생한 순서대로 변경 이벤트를 볼 수 있다.

 

설명에서 중요하다고 생각되는 부분만 정리해보면 다음과 같다.

  • 데이터베이스의 변경사항을 캡처하여 애플리케이션이 변경 사항 확인
  • 분산 서비스 집합
  • 테이블 내의 모든 행 수준의 변경 사항을 변경 이벤트 스크림에 기록
  • 변경 이벤트가 발생한 순서대로 변경 이벤트 확인

 

Debezium 의 특징

데베지움은 아파치 카프카 커넥터용 소스 커넥터셋이라고 한다. 각 커넥터는 CDC (Changed Data Capture) 에 해당하는 데이터베이스의 기능을 사용하여 다른 데이터베이스에서 변경 사항을 수집한다. 폴링 또는 이중 쓰기와 같은 다른 접근 방식과 달리 데베지움에서 구현한 로그 기반 CDC 는 다음과 같은 특징을 가지고 있다.

  • 모든 데이터 변경 사항이 캡처되어있는지 확인한다.
  • 빈번한 폴링에 필요한 CPU 사용량 증가를 피하면서 지연이 매우 짧은 변경 이벤트를 생성한다.
  • "Last Update" 컬럼과 같은 데이터 모델을 변경할 필요가 없다.
  • 삭제를 캡처할 수 있다.
  • 데이터베이스의 기능 및 구성에 따라 트랜젝션 ID 및 원인 쿼리와 같은 이전 레코드 상태 및 추가 메타데이터를 캡처할 수 있다.

 

그리고 데베지움의 커넥터는 다양한 관련 기능과 옵션을 통해 데이터 변경 사항을 캡처한다.

  • 스냅샷
    선택적으로 커넥터가 시작되고 모든 로그가 아직 존재하지 않는 경우 데이터베이스의 현재 상태에 대한 초기 스냅샷을 생성할 수 있다. 일반적으로 데이터베이스가 일정 시간 안 실행되어 트랜잭션 복구 또는 복제에 더 이상 필요하지 않은 트랜잭션 로그를 버린 경우이다. 커넥터 런타임에서 트리거할 수 있는 증분 스냅샷 지원을 포함하여 스냅샷을 수행하기 위한 다양한 모드가 있다.
  • 필터
    포함 / 제외 목록 필터를 사용하여 캡처된 스키마, 테이블 및 열 집합을 구성할 수 있다.
  • 마스킹
    중요한 데이터가 포함된 경우 특정 열의 값을 마스킹할 수 있다.
  • 모니터링
    대부분의 커넥터는 JMX 를 사용하여 모니터링할 수 있다.
  • 메시지 라우팅, 필터링, 이벤트 평면화 등을 위해 바로 사용할 수 있는 메시지 변환

 

 

Debezium Connector

데베지움의 커넥터에는 다음과 같이 여러 종류가 있다.

https://debezium.io/documentation/reference/2.3/connectors/index.html

 

Connectors :: Debezium Documentation

Version: |

debezium.io

 

데베지움의 목표는 다양한 데이터베이스 관리 시스템에서 변경 사항을 캡처하고 매우 유사한 구조로 이벤트를 생성하는 커넥터 라이브러리를 구축하여 변경 사항이 발생한 위치에 관계없이 애플리케이션이 이벤트를 훨씬 쉽게 사용하고 응답할 수록 하는 것이라고 한다.

 

데베지움의 커넥터로는 다음과 같은 종류로 되어있다.

 

 

Debezium Architecture

데베지움 아키텍처에 대한 공식 문서는 아래에서 확인할 수 있다.

https://debezium.io/documentation/reference/2.3/architecture.html

 

Debezium Architecture :: Debezium Documentation

Yet an alternative way for using the Debezium connectors is the embedded engine. In this case, Debezium will not be run via Kafka Connect, but as a library embedded into your custom Java applications. This can be useful for either consuming change events w

debezium.io

 

데베지움은 가장 일반적으로 아파치 카프카 커넥터를 통해 배포한다.
카프카 커넥터는 다음을 같이 구현하고 운영하기 위한 프레임워크이자 런타임이다.

  • 카프카로 레코드를 보내는 데베지움과 같은 소스 커넥터
  • 카프카 항목에서 다른 시스템으로 레코드를 전파하는 싱크 커넥터

 

출처 - https://debezium.io/documentation/reference/2.3/architecture.html

 

구성도를 확인해보면 Mysql 과 PostgreSQL 의 데이터베이스가 있고 데베지움 커넥터에 연결이 되어있다.
커넥터(데베지움 소스 커넥터)를 통해 두 데이터베이스의 변경사항을 캡처한다.

  • Mysql 커텍터는 클라이언트 라이브러리를 사용해 binlog 에 접근합니다.
  • PostgreSQL 커넥터는 logical replication stream 을 통해서 읽어온다.

 

카프카 커넥터는 카프카 브로커 외에 별도의 서비스로 운영된다.

 

기본적으로 하나의 데이터베이스 테이블의 변경 사항은 이름이 테이블 이름에 해당하는 카프카 topic 에 기록된다.
필요한 경우에는 데베지움의 topic routing transformation 을 구성해서 대상이 되는 topic 이름을 변경할 수 있다.

 

변경된 레코드가 아파치 카프카에 있으면 카프카 커넥터 에코 시스템의 다양한 커넥터(싱크 커넥터)가 레코드를 엘라스틱서치, 데이터 웨어하우스 및 분석 시스템과 같은 다른 시스템 및 데이터베이스 또는 캐시로 스트리밍할 수 있다.

 

다른 방법으로는 데베지움 서버를 통해 배포하는 방법이 있다. 데베지움 서버는 소스 데이터베이스에서 다양한 메시징 인프라로 변경 이벤트를 스트리밍하는 구성 가능하고 바로 사용할 수 있는 애플리케이션이다.
데베지움 서버는 데베지움 소스 커넥터 중 하나를 사용하여 소스 데이터베이스에서 변경 사항을 캡처하도록 구성된다.
변경 이벤트는 JSON 또는 Apache Avro 와 같은 다양한 형식으로 직렬화할 수 있으며 AWS Kinesis, GCP Pub/Sub 또는 Apache Pulsar 와 같은 다양한 메시징 인프라 중 하나로 전송된다.

 

다른 방법으로는 임베디드 엔진이 있는데 카프카 커넥터를 통해 실행되지 않고 사용자 지정 자바 애플리케이션에 포함된 라이브러리로 실행된다고 한다. 애플리케이션 내에서 자체적으로 변경 이벤트를 사용하거나 AWS Kinesis 와 같은 대체 메시징 브로커로 변경 사항을 스트리밍하는데 유용할 수 있다고 한다.

 

Debezium 정리하기

이렇게 Debezium 에 대해서 공식 문서를 살펴보며 정리를 해보았는데 대략 어떤 플랫폼인지 정리해보려고 한다.

 

Debezium 은 기존 데이터베이스의 정보를 이벤트 스트림으로 변환하는 분산 플랫폼이다.
애플리케이션이 데이터베이스의 행 수준 변경 사항을 감지하고 즉시 대응할 수 있도록 한다.

 

일반적으로 아파치 카프카 위에 구축되고 카프카 커넥터와 호환되어 사용된다.
각 커넥터는 DBMS 와 함께 작동하고 변경 사항이 발생할 때 이를 감지하고 각 변경 이벤트의 레코드를 카프카 토픽으로 스트리밍해 DMBS 의 변경 내역을 기록한다. 컨슈머 애플리케이션은 카프카에서 결과 이벤트 레코드를 읽을 수 있다.

 

Debezium 의 특징은 다음과 같다.

  • 로그 기반의 CDC 를 통해 변경 사항을 캡처한다.
  • 모든 데이터 변경 사항이 캡처되어있는지 확인한다.
  • 빈번한 폴링에 필요한 CPU 사용량 증가를 피하면서 지연이 매우 짧은 변경 이벤트를 생성한다.
  • "Last Update" 컬럼과 같은 데이터 모델을 변경할 필요가 없다.
  • 삭제를 캡처할 수 있다.
  • 데이터베이스의 기능 및 구성에 따라 트랜젝션 ID 및 원인 쿼리와 같은 이전 레코드 상태 및 추가 메타데이터를 캡처할 수 있다.

 

그리고 Debezium 은 다양한 커넥터를 사용할 수 있다.

 

Debezium 은 다음과 같이 크게 3가지 방법으로 사용해볼 수 있다고 한다.

  • 아파치 카프카 커넥터를 통해 구축
  • Debezium 서버 구축
  • Debezium 임베디드 엔진을 통해 라이브러리로 실행

 

 

따라서, Debezium 은 로그 기반의 CDC 기능을 통해 데이터베이스의 변경 사항을 이벤트 스트림을 통해 변경 내용을 기록하고 가져갈 수 있도록 하는 플랫폼으로 이해할 수 있다. 로그 기반으로 변경 사항을 캡처하고 삭제에 대한 내용이나 여러 기능과 옵션을 통해 캡처를 제공하고 있는 Debezium 만의 여러 특징을 가지고 있다.
그리고 Debezium 을 어디서 어떻게 사용하는지에 대해서도 찾아보았더니 데이터베이스에서 실시간으로 변경되는 사항들을 로그를 통해 확인해서 시스템에 복제하기 위한 용도로 사용된다고 한다.

 

여러 블로그를 찾아보고 한 결과 Debezium 에 대해서 조금 더 이해를 하기 위해서는 아파치 카프카에 대한 이해도 어느 정도 필요하겠다는 생각이 들었다. 특히 카프카 커넥터에 대한 내용을 이해하고 있어야 보다 쉽게 이해할 수 있지 않을까 생각한다.

 

당장에는 Debezium 이 이런 플랫폼이구나~ 하는 정도로만 이해하고 넘어가지만 직접 사용해보면서 지금 이해한 내용들이 더 잘 이해될거라고 생각한다.

 

728x90
반응형

'데이터 엔지니어링 > 개념정리' 카테고리의 다른 글

페이로드(Payload) 에 대해서  (0) 2023.08.13
OLPT 와 OLAP 에 대해서  (0) 2023.02.05
복사했습니다!