본문으로 건너뛰기
최종 수정: 에

SQL 매핑을 사용한 MySQL CDC

실험적 기능

Doris의 지속적 데이터 적재는 실험적 기능이며 Doris 4.1.5 버전부터 지원됩니다.

SQL 매핑 동기화는 Job + CDC Stream TVF를 통해 구현되며, 대상은 이미 존재하는 Doris 테이블입니다 (INSERT INTO tbl SELECT * FROM cdc_stream(...)). Doris SQL의 표현력을 활용하면 동기화 파이프라인에서 열 매핑, 필터링 및 데이터 변환을 수행할 수 있으며 exactly-once 시맨틱이 보장됩니다. 데이터 처리가 필요한 실시간 동기화 시나리오에 적합합니다.

Flink CDC의 읽기 기능을 통합하여 Doris는 MySQL에서 변경 로그(Binlog)를 읽고 소스 테이블에서 대상 테이블로 전체 + 증분 동기화를 완료합니다. Doris가 다운스트림 테이블을 자동으로 생성하고 데이터베이스 단위로 테이블 그룹을 동기화하도록 하려면 MySQL CDC 자동 테이블 생성을 참조하세요.

적용 시나리오​

  • 대상 테이블 스키마가 이미 설계된 경우 MySQL 단일 테이블을 Doris로 지속적으로 동기화
  • 동기화 중 열 프루닝, 열 매핑, 필드 이름 변경 또는 데이터 변환이 필요한 경우
  • 엔드 투 엔드 exactly-once 시맨틱을 보장해야 하는 실시간 데이터 통합

사전 조건​

항목설명
Doris 버전4.1.5 이상
테이블 유형현재 대상 테이블로 기본 키 테이블만 지원
사용자 권한Load 권한이 필요합니다
MySQL 구성MySQL 측에서 Binlog를 활성화해야 합니다. 구성 가이드를 참조하세요
시맨틱 보장exactly-once 시맨틱 지원

빠른 시작​

다음 최소 실행 가능 예제는 전체 흐름(작업 생성 후 상태 확인)을 보여 줍니다.

1단계: 가져오기 작업 생성​

CREATE STREAMING JOB을 사용하여 지속적 가져오기 작업을 생성합니다.

CREATE JOB mysql_single_sync
ON STREAMING
DO
INSERT INTO db1.tbl1
SELECT * FROM cdc_stream(
"type" = "mysql",
"jdbc_url" = "jdbc:mysql://127.0.0.1:3306",
"driver_url" = "mysql-connector-java-8.0.25.jar",
"driver_class" = "com.mysql.cj.jdbc.Driver",
"user" = "root",
"password" = "123456",
"database" = "source_db",
"table" = "source_table",
"offset" = "initial"
)

2단계: 가져오기 상태 확인​

select * from jobs("type"="insert") where ExecuteType = "STREAMING";

3단계: 작업 운영​

일시 중지, 재개, 삭제, Task 조회 등의 일반 작업은 지속적 가져오기 개요를 참조하세요.

매개변수 참조​

데이터 소스 매개변수​

CDC Stream TVF에서 지원하는 MySQL 데이터 소스 매개변수는 다음과 같습니다.

매개변수기본값설명
type-데이터 소스 유형. mysql로 설정합니다
jdbc_url-MySQL JDBC 연결 문자열
driver_url-JDBC 드라이버 jar 파일 경로. 파일 이름, 로컬 절대 경로 및 HTTP URL을 지원합니다. 자세한 내용은 JDBC Catalog 개요를 참조하세요
driver_class-JDBC 드라이버 클래스 이름
user-데이터베이스 사용자 이름
password-데이터베이스 비밀번호
database-데이터베이스 이름
table-동기화할 테이블 이름
offsetlatestlatest: 증분 동기화만 수행합니다. initial: 전체 + 증분 동기화를 수행합니다
snapshot_split_size40960split의 크기(행 수). 전체 동기화 중 테이블을 여러 split으로 나누어 동기화합니다
snapshot_parallelism1전체 동기화 단계의 병렬 처리 수준, 즉 Task당 예약되는 split의 최대 수

가져오기 구성 매개변수​

매개변수기본값설명
session.*없음모든 session 변수를 job_properties 아래에 구성할 수 있습니다. 가져오기 변수는 Insert Into Select를 참조하세요

max_interval과 같은 일반 매개변수는 지속적 가져오기 개요를 참조하세요.

FAQ​

Q1: SQL 매핑 동기화와 자동 테이블 생성 동기화의 차이는 무엇인가요?

  • SQL 매핑 동기화: 대상 Doris 테이블을 미리 생성해야 합니다. 열 매핑 및 데이터 변환을 지원하므로 세밀한 처리 시나리오에 적합합니다.
  • 자동 테이블 생성 동기화: Doris가 다운스트림 테이블을 자동으로 생성하고 데이터베이스 단위로 전체 동기화합니다. 자세한 내용은 MySQL CDC 자동 테이블 생성을 참조하세요.

Q2: 기본 키가 아닌 테이블을 대상 테이블로 지원하나요?

현재 대상 테이블로 기본 키 테이블만 지원합니다.

Q3: 과거 전체 데이터 없이 증분 데이터만 동기화하려면 어떻게 하나요?

offset 매개변수를 latest로 설정합니다. 작업은 전체 동기화 단계를 건너뛰고 Binlog 증분 데이터만 동기화합니다.

Q4: 전체 동기화가 너무 느릴 때 어떻게 최적화하나요?

다음 두 매개변수를 조정하여 전체 동기화 단계의 처리량을 높일 수 있습니다.

  • snapshot_split_size: split당 행 수를 늘립니다.
  • snapshot_parallelism: Task당 예약되는 split의 병렬 처리 수준을 높입니다.