CaptureChangeMySQL
CaptureChangeMySQL
MySQL 데이터베이스에서 CDC(Change Data Capture) 이벤트를 읽는 프로세서예요. 바이너리 로그(binlog) 파일에서 이벤트를 계속 읽으며, TableStateService가 제공하는 테이블과 관련된 것만 골라내고 나머지는 버려요.
본문
번들 (Bundle)
com.snowflake.openflow.runtime | runtime-database-cdc-processors-nar
설명
MySQL 데이터베이스에서 CDC 이벤트를 읽어요. 프로세서는 바이너리 로그 파일에서 이벤트를 계속 읽으면서, TableStateService가 제공하는 테이블과 관련된 이벤트만 걸러 내고 나머지는 폐기해요. 프로세서는 두 가지 유형의 FlowFile을 출력해요:
- DDL — 테이블의 스키마를 담고 있어요(초기 스키마와 스키마가 변경될 때마다의 새 스키마).
- DML — 테이블 데이터의 변경 사항을 나타내는 레코드예요.
하나의 FlowFile은 항상 단일 테이블과 관련된 데이터를 나타내요. 스키마가 담긴 DDL은 FlowFile 내용에 JSON 객체로 기록돼요:
{
"columns": [
{ "name": "<columnName>", "type": "<snowflakeType>", "nullable": <true|false>, "scale": <scale>, "precision": <precision> },
...
],
"primaryKeys": ["<primaryKey1>", "<primaryKey2>", ...]
}
DML 레코드가 담긴 FlowFile의 구조는 다음과 같아요:
{
"primaryKeys": { "<column>": <value>, ... },
"payload": { "<column>": <value>, ... },
"metadata": { "<column>": <value>, ... }
}
태그
cdc, event, jdbc, mysql, sql
입력 요구 사항 (Input Requirement)
FORBIDDEN — 입력 FlowFile이 허용되지 않아요.
민감한 동적 속성 지원 (Supports Sensitive Dynamic Properties)
false — 지원하지 않아요.
속성 (Properties)
| 속성 | 설명 |
|---|---|
| Column Filter Store | 테이블별 컬럼 필터링 설정을 저장하는 서비스예요. |
| Connection Timeout | 소스 데이터베이스 연결 제한 시간이에요. |
| JDBC Driver Location | 드라이버 JAR와 그 의존성(있다면)을 담은 파일/폴더 및/또는 URL의 쉼표로 구분된 목록이에요. 예: /var/tmp/mariadb-java-client-3.4.1.jar |
| JDBC URL | 데이터베이스 연결의 JDBC URL이에요. 예: jdbc:mariadb://localhost:3306/mysql |
| Max Batch Size | 단일 반복에서 처리할 최대 레코드 수예요. 마지막 binlog 이벤트가 한 행 이상을 담을 때 레코드 수가 최대 배치 크기를 초과할 수 있어요. |
| Max Batch Wait Time | binlog에 데이터가 나타날 때까지 기다리는 최대 시간이에요. |
| Max Queue Size | 리더 스레드가 onTrigger를 기다리기 전까지 binlog에서 읽는 최대 요소 수예요. |
| Password | MySQL 데이터베이스에 접근하는 비밀번호예요. |
| Record Writer | DML 이벤트 직렬화에 사용되는 Record Writer예요. |
| SSL Context Service | 암호화된 소켓 통신을 지원하는 SSL Context Service예요. |
| SSL Mode | SSL Context Service가 인증서 검증 옵션을 지원하도록 구성됐을 때 사용되는 SSL 모드예요. |
| Server ID | 서버 ID(1부터 2^32-1 범위)예요. 이 값은 전체 복제 그룹에서 고유해야 해요(즉, 다른 마스터나 슬레이브가 쓰는 Server ID와 달라야 해요). 각 바이너리 로그 클라이언트를 단순화된 슬레이브로 취급해야 하므로 역시 다른 Server ID를 사용해야 해요. |
| Server ID Strategy | 서버 ID가 어떻게 선택되는지 결정해요. |
| Table State Store | 복제된 테이블의 상태를 보관하는 공유 저장소예요. |
| Username | MySQL 데이터베이스에 접근하는 사용자 이름이에요. |
상태 관리 (State management)
| 범위 (Scope) | 설명 |
|---|---|
CLUSTER |
이 프로세서는 데이터베이스의 현재 CDC 이벤트에 대한 '포인터' 같은 정보를 저장해서, 재시작해도 같은 위치에서 계속할 수 있어요. |
관계 (Relationships)
| 이름 | 설명 |
|---|---|
success |
CDC 스트림 이벤트에서 FlowFile을 성공적으로 만들었어요. |
기록하는 속성 (Writes attributes)
| 이름 | 설명 |
|---|---|
source.schema.name |
이벤트가 발생한 테이블의 스키마 이름이에요. |
source.table.name |
이벤트가 발생한 테이블의 이름이에요. |
cdc.event.type |
FlowFile이 나르는 이벤트 유형, ddl 또는 dml이에요. |
cdc.most.significant.position |
CDC 스트림에서 DDL의 가장 큰 위치 값이에요. |
cdc.least.significant.position |
CDC 스트림에서 DDL의 가장 작은 위치 값이에요. |
cdc.event.seen.at |
프로세서가 ddl 이벤트를 읽은 시점의 타임스탬프예요. |
더 알아보기 (Learn more)
- OpenFlow 프로세서 목록 — OpenFlow 구성 요소 살펴보기