Kawaii_Jordy

[CDC 연구] Kafka-Connect를 통한 CDC 구현 방법 모색 본문

취준/Kafka-Connect

[CDC 연구] Kafka-Connect를 통한 CDC 구현 방법 모색

Kawaii_Jordy 2021. 4. 20. 19:27

CDC란?

CDC는 변경 데이터 캡처(Change Data Capture)의 약자로서 다른 소프트웨어가 이러한 변경 사항에 응답 할 수 있도록 데이터의 변경 사항을 모니터링하고 캡처 하는 시스템의 용어

https://knight76.tistory.com/entry/CDC-소개-및-적용하기-위한-관련-자료-링크-모음

KAFKA에서 CDC 구현

1. Debezium 사용(DB 로우 레벨에 접근, https://debezium.io/)

  • 장점 : 로우 레벨 변경이 있을 경우 changed event stream에 기록하기 때문에 Create, Modify, Delete 등 모든 event를 알 수 있음
  • 단점 : DB마다 custom 하게 모듈을 만들어야 하기 때문에 모든 DB를 지원하지 않음.
    • 1.4(2021-03-01 stable ver)기준으로 Mysql, MongoDB, PostgreSQL, Oracle, SQL Server, Db2, Cassandra Vitess 를 지원함. 1.5(2021-04-07, develop ver)
    • Mysql은 binlog를 통해서 Kafka-connect와 연결시키는데 debezium roadmap을 확인해보면 1.6ver에 MariaDB도 지원할 예정이라고 함(https://debezium.io/roadmap/)
  • 구현 후기 : debezium에서 만든 모듈을 그대로 사용하기 때문에 구현에 어려움은 없음. Mysql 대신에 Mariadb를 사용하여 kafka-connect에 연결을 시도했지만 실패.. (MariaDB binlog format과 Mysql binlog format이 상이함)

2. JDBC Connector 사용

  • 장점 : JDBC가 지원하는 RDB를 모두 사용할 수 있음
  • 단점 : DB Table rowd의 Create, Modify의 경우만 감지 할 수 있음.(https://docs.confluent.io/2.0.0/connect/connect-jdbc/docs/index.html#jdbc-connector)
    • 현재 MariaDB는 방이나 참가자가 들어오면 Table에 row가 추가되고, 방이 없어지거나 참가자가 나가면 row가 삭제되게 됩니다. row가 삭제되었을 때를 탐지 못하는 것이 큰 단점으로 볼 수 있음.
  • 구현 후기 : kafka-connect의 package import 하는 곳에 mariadb-java-client.x.x.x.jar를 넣고 재시작하면 jdbc를 통해서 mariaDB에 접근해서 연결할 수 있음. 하지만, row가 삭제 되는 시점을 모르기 때문에 단점이 뚜렷함.

결론

Debezium으로 계속 개발 하려고 함.

: Debezium-Mariadb-source 모듈만 나오면 Mysql 에서 MariaDB로 쉽게 변환할 수 있기 때문에

Comments