Canal은 MySQL 바이너리 로그를 기반으로 한 고성능 동기화 시스템입니다. Alibaba 그룹(https://www.taobao.com를 포함한)에서 신뢰성 높고 지연 시간이 낮은 증분 데이터 파이프라인을 제공하기 위해 널리 사용되고 있습니다.
Canal 서버는 MySQL 데이터베이스의 바이너리 로그를 해석하여 데이터 변경 이벤트를 추출합니다. 이를 통해 데이터의 삽입, 갱신, 삭제 등의 작업을 식별할 수 있습니다. Canal 서버는 MySQL 데이터베이스와 연결되어 변경 사항을 캡처합니다.
Canal 클라이언트는 Canal 서버로부터 변경 이벤트를 수신하고, 이를 원하는 대상으로 전송할 수 있습니다. 예를 들어, 클라이언트는 변경 사항을 다른 데이터베이스로 동기화하거나 Apache Kafka와 같은 메시징 시스템으로 전송할 수 있습니다. 이를 통해 데이터 변경 사항을 실시간으로 다른 시스템으로 전파하거나 분석 등 다양한 용도로 활용할 수 있습니다.
알리바바 B2B 회사는 초기에 미국과 중국 항저우 간에 서버 데이터를 동기화해야 했습니다. 이전의 데이터베이스 동기화 메커니즘은 트리거를 기반으로 증분 업데이트를 얻는 방식이었습니다. 그러나 2010년부터 알리바바 그룹은 데이터 세트의 바이너리 로그를 사용하여 증분 업데이트를 얻고 서버 간 데이터를 동기화하기 시작했습니다. 이로써 우리는 증분 구독 및 소비 서비스(현재 알리바바 클라우드에서 제공)가 탄생했습니다.
** 증분이란?
증분(incremental)은 변화 또는 증가의 의미를 가지며, 데이터 처리와 관련하여 사용됩니다. 증분 데이터는 기존 데이터에 대한 변경 사항이나 추가된 데이터를 나타냅니다.
마스터 서버는 변경 사항을 바이너리 로그(binlog)에 기록합니다. 이러한 기록들은 바이너리 이벤트(binlog events)라고 불립니다. show binary events를 통해 확인할 수 있습니다.
슬레이브 서버는 마스터의 바이너리 로그 이벤트를 중계 로그(relay log)에 복사합니다.
슬레이브 서버는 중계 로그에 있는 이벤트들을 다시 실행하여 자신의 이전 데이터를 업데이트합니다. 이를 통해 슬레이브 서버의 데이터가 마스터 서버와 동기화됩니다.
Canal은 MySQL 슬레이브의 상호 작용 프로토콜을 모방하여, 자신을 MySQL 슬레이브로 위장하고 MySQL 마스터 서버에 덤프 프로토콜을 전송합니다.
MySQL 마스터는 덤프 요청을 받고 이에 응답하여 이진 로그를 슬레이브(Canal)로 푸시합니다.
Canal은 이진 로그 객체를 자체 데이터 타입으로 파싱합니다.