# Debezium

[Kafka] Debezium Postgresql Source Connector 를 활용한 CDC.
TL;DR kafka를 활용해 Debezium Postgresql Source Connector를 사용한 CDC 환경을 만들어 보려고 했는데 처음 하다보니 debezium docs나 kafka docs들이 돌이켜보니 잘돼있었지만, 시간이 꽤나 걸렸다. 이를 기록해서 나와 같은 분들이 있다면 빠르게 초기 세팅을 할 수 있으면 좋겠다. CDC ( Change Data Capture ) CDC는 변경된 데이터를 캡쳐한다는 의미로 우리가 특정 Source Database 에서 Insert, Delete, Update 가 일어난 데이터들을 저장하여 다른 Target System으로 전달하는 것을 말한다. 기존에는 Batch 작업을 통해서 일정 주기마다 변경사항들을 전달하는 방식들이 있었는데 이를 realtime에 가깝게 할 수 있도록 하는 대체 방안으로 현재 많이 사용되고 있다. 이러한 CDC를 직접 application으로 개발하여서 할 수도 있겠지만, 이미 Provider들

카프카 클러스터와 파이썬 (2) - Debezium & Postgresql & Django, log based CDC 만들기 (source & sink connector)
[ 글의 목적: kafka clustering & connect (debezium) 을 활용해 DB 변화를 catch 하는 Change Data Capture를 기반으로 DB duplication을 위한 접근법과 "사용법"에 대한 기록 ] kafka cluster and CDC > change data capture는 특정 DBMS의 data 변화 감지를 하는 것이다. log-based 로 접근하면 어떤 데이터가 어떻게 변했는지, CUD에 대한 정보를 모두 얻을 수 있다. 여기서 log는 postgresql의 wal file을 중심으로 살펴보고 해당 CDC를 기반으로 duplicated 된 DB 구성을 직접 해보자! 🔥 우선 등장하게 될 예제는 https://github.com/Nuung/django-all-about 레포 기준으로 진행합니다. 그리고 꼭 동일 시리즈 내의 이전 글 [카프카 클러스터와 파이썬 (1) - python kafka with kafka

