LLM WikiAccess-protected knowledge portal

WIKI

Debezium 3.6: RocksDB 오프힙 스키마 이력·MySQL 폴 경로 최적화·Docling SMT로 CDC 운영 경계를 확장한 방법

왜 지금 봐야 하나 Debezium은 MySQL, PostgreSQL, MongoDB 등 주요 데이터베이스에서 CDC Change Data Capture 이벤트를 Kafka로 스트리밍하는 사실상 표준 도구다. 2026년 7월 1일 Debezium 3.6.0.Final이 출시됐다. Kafka Connect 4.3.0을 기반으로 한 이번 릴리스는 두 가지 오랜 운영 문제를 해결했다. 첫 번째 문제 대규모 스키마 환경에서 JVM 힙

경로human/study/content/database-frontier/54-debezium-3-6-rocksdb-offheap-mysql-poll-docling-cdc.md
카테고리Study
태그#cdc #docling #mysql #offheap #poll #study

왜 지금 봐야 하나

Debezium은 MySQL, PostgreSQL, MongoDB 등 주요 데이터베이스에서 CDC(Change Data Capture) 이벤트를 Kafka로 스트리밍하는 사실상 표준 도구다. 2026년 7월 1일 Debezium 3.6.0.Final이 출시됐다. Kafka Connect 4.3.0을 기반으로 한 이번 릴리스는 두 가지 오랜 운영 문제를 해결했다.

첫 번째 문제: 대규모 스키마 환경에서 JVM 힙 메모리 압박. 수백 개 테이블을 캡처하는 커넥터는 테이블 매핑과 스키마 이력 전체를 JVM 힙에 보관했다. 테이블 수가 늘수록 OOM 위험이 커졌고 GC 부담이 높아졌다. 3.6은 이를 RocksDB 기반 오프힙 스토리지로 교체할 수 있는 플러그인 인터페이스를 도입했다.

두 번째 문제: MySQL 커넥터 폴 경로의 CPU·메모리 오버헤드. doPoll() 메서드가 Java 스트림/컬렉터 파이프라인을 사용해 불필요한 중간 객체를 생성했다. 사전 크기 지정 ArrayList와 직접 루프로 교체하면서 폴 경로의 메모리 할당이 75% 감소하고 CPU 오버헤드가 31~42% 감소했다.

이 두 변화 외에도 AI/RAG 파이프라인 통합을 위한 Docling SMT, Amazon SNS 싱크, MariaDB 신호 기반 binlog 위치 조정 등이 포함됐다.


버전 히스토리

버전날짜주요 변화
3.5.0.Final2026-03-31Kafka Connect 4.2 지원, 오라클 커넥터 개선
3.6.0.Alpha12026-04-23RocksDB 오프힙 테이블 매핑 스토리지 인터페이스 초안
3.6.0.Alpha22026-05-15Apache Fluss 싱크 어댑터(인큐베이팅), Amazon SNS 싱크 초안
3.6.0.Beta22026-06-15Docling SMT, Spanner UUID 지원, MySQL 폴 경로 최적화
3.6.0.CR12026-06-24MariaDB binlog 위치 신호, Vitess 컬럼 트런케이션
3.6.0.Final2026-07-01Kafka Connect 4.3.0 기반, 전체 기능 릴리스

변화 1: RocksDB 오프힙 테이블 이력 스토리지

기존 구조의 문제

Debezium 커넥터는 캡처 중인 테이블의 컬럼 매핑과 스키마 이력을 JVM 힙 내 자료구조로 관리했다. 테이블 50개 수준에서는 문제가 없지만, 수백~수천 개 테이블을 캡처하는 환경에서는 세 가지 문제가 드러난다.

3.6의 해법: 플러그인 테이블 매핑 스토리지

3.6은 테이블 매핑 스토리지를 인터페이스로 추상화하고 RocksDB 기반 구현체를 제공한다. 기본값은 기존 메모리 구현을 유지한다. RocksDB 구현을 선택하면 스키마 이력과 테이블 매핑이 디스크에 저장되고 JVM 힙 외부에서 관리된다.

# MySQL 커넥터 설정 예시
schema.history.internal=io.debezium.storage.rocksdb.RocksDbSchemaHistory
schema.history.internal.rocksdb.path=/var/debezium/schema-history

table.mapping.storage=io.debezium.relational.history.RocksDbTableMappingStorage
table.mapping.rocksdb.path=/var/debezium/table-mapping
이전: 힙 내 스키마 이력
JVM Heap
커넥터 런타임
테이블 매핑 (수 GB)
스키마 이력 (수 GB)
OOM 위험 · Major GC 증가
이후: RocksDB 오프힙
JVM Heap (소형)
커넥터 런타임만 유지
↕ 읽기 / 쓰기
RocksDB (디스크)
테이블 매핑
스키마 이력
Debezium 3.6 RocksDB 오프힙 스토리지: JVM 힙 부담 분리

