Debezium
by Gunju Ko
Debezium
CDC란?
- Changed Data Capture의 약자이다.
- 변경된 내용을 골라내는 기술이다.
- DBMS들은 CUD 작업전에 작업 내용을 Logging한다 (write-ahead-logging). CDC는 Source DB의 로그을 읽어 변경된 내용을 Target DB에 적용한다.
- OGG(Oracle Golden Gate), Debezium 등이 대표적이다.
- CDC는 주로 Incremental Indexing에 사용된다.
Debezium이란?
- Debezium은 카프카 커넥터의 Source 커넥터의 집합이다. CDC를 사용하여 데이터베이스의 변경 사항을 수집한다.
- Debezium은 데이베이스의 로우 레벨의 변경 사항을 캡처하여 애플리케이션이 변경 내용을 보고 이를 처리할 수 있도록 해주는 분산 서비스이다.
- Debezium은 모든 로우 레벨의 변경을 changed event stream에 기록한다. 애플리케이션은 이 스트림을 통해 변경 이벤트을 순서대로 읽는다.
- Debezium은 다양한 커넥터들을 제공한다. Debezium의 목표는 다양한 DBMS의 변경 사항을 캡쳐하고 유사한 구조의 변경 이벤트를 produce 하는 커넥터 라이브러리를 구축하는 것이다. 현재는 MongoDB, MySQL, PostgreSQL, SQL Server, Oracle, Db2, Cassandra 등을 지원한다. 커넥터에 관련 자세한 내용은 debezium - connectors 를 참고하길 바란다.
출처 : https://debezium.io/documentation/reference/1.0/index.html
Debezium Features
- Debezium은 Log based CDC로 아래와 같은 특징이 있다. 자세한 사항은 advantage of log based CDC 를 참고해라
- 모든 데이터 변경이 캡쳐된다.
- 변경 이벤트를 큰 딜레이없이 생성한다.
- data model 변경을 필요로 하지 않는다.
- 변경뿐만 아니라 삭제도 캡쳐한다.
- 레코드의 과거 상태도 캡처가능 하다.
- Debezium CDC는 아래와 같은 다양한 기능 및 옵션을 제공한다.
- Snapshots : 커넥터가 시작될 때 데이터베이스의 현재 상태에 대한 초기 스냅샷을 생성할 수 있다. 스냅샷을 위한 다른 모드가 존재한다.
- Filters : 특정 테이블이나 칼럼의 변경만 캡쳐하도록 설정할 수 있다.
- Masking : 민감한 정보의 경우 특정 칼럼을 마스킹처리할 수 있다.
- Monitoring : 대부분의 커넥터들은 JMX를 사용해서 모니터링 될 수 있다.
- Messsage Transformations : message routing, routing of events
출처 : https://debezium.io/documentation/reference/1.0/features.html
Debezium Architecture
- 가장 일반적으로 Debezium은 카프카 커넥터를 통해 배포된다.
- Source 커넥터는 데이터를 카프카에 모으는 역할을 한다. (예 : Debezium)
- Sink 커넥터는 카프카 토픽에 있는 데이터를 다른 시스템으로 전파하는 역할을 한다.
- MySQL, Postgres 용 Debezium 커넥터는 데이터베이스의 변경사항을 캡쳐하기 위해 배포된다. 커넥터는 클라이언트 라이브러이를 사용하여 Source 데이터베이스에 커넥션을 맺고, MySQL의 경우 bilog에 액세스하고 Postgres의 경우 logical replication stream을 읽는다.
- 기본적으로 한 테이블의 변경 사항은 하나의 토픽으로 전달된다.
- topic routing SMT 를 사용하면 토픽의 이름을 변경하거나 여러개의 테이블의 변경사항을 하나의 토픽으로 전달할 수 있다.
-
변경 이벤트가 카프카에 있으면, 서로 다른 커넥터를 사용하여 변경 사항을 Elasticsearch, Data warehouses, cache 등에 반영할 수 있다.
- Debezium 커넥터를 사용하는 다른 방법은 Embedded Engine을 사용하는 것이다. 이 경우 Debezium은 카프카 커넥터를 통해 실행되지 않고 자바 애플리케이션의 라이브러리로 사용된다. Embedded Engine는 변경 이벤트를 애플리케이션에서 바로 consuming하거나 변경 내역을 Amazon Kinesis와 같은 다른 메시지 브로커로 전달하고자 할 때 유용하다.
출처 : https://debezium.io/documentation/reference/1.0/architecture.html
참고
- https://knight76.tistory.com/entry/debezium
- https://medium.com/@ankulwarganesh10/streaming-sql-server-cdc-with-apache-kafka-using-debezium-82d89aafb885