strimzi,debezium connector 구현
개요 전 포스티에서 connector 구현하던 중 애매하게 끝났던 부분이 있었습니다. strimzi 에서 KafkaConnect를 사용할 이미지를 커스텀하는 방법입니다. 해당 내용과 관련하여 정리해보고 실제로 connector 를 어떻게 구현했는지 공유해보겠습니다. customize the strimzi connect image Building a new container image with connector plugins from the Kafka Connect base image 위 내용을 참고하시면 원하는 플러그인을 추가하여 새로운 이미지를 만들 수 있습니다. 이때는 다양한 플러그인을 사용할 수 있습니다. 대표적으로 사용할 수 있는 플러그인을 접할 수 있는 공간은 아래와 같이 있습니다. [conf

[3편] MSA 이벤트 발행 - Debezium Transformations
이전글 > [2편] MSA 이벤트 발행 - 구현 > Outbox 패턴을 적용하여 비지니스 객체 변경과 이벤트 발행이 하나의 트랜잭션으로 동작하는 강의 서비스 애플리케이션을 구현했다. 지난 글에서 debezium을 이용하여 OUTBOX에 쓴 메시지를 kafka 메시지 브로커로 발행하는 방법에 대해 알아봤다. 하지만 강의를 게시하는 하나의 트랜잭션에 메시지가 다음가 같이 3개가 발생한다. 그 이유는 애플리케이션에서 이벤트 발생 시 outbox에 이벤트를 쓰고 지운다. 이에 따라 위와 같이 create 메시지와 delete 메시지가 발생한 것이다. 하지만 우리는 강의를 게시하는 하나의 트랜잭션에 하나의 메시지만 생성하면 된다. 그 중 첫번째 메시지를 beautify 한

[2편] MSA 이벤트 발행 - 구현
* 이전 글 * > [1편] MSA 이벤트 발행 - 이론 > MSA에서 비지니스 객체의 변경에 대한 이벤트를 발행할 때, 비지니스 객체 변경과 이벤트 발행이 하나의 트랜잭션으로 실행되어야하는 이유를 설명했다. 또한 이를 위한 방법으로 Outbox 패턴을 소개했다. [그림] 강의 서비스 아키텍처 - 강의 게시 요청 상세 위 아키텍처 그림은 강사(Teacher)가 강의 게시 요

[1편] MSA 이벤트 발행 - 이론
왜 이벤트를 발행해야 하나? MSA의 특징중에 하나는 Database per Service이다. 즉, 서비스 각각이 자체 DB를 가지고 있다는 것이다. 이를 통해, 서비스들은 서로 느슨한 결합을 유지할 수 있게 된다. 또한 다른 서비스가 DB 락을 획득하여 서비스를 블로킹하는 일을 방지할 수도 있다. 하지만 서비스 별로 DB를 가지고 있다보니 트랜잭션 관리나 반정규화된 데이터들의 동기 처리가 어렵다. 따라서 MSA에서는 최종 일관성을 보장하는 방법을 택하게 된다. > * 최종 일관성 (Eventual Consistency) * 이란? > 데이터 항목에 새로운 업데이트가 없으면 궁극적으로 해당 항목에 대한 모든 접근들은 마지막으로 업데이트된 값을 반환하는 것 > 즉, 일시적으로 데이터의 합이 맞지 않을 수 있지만, 언젠가 동기화가 되면 모든 클라이언트가 동일한 데이터를 받을 수 있게 된는 것이다. 그렇다면 어떻게 최종 일관성을 보장할 수 있을까? MSA에서는 어떤 서비스에

MSA - 데이터 동기화
오늘은 MSA에서 중요한 데이터 동기화 방식에 대해 고민했던 시간을 기록해보자. 📘 데이터 동기화란? > MSA(Microservice Architecture)에서 데이터 동기화란, 마이크로서비스 간의 데이터 정합성을 보장하기 위해 각 마이크로서비스에서 처리된 데이터를 통합적으로 관리하는 것을 말한다. MSA 환경에서는 각 마이크로서비스는 독립적으로 동작하지만, 각 마이크로서비스에서 처리된 데이터를 정확하게 통합하기 위해서는 데이터 동기화 기술이 필요하다. 데이터 동기화 기술은 대표적으로 데이터 베이스 동기화, 메시지 브로커를 통한 데이터 동기화, 캐시 기술 등이 있고 이를 통해 MSA 환경에서도 데이터 정합성을 보장할 수 있다 나는 그 중에서 오픈 소스를 활용하기 위해서 두가지의 방법을 조사하고 테스트했었다. CDC 오픈 소스 사용 Kafka 데이터 동기화 사용 📜 CDC 오픈 소스 사용 일단 내가 찾아본 도구는 2가지였다. Debezium

Kafka Source Connector - Debezium
Debezium > Stream changes from your database. > > 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 and fast, so your apps can respond quickly and never miss an event, even when things go wrong. 데이터베이스의 변경사항을 캡처하는 분산 서비스 각 데이터베이스 테이블 내의 모든 행 수준 변경을 변경 이벤트 스트림에 기록하고, 애플리케이션은 이러한 스트림을 읽기만
쿠버네티스에 카프카 커넥트 and debezium 구축
debezium에서 만든 이미지를 사용했다. 환경 변수 설정하는 데서 시간을 오래 잡아먹었는데 처음에는 s CONNECT_를 앞에 붙여야 하는 줄 알았는데 알고 보니 빼고 써야 했다. statefulset으로 구성을 했다. debezium.yaml bootstrap_servers -> 여기에 자신이 구축한 카프카 브로커 서버를 써주면 된다. pv.yaml pv이름은 본인 자유다 debezium 이미지 안에는 debezium 커넥터가 포함되어 있기 때문에 따로 다운로드하지 않아도 된다. rest 테스트해보니 rest 요청은 외부에서는 퍼블릭 IP:nodeport 내부에서는 포드 IP:debezium port, 노드 private IP:nodeport
debezium 이것 저것
여러 블로그를 참고해서 했습니다. 번역 -> https://knight76.tistory.com/entry/debezium 기술 -> https://velog.io/@ehdrms2034/Kafka-%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%BB%A4%EB%84%A5%ED%8A%B8 기술 -> https://cjw-awdsd.tistory.com/53 db 설치 -> https://velog.io/@seungsang00/Ubuntu-%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90-MySQL-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0 ec2 db 연결 -> https://kingofbackend.tistory.com/195 ec2 db 유저 생성 -> https://velog.io/@ejayjeon/MYSQL-1.-%EA%B3%84%EC%A0%95-%EC%83%9D%EC%84%B1-%EA%B6%8C%ED%95%9C-%EB

debezium 설치?하기
1. debezium 다운받기 저는 mysql을 이용했기 때문에 여기 wget https://repo1.maven.org/maven2/io/debezium/debezium-connector-mysql/1.9.6.Final/debezium-connector-mysql-1.9.6.Final-plugin.tar.gz 이렇게 하면 됩니다. kafka 폴더 안에 connect폴더를 만들어서 그 안에 풀어주는게 좋습니다!! 2. connect 설정 분산모드로 실

Debezium을 사용한 Cloud SQL to BigQuery CDC 파이프라인 구축
아키텍처 CDC CDC란 Change Data Capture로 DBMS에서 데이터가 변경되면 transaction log를 통해 해당 항목을 추적하고 이러한 변경에 대응해야 하는 다른 시스템 및 서비스에 알림을 전송하는 검증된 데이터 통합 패턴이고, Debezium은 대표적인 CDC 툴이다. Cloud SQL 생성 MySQL로 생성해주고 외부에서 접속을 해주기 위해 접속을 승인할 네트워크 대역을 지정해준다. 해당 ip는 아래에서 생성해줄 내 VM ip를 확인하여 지정해준 것이다. 아래 명령어로 Cloud SQL 접속
Debezium을 이용한 PostgreSQL CDC(Change Data Capture)
Change Data Capture? 데이터베이스에서 변경 데이터 캡처(change data capture, CDC)는 변경된 데이터를 사용하여 동작을 취할 수 있도록 데이터를 결정하고 추적하기 위해 사용되는 여러 소프트웨어 디자인 패턴들의 모임이다. Debezium Debezium은 기존 데이터베이스 이벤트를 스트림으로 바꾸는 변환하는 플랫폼으로 어플리케이션은 데이터베이스내의 행 레벨의 변경을 확인 할 수 있다. Debezium 아키텍쳐 debezium connectors는 MySQL, P
Change Data Capture(CDC)
정의 DBMS의 변경 데이터를 사용해 후속처리를 취할 수 있도록 데이터를 추적하기 위해 사용되는 소프트웨어 디자인 패턴들의 집합 CDC 구현 기법 timestamp 특징 테이블 내 마지막 변경 시점을 기록하는 timestamp(update date) 컬럼 존재 더 최근의 timestamp 값을 갖는 레코드가 발견되면 변경된 것으로 식별 변경된 데이터를 감지하는 일반적이면서도 간단한 CDC 매커니즘 주의사항 변경 감지가 필요한 테이블에 timestamp 컬럼 관리 필요 삭제된 데이터 감지 불가 실시간 변경 데이터 반영 힘듬 trigger 특징 변경 감지가 필요한 테이블에 trigger 생성 insert/update/delete 발생 시 queue 형식의 테이블에 기록 데이터 수집기에서는 queue 테이