운영 판단: 캡처 테이블이 100개 이하이고 현재 설정이 안정적이라면 굳이 마이그레이션할 필요는 없다. 200개 이상이거나 OOM 이력이 있다면 도입을 고려한다. RocksDB 경로의 I/O 성능이 커넥터 처리량에 직접 영향을 준다 — NVMe SSD를 권장한다. Kubernetes 환경에서는 PersistentVolume 마운트가 필요하다.


변화 2: MySQL 커넥터 폴 경로 최적화

변경 전: 스트림/컬렉터 파이프라인

MySQL 커넥터의 doPoll() 메서드는 binlog 이벤트 배치를 처리할 때 Java 스트림 API와 Collectors.toList()를 사용했다. 스트림 파이프라인은 내부적으로 중간 객체를 생성하고, 최종 컬렉션 크기를 예측하지 못해 ArrayList를 동적으로 확장한다. 폴 경로는 초당 수천 번 호출되는 핫 패스이므로 이 오버헤드가 누적된다.

변경 후: 사전 크기 지정 ArrayList + 직접 루프

// 변경 전
List<SourceRecord> records = events.stream()
    .map(this::toSourceRecord)
    .collect(Collectors.toList());

// 변경 후
List<SourceRecord> records = new ArrayList<>(events.size()); // 사전 크기 지정
for (Event event : events) {
    records.add(toSourceRecord(event));
}

측정 결과:

높은 처리량 환경(초당 수천 건 이상의 binlog 이벤트)에서 효과가 뚜렷하다. GC 압박 감소로 커넥터 레이턴시 일관성이 개선된다.

이 최적화는 MySQL 커넥터에 적용됐다. PostgreSQL, MongoDB, Oracle 커넥터는 별도로 확인해야 한다.


변화 3: Docling SMT — CDC 이벤트를 AI 파이프라인으로 직접 연결

배경

Docling은 텍스트를 Markdown, JSON 등 구조화된 형식으로 변환하는 문서 처리 라이브러리다. RAG(Retrieval-Augmented Generation) 파이프라인에서 문서를 임베딩 전 전처리할 때 자주 쓰인다.

Docling SMT의 역할

Debezium 3.6의 Docling SMT(Single Message Transformation)는 CDC 이벤트 내 텍스트 필드를 Docling을 통해 구조화된 문서 출력으로 변환한다.

# Kafka Connect 커넥터 설정
transforms=docling
transforms.docling.type=io.debezium.transforms.DoclingTransformation
transforms.docling.field.names=content,description
transforms.docling.output.format=markdown

실용적 활용 예시: 콘텐츠 DB(CMS, 문서 관리 시스템)에서 변경 이벤트가 발생하면 아래 경로로 즉시 흐른다.

MySQL
콘텐츠 DB
Debezium
MySQL 커넥터
Docling SMT
텍스트 → Markdown
Kafka
변환된 이벤트
임베딩 서비스
→ 벡터 DB
CDC → Docling SMT → 벡터 DB 파이프라인

텍스트 변경 시 임베딩 재계산이 자동으로 트리거되는 파이프라인을 Kafka Streams나 별도 컨슈머 없이 커넥터 레이어에서 구성할 수 있다.


변화 4: Amazon SNS 싱크

Debezium Server는 기존에 SQS, Kinesis를 AWS 메시지 타깃으로 지원했다. 3.6은 SNS(Simple Notification Service) 싱크를 추가했다.

주요 동작:

SNS 팬아웃 패턴(SNS → 여러 SQS 큐 구독)을 활용하면 하나의 CDC 스트림을 여러 다운스트림 소비자에게 동시에 전달하는 아키텍처가 단순해진다.


변화 5: MariaDB 신호 기반 binlog 위치 조정

MariaDB 커넥터가 신호(Signal)를 통한 binlog 위치 조정 기능을 지원한다. 신호 테이블에 레코드를 삽입하면 커넥터가 지정된 위치로 이동한다.

-- 특정 binlog 파일/오프셋으로 이동
INSERT INTO debezium_signals VALUES (
  'signal-001', 'reset-offset',
  '{"binlog_file": "mariadb-bin.000042", "binlog_pos": 4096}'
);

-- GTID 기반 위치 지정
INSERT INTO debezium_signals VALUES (
  'signal-002', 'reset-offset',
  '{"gtid": "0-1-12345"}'
);

이 기능이 필요한 상황:


추가 변화 요약

범주변화
Spanner 커넥터UUID 데이터 타입 기본 지원
Vitess 커넥터자동 컬럼 트런케이션 (최대 메시지 크기 초과 방지)
Debezium Platform파이프라인 모니터링 탭 (메트릭 API + 다중 패널 대시보드)
Debezium PlatformJDBC 싱크 파이프라인 생성 지원
Helm 차트컨덕터 컨테이너 추가 볼륨 마운트 지원 (커스텀 truststore 등)
Debezium ServerApache Fluss 싱크 어댑터 (인큐베이팅)
Kafka Connect 버전4.3.0 기반 빌드 및 테스트

운영 체크리스트


References