본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Debezium MongoDB 커넥터

원문 보기 위키 갱신

Debezium MongoDB 커넥터 (camel-debezium-mongodb)

Debezium MongoDB 컴포넌트는 Kafka나 Kafka Connect 없이도 Debezium Engine으로 MongoDB의 oplog를 읽어 Change Data Capture(CDC) 이벤트를 라우트로 흘려 보내는 컴포넌트예요. MongoDB 레플리카 셋이나 샤딩된 클러스터를 대상으로 동작하고, 컨슈머 전용이라서 from()으로 CDC 이벤트를 구독하는 방식으로 써요. 오프셋 저장, 스냅샷, 헬스 체크 같은 임베디드 엔진의 동작 방식도 그대로 노출해요.

출처: 문서

본문

Camel 3.0부터 지원

컨슈머만 지원해요

Debezium MongoDB 컴포넌트는 Debezium을 Debezium Engine으로 감싼 래퍼(wrapper)예요. Kafka나 Kafka Connect 없이도 Debezium으로 MongoDB 데이터베이스에서 Change Data Capture를 할 수 있게 해 줘요.

참고 Debezium MongoDB 커넥터는 MongoDB의 oplog를 사용해서 변경 사항을 캡처해요. 이 커넥터는 MongoDB 레플리카 셋(replica set)이나, 샤드 하나하나가 별도의 레플리카 셋인 샤딩된 클러스터에서만 동작해요. 그래서 MongoDB 인스턴스를 레플리카 셋 모드나 샤딩된 클러스터 모드로 띄워 두어야 해요.

참고 장애 처리 관련 참고: Debezium Embedded Engine 문서에 따르면, 엔진은 소스 오프셋을 적극적으로 기록하고 이 오프셋을 주기적으로 영구 저장소에 플러시해요. 그래서 애플리케이션을 재시작하거나 크래시가 나도 엔진은 마지막으로 기록된 오프셋부터 이어서 처리해요. 정상 동작 중이라면 다운스트림 라우트는 각 이벤트를 정확히 한 번씩 받아요. 하지만 애플리케이션이 크래시로 죽은 경우(우아한 종료 없이) 재시작 직후에 중복 이벤트를 받을 수 있어요. 따라서 다운스트림 라우트는 이런 상황을 충분히 견딜 수 있어야 하고, 필요하면 이벤트를 중복 제거해야 해요.

엔진이 폴링을 시작하기 전에는 컨슈머 헬스 체크가 설정된 초기 상태(기본값 DOWN)를 보고해요. 커넥터 태스크가 시작되고 엔진이 폴링 단계에 들어가면, 변경 이벤트가 아직 하나도 도착하지 않았더라도 UP을 보고해요. 이건 초기 스냅샷이 끝났다는 뜻이 아니에요.

임베디드 엔진이 에러로 멈추면(예: 커넥터가 데이터베이스에 도달할 수 없거나 오프셋 저장소를 읽을 수 없을 때) 재시작되지 않아요. 라우트는 시작 상태로 남아 있지만 더 이상 이벤트를 받지 못해요. 장애는 컨슈머 예외 핸들러로 보고되고 라우트 헬스 체크를 DOWN으로 바꿔서, readiness 프로브가 감지할 수 있게 해 줘요.

Maven 사용자라면 이 컴포넌트를 위해 pom.xml에 다음 의존성을 추가해야 해요.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-debezium-mongodb</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

URI 형식 (URI Format)

debezium-mongodb:name[?options]

옵션 설정 (Configuring Options)

Camel 컴포넌트는 서로 다른 두 단계로 설정해요:

  • component level

  • endpoint level

컴포넌트 옵션 설정 (Configuring Component Options)

컴포넌트 레벨에서는 엔드포인트들이 이어서 물려받는 일반적이고 공유되는 설정을 해요. 가장 상위의 설정 레벨이죠.

예를 들어 컴포넌트에는 보안 설정, 인증용 자격 증명, 네트워크 연결 URL 같은 것들이 있을 수 있어요.

컴포넌트에 따라 옵션이 몇 개뿐인 것도 있고 아주 많은 것도 있어요. 컴포넌트는 보통 널리 쓰이는 기본값이 미리 설정되어 있어서, 몇 가지 옵션만 설정하거나 아예 하나도 건드리지 않아도 되는 경우가 많아요.

컴포넌트는 다음 방법으로 설정할 수 있어요:

  • the Component DSL.

  • in a configuration file (application.properties, *.yaml files, etc).

  • directly in the Java code.

엔드포인트 옵션 설정 (Configuring Endpoint Options)

엔드포인트는 옵션이 많아서 설정에 시간을 더 쓰게 될 거예요. 이 옵션들이 엔드포인트가 원하는 일을 하도록 커스터마이즈해 줘요. 옵션은 엔드포인트가 컨슈머(from)로 쓰이는지, 프로듀서(to)로 쓰이는지, 둘 다인지에 따라 분류되기도 해요.

엔드포인트 설정은 대부분 엔드포인트 URI에 _path_와 query 파라미터로 바로 하는 경우가 많아요. Endpoint DSL과 DataFormat DSL을 쓰면 자바에서 엔드포인트와 데이터 포맷을 _타입 세이프_하게 설정할 수도 있어요.

옵션을 설정할 때 좋은 습관은 Property Placeholders를 사용하는 거예요.

프로퍼티 플레이스홀더는 이런 장점이 있어요:

  • They help prevent using hardcoded urls, port numbers, sensitive information, and other settings.

  • They allow externalizing the configuration from the code.

  • They help the code to become more flexible and reusable.

다음 두 섹션에서 모든 옵션을 나열해요. 먼저 컴포넌트 옵션, 그다음 엔드포인트 옵션 순서예요.

컴포넌트 옵션 (Component Options)

Debezium MongoDB Connector 컴포넌트는 아래 나열된 옵션들을 지원해요.

Name Description Default Type
additionalProperties (common) camel 설정에 바로 넣을 수 없는 debezium 컴포넌트용 추가 프로퍼티예요(예: Debezium 엔진에 필요한 Kafka Connect 프로퍼티 설정, KafkaOffsetBackingStore 설정 같은 것). 프로퍼티에는 additionalProperties. 접두어를 붙여야 해요. 예: additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=http://localhost:8811/avro. additionalProperties. 접두어를 사용하는 멀티 밸류 옵션이에요. Map
bridgeErrorHandler (consumer) 컨슈머를 Camel 라우팅 에러 핸들러(Error Handler)에 브리지할 수 있게 해 줘요. 즉, Camel 컨슈머가 들어오는 메시지를 집어 올리는 동안 등에서 예외가 발생하면(가능한 경우), 그 예외를 메시지로 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 이것은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있도록 허용하는 경우에만 가능해요. 일부 컴포넌트는 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본으로 컨슈머는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. false boolean
configuration (consumer) 미리 구성된 설정(Configuration)을 지정할 수 있게 해 줘요. MongoDbConnectorEmbeddedDebeziumConfiguration
internalKeyConverter (consumer) 오프셋의 키 데이터를 직렬화하고 역직렬화할 때 사용할 Converter 클래스예요. 기본값은 JSON 컨버터예요. org.apache.kafka.connect.json.JsonConverter String
internalValueConverter (consumer) 오프셋의 값 데이터를 직렬화하고 역직렬화할 때 사용할 Converter 클래스예요. 기본값은 JSON 컨버터예요. org.apache.kafka.connect.json.JsonConverter String
offsetCommitPolicy (consumer) 커밋 정책의 Java 클래스 이름이에요. 처리한 이벤트 수와 마지막 커밋 이후 경과 시간을 기준으로 오프셋 커밋을 언제 트리거할지 정의해요. 이 클래스는 'OffsetCommitPolicy' 인터페이스를 구현해야 하고, 기본값은 시간 간격 기반의 주기적 커밋 정책이에요. String
offsetCommitTimeoutMs (consumer) 레코드를 플러시하고 파티션 오프셋 데이터를 오프셋 저장소에 커밋할 때까지 기다리는 최대 시간(밀리초)이에요. 이 시간을 넘기면 처리를 취소하고, 오프셋 데이터는 나중에 다시 커밋 시도로 돌려 놓아요. 기본값은 5초예요. 5000 long
offsetFlushIntervalMs (consumer) 오프셋 커밋을 시도하는 간격이에요. 기본값은 1분이에요. 60000 long
offsetStorage (consumer) 커넥터 오프셋의 영속화를 담당하는 Java 클래스 이름이에요. org.apache.kafka.connect.storage.FileOffsetBackingStore String
offsetStorageFileName (consumer) 오프셋을 저장할 파일 경로예요. offset.storage가 FileOffsetBackingStore로 설정되어 있으면 필수예요. String
offsetStoragePartitions (consumer) 오프셋 저장소 토픽을 만들 때 사용할 파티션 수예요. offset.storage가 'KafkaOffsetBackingStore'로 설정되어 있으면 필수예요. int
offsetStorageReplicationFactor (consumer) 오프셋 저장소 토픽을 만들 때 사용할 복제 계수예요. offset.storage가 KafkaOffsetBackingStore로 설정되어 있으면 필수예요. int
offsetStorageTopic (consumer) 오프셋을 저장할 Kafka 토픽의 이름이에요. offset.storage가 KafkaOffsetBackingStore로 설정되어 있으면 필수예요. String
autowiredEnabled (advanced) 오토와이어링(autowiring)을 활성화할지 여부예요. 레지스트리에서 일치하는 타입의 인스턴스가 딱 하나 있는지 찾아서, 그 인스턴스로 오토와이어링 옵션(옵션이 autowired로 표시되어 있어야 함)을 자동 설정하는 데 쓰여요. JDBC 데이터 소스, JMS 커넥션 팩토리, AWS 클라이언트 등을 자동 설정할 때 사용할 수 있어요. true boolean
captureMode (mongodb) MongoDB 서버에서 변경 사항을 캡처하는 방식이에요. 'change_streams'는 MongoDB Change Streams로 변경을 캡처하고, update 이벤트에 전체 문서가 담기지 않아요. 'change_streams_update_full'(기본값)는 MongoDB Change Streams로 변경을 캡처하고, update 이벤트에 전체 문서가 담겨요. change_streams_update_full String
collectionExcludeList (mongodb) 변경을 제외할 컬렉션 이름과 일치하는 정규 표현식 또는 리터럴의 콤마 구분 목록이에요. String
collectionIncludeList (mongodb) 변경을 캡처할 컬렉션 이름과 일치하는 정규 표현식 또는 리터럴의 콤마 구분 목록이에요. String
connectionValidationTimeoutMs (mongodb) 연결 검증이 끝나기를 기다리는 최대 시간(밀리초)이에요. 기본값은 60초예요. 1m long
converters (mongodb) 기본 컨버터 대신 사용할 커스텀 컨버터의 선택 목록이에요. 컨버터는 '.type' 설정 옵션으로 정의하고 '.' 옵션들로 구성해요. String
cursorMaxAwaitTimeMs (mongodb) oplog 커서가 폴 요청 하나를 처리하기를 기다리는 최대 처리 시간(밀리초)이에요. int
customMetricTags (mongodb) 커스텀 메트릭 태그는 키-값 쌍을 받아서 MBean 객체 이름을 커스터마이즈해요. 이 이름은 일반 이름 끝에 덧붙여지고, 각 키는 MBean 객체 이름의 태그가 되며, 그에 대응하는 값이 그 키의 태그 값이 돼요. 예: k1=v1,k2=v2. String
customSanitizePattern (mongodb) 값을 마스킹할 설정 키를 식별하는 정규 표현식이에요. 설정하면 이 커스텀 패턴이 Debezium의 기본 비밀번호 마스킹 패턴을 대체해요. .*secret$ .*password$
databaseExcludeList (mongodb) 변경을 제외할 데이터베이스 이름과 일치하는 정규 표현식 또는 리터럴의 콤마 구분 목록이에요. String
databaseIncludeList (mongodb) 변경을 캡처할 데이터베이스 이름과 일치하는 정규 표현식 또는 리터럴의 콤마 구분 목록이에요. String
errorsMaxRetries (mongodb) 실패하기 전에 연결 오류를 재시도하는 최대 횟수예요(-1 = 무제한, 0 = 비활성화, 그 외 = 재시도 횟수). -1 int
eventProcessingFailureHandlingMode (mongodb) 이벤트 처리 중 실패(예: 깨진 이벤트를 만났을 때)를 어떻게 다룰지 지정해요. 'fail'(기본값)은 문제가 된 이벤트와 그 위치를 알리는 예외를 던져서 커넥터를 멈춰요. 'warn'은 문제가 된 이벤트와 그 위치를 로그로 남기고 이벤트를 건너뛰어요. 'ignore'는 문제가 된 이벤트를 그냥 건너뛰어요. fail String
executorShutdownTimeoutMs (mongodb) 태스크 익스큐터가 종료되기를 기다리는 최대 시간(밀리초)이에요. 4s long
extendedHeadersEnabled (mongodb) 다운스트림 처리 시스템에서 CDC 이벤트의 출처를 추적하고 식별하는 데 꼭 필요한 메타데이터를 담은 Debezium 컨텍스트 헤더를 켜거나 끄는 옵션이에요. true boolean
fieldExcludeList (mongodb) 변경 이벤트 메시지 값에서 제외할 필드의 완전한 이름(fully-qualified name) 콤마 구분 목록이에요. String
fieldRenames (mongodb) 변경 이벤트 메시지 값에서 필드 이름을 바꿀 때 사용할 완전한 이름(fully-qualified) 대체 이름의 콤마 구분 목록이에요. 필드의 완전한 대체 이름은 databaseName.collectionName.fieldName.nestedFieldName:newNestedFieldName 형식이고, databaseName과 collectionName에는 아무 문자나 일치하는 와일드카드 ()를 쓸 수 있으며, 콜론(:)으로 필드의 이름 변경 매핑을 정해요. String
guardrailCollectionsLimitAction (mongodb) guardrail 컬렉션 한도를 초과했을 때 취할 동작을 지정해요. 'warn'(기본값)은 경고 메시지를 로그로 남기고 처리를 계속해요. 'fail'은 에러로 커넥터를 멈춰요. warn String
guardrailCollectionsMax (mongodb) 커넥터가 캡처할 수 있는 컬렉션이나 테이블의 최대 개수예요. 이 한도를 초과하면 'guardrail.collections.limit.action'으로 지정한 동작을 해요. 이 guardrail을 끄려면 0으로 설정하세요. 0 int
heartbeatIntervalMs (mongodb) 커넥터가 하트비트 토픽으로 하트비트 메시지를 주기적으로 보내는 간격(밀리초)이에요. 하트비트 메시지를 끄려면 0을 사용하세요. 기본값은 비활성화예요. 0ms int
heartbeatTopicsPrefix (mongodb) 하트비트 토픽 이름에 사용하는 접두어예요. 기본값은 __debezium-heartbeat이에요. __debezium-heartbeat String
incrementalSnapshotWatermarkingStrategy (mongodb) 증분 스냅샷 동안 워터마킹에 사용할 전략을 지정해요. 'insert_insert'는 open과 close 시그널을 모두 signal data collection에 기록해요(기본값). 'insert_delete'는 open 시그널만 signal data collection에 기록하고, close는 해당 open 시그널을 삭제해요. INSERT_INSERT String
legacySnapshotMaxThreads (mongodb) 활성화하면 예전 방식의 테이블당 스레드(table-per-thread) 병렬 스냅샷 알고리즘을 사용해요. false(기본값)로 두면 테이블을 청크로 나눠서 모든 스냅샷 스레드에 걸쳐 처리하기 때문에 스냅샷 동시성이 더 높아져요. false boolean
maxBatchSize (mongodb) 소스 레코드 배치 하나의 최대 크기예요. 기본값은 2048이에요. 2048 int
maxQueueSize (mongodb) 데이터베이스 로그에서 읽었지만 아직 기록되거나 전달되지 않은 변경 이벤트의 큐 최대 크기예요. 기본값은 8192이고, 항상 최대 배치 크기보다 커야 해요. 8192 int
maxQueueSizeInBytes (mongodb) 데이터베이스 로그에서 읽었지만 아직 기록되거나 전달되지 않은 변경 이벤트의 큐 최대 크기(바이트)예요. 기본값은 0이고, 기능이 꺼져 있다는 뜻이에요. 0 long
mongodbAuthsource (mongodb) 사용자 자격 증명이 들어 있는 데이터베이스예요. admin String
mongodbConnectionString (mongodb) 데이터베이스 연결 문자열이에요. String
mongodbConnectTimeoutMs (mongodb) 연결 타임아웃(밀리초)이에요. 기본값은 10초(10,000 ms)예요. 10s int
mongodbHeartbeatFrequencyMs (mongodb) 클러스터 모니터가 각 서버에 도달하려고 시도하는 주기예요. 기본값은 10초(10,000 ms)예요. 10s int
mongodbPassword (mongodb) 필수 MongoDB에 연결할 때 사용할 비밀번호예요(필요한 경우). String
mongodbPollIntervalMs (mongodb) 새로 생기거나 사라지거나 바뀐 레플리카 셋을 찾는 주기(밀리초)예요. 기본값은 30초(30,000 ms)예요. 30s long
mongodbServerSelectionTimeoutMs (mongodb) 서버 선택 타임아웃(밀리초)이에요. 기본값은 10초(10,000 ms)예요. 30s int
mongodbSocketTimeoutMs (mongodb) 소켓 타임아웃(밀리초)이에요. 기본값은 0 ms예요. 0ms int
mongodbSslEnabled (mongodb) 커넥터가 MongoDB 인스턴스에 연결할 때 SSL을 사용할지 여부예요. false boolean
mongodbSslInvalidHostnameAllowed (mongodb) SSL 사용 시 잘못된 호스트 이름을 허용할지 여부예요. true면 연결이 중간자(man-in-the-middle) 공격을 막지 못해요. false boolean
mongodbUser (mongodb) MongoDB에 연결할 때 사용할 데이터베이스 사용자예요(필요한 경우). String
notificationEnabledChannels (mongodb) 활성화된 알림 채널 이름 목록이에요. String
notificationSinkTopicName (mongodb) 알림용 토픽의 이름이에요. 활성화된 채널 목록에 'sink'가 있으면 필수예요. String
openlineageIntegrationConfigFilePath (mongodb) OpenLineage 파일 설정의 경로예요. 자세한 내용은 https://openlineage.io/docs/client/java/configuration을 참고하세요. ./openlineage.yml String
openlineageIntegrationDatasetKafkaBootstrapServers (mongodb) 입력/출력 네임스페이스로 사용할 Kafka 부트스트랩 서버 주소예요. String
openlineageIntegrationEnabled (mongodb) Debezium이 OpenLineage API로 데이터 리니지 메타데이터를 내보내도록 활성화해요. false boolean
openlineageIntegrationJobDescription (mongodb) Debezium이 내보내는 잡의 설명이에요. Debezium change data capture job String
openlineageIntegrationJobNamespace (mongodb) Debezium이 내보내는 잡의 네임스페이스예요. String
openlineageIntegrationJobOwners (mongodb) Debezium이 내보내는 잡의 소유자들이에요. 키-값 쌍의 콤마 구분 목록이에요. 예: k1=v1,k2=v2. String
openlineageIntegrationJobTags (mongodb) Debezium이 내보내는 잡의 태그들이에요. 키-값 쌍의 콤마 구분 목록이에요. 예: k1=v1,k2=v2. String
pollIntervalMs (mongodb) 이벤트가 없는 상태로 받은 뒤 새 변경 이벤트가 나타나기를 기다리는 시간(밀리초)이에요. 기본값은 500 ms예요. 500ms long
postProcessors (mongodb) 포스트 프로세서의 선택 목록이에요. 프로세서는 '.type' 설정 옵션으로 정의하고 '' 옵션들로 구성해요. String
provideTransactionMetadata (mongodb) 이벤트 카운팅과 함께 트랜잭션 메타데이터 추출을 활성화해요. false boolean
queryFetchSize (mongodb) 스트리밍 중에 메모리에 로드할 레코드의 최대 개수예요. '0'이면 기본 JDBC fetch size를 사용해요. 0 int
retriableRestartConnectorWaitMs (mongodb) 재시도 가능한 예외가 발생한 뒤 커넥터를 다시 시작하기 전에 기다리는 시간이에요. 기본값은 10000ms예요. 10s long
schemaHistoryInternalFileFilename (mongodb) 데이터베이스 스키마 히스토리를 기록하는 데 사용할 파일의 경로예요. String
schemaNameAdjustmentMode (mongodb) 커넥터가 사용하는 메시지 컨버터와의 호환성을 위해 스키마 이름을 어떻게 조정할지 지정해요. 'avro'는 Avro 타입 이름에 쓸 수 없는 문자를 언더스코어로 바꿔요. 'avro_unicode'는 Avro 타입 이름에 쓸 수 없는 언더스코어나 문자를 _uxxxx 같은 유니코드로 바꿔요. 참고: _는 자바의 백슬래시 같은 이스케이프 시퀀스예요. 'none'은 아무 조정도 하지 않아요(기본값). none String
signalDataCollection (mongodb) Debezium에 시그널/커맨드를 보내는 데 사용하는 데이터 컬렉션의 이름이에요. 멀티 파티션 모드 커넥터에서는 signal data collection을 콤마 구분 목록으로 여러 개 지정할 수 있어요. 설정하지 않으면 시그널링이 꺼져요. String
signalEnabledChannels (mongodb) 활성화된 채널 이름 목록이에요. source 채널이 기본으로 활성화되어 있어요. source String
signalPollIntervalMs (mongodb) 등록된 채널에서 새 시그널을 찾는 주기(밀리초)예요. 기본값은 5초예요. 5s long
skippedOperations (mongodb) 스트리밍 중에 건너뛸 연산의 콤마 구분 목록이에요. 'c'는 insert/create, 'u'는 update, 'd'는 delete, 't'는 truncate, 'none'은 아무것도 건너뛰지 않음을 뜻해요. 기본으로는 truncate 연산만 건너뛰어요. t String
snapshotCollectionFilterOverrides (mongodb) 이 프로퍼티는 콤마 구분 목록을 담고 있고, 여기에 해당하는 항목의 초기 스냅샷은 데이터 소스에 있는 데이터의 부분집합이 될 수 있어요. 부분집합은 snapshot.collection.filter.override. 프로퍼티 값으로 지정한 mongodb 필터 쿼리로 정의돼요. String
snapshotDelayMs (mongodb) 스냅샷이 시작되기 전의 지연 시간(밀리초)이에요. 기본값은 0 ms예요. 0ms long
snapshotFetchSize (mongodb) 스냅샷을 수행하는 동안 메모리에 로드할 레코드의 최대 개수예요. int
snapshotIncludeCollectionList (mongodb) 커넥터를 만들거나 재시작할 때 스냅샷을 꼭 찍어야 하는 테이블/컬렉션 목록을 지정하려면 이 설정을 반드시 지정해야 해요. String
snapshotMaxThreads (mongodb) 스냅샷을 수행하는 데 사용할 스레드의 최대 개수예요. 기본값은 1이에요. 1 int
snapshotMaxThreadsMultiplier (mongodb) 테이블당 스냅샷 청크 수를 조절하는 데 사용하는 계수예요. 기본 동작은 'row_count/snapshot.max.threads'로 청크당 행 수를 계산해요. 큰 테이블에는 이상적이지 않을 수 있는데, multiplier를 사용하면 'row_count/(snapshot.max.threads snapshot.max.threads.multiplier)' 공식으로 청크 수를 늘리도록 조정돼요. 1 int
snapshotMode (mongodb) 커넥터 시작 시 스냅샷을 실행할 기준이에요. 다음 스냅샷 옵션 중 하나를 선택하세요. 'initial'(기본값): logical server name에 대한 오프셋을 찾지 못하면 설정된 테이블의 현재 전체 상태를 캡처하는 스냅샷을 실행해요. 스냅샷이 끝나면 커넥터는 oplog에서 변경 스트리밍을 시작해요. 'never': 커넥터는 스냅샷을 실행하지 않아요. 처음 시작하자마자 oplog의 시작부터 읽기 시작해요. initial String
snapshotModeConfigurationBasedSnapshotData (mongodb) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 데이터를 스냅샷할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeConfigurationBasedSnapshotOnDataError (mongodb) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 에러가 났을 경우 데이터를 스냅샷할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeConfigurationBasedSnapshotOnSchemaError (mongodb) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 에러가 났을 경우 스키마를 스냅샷할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeConfigurationBasedSnapshotSchema (mongodb) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 스키마를 스냅샷할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeConfigurationBasedStartStream (mongodb) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 스냅샷 이후 스트림을 시작할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeCustomName (mongodb) 'snapshot.mode'가 custom으로 설정되어 있을 때, 'name()' 메서드가 제공하는 커스텀 구현의 이름을 지정하려면 이 설정을 반드시 지정해야 해요. 구현체는 'Snapshotter' 인터페이스를 구현해야 하고, 앱이 부팅될 때마다 호출되어 스냅샷을 할지 판단해요. String
sourceinfoStructMaker (mongodb) SourceInfo 스키마와 struct를 반환하는 SourceInfoStructMaker 클래스의 이름이에요. io.debezium.connector.mongodb.MongoDbSourceInfoStructMaker String
statisticsMetricsEnabled (mongodb) 레코드 처리 지연 시간 같은 여러 종류의 통계와, quantile 같은 파생 데이터 수집을 활성화해요. 기본으로 통계 수집은 켜져 있어요. true boolean
streamingDelayMs (mongodb) 스냅샷이 끝나고 스트리밍이 시작되기 전의 지연 시간(밀리초)이에요. 기본값은 0 ms예요. 0ms long
tombstonesOnDelete (mongodb) delete 연산을 delete 이벤트와 그 뒤의 톰브스톤 이벤트로 나타낼지(true), delete 이벤트만으로 나타낼지(false) 여부예요. 톰브스톤 이벤트를 내보내면(기본 동작) 소스 레코드가 삭제되었을 때 Kafka가 해당 키와 관련된 모든 이벤트를 완전히 삭제할 수 있어요. false boolean
topicNamingStrategy (mongodb) 데이터 변경, 스키마 변경, 트랜잭션, 하트비트 이벤트 등의 토픽 이름을 정하는 데 사용할 TopicNamingStrategy 클래스의 이름이에요. io.debezium.schema.SchemaTopicNamingStrategy String
topicPrefix (mongodb) 필수 변경을 캡처하는 특정 데이터베이스 서버/클러스터를 식별하고 네임스페이스를 제공하는 토픽 접두어예요. 이 커넥터가 내보내는 이벤트를 받는 모든 Kafka 토픽 이름의 접두어로 쓰이기 때문에, 토픽 접두어는 다른 모든 커넥터와 겹치지 않게 유일해야 해요. 영숫자, 하이픈, 점, 언더스코어만 받아들여야 해요. String
transactionMetadataFactory (mongodb) 트랜잭션 컨텍스트와 트랜잭션 struct/스키마를 만드는 클래스예요. io.debezium.pipeline.txmetadata.DefaultTransactionMetadataFactory String

엔드포인트 옵션 (Endpoint Options)

Debezium MongoDB Connector 엔드포인트는 다음 URI 문법으로 설정해요:

debezium-mongodb:name

다음 path 및 query 파라미터를 사용해요:

경로 파라미터 (Path Parameters)

Name Description Default Type
name (consumer) 필수 커넥터의 유일한 이름이에요. 같은 이름으로 다시 등록하려고 하면 실패해요. String

쿼리 파라미터 (Query Parameters)

Name Description Default Type
additionalProperties (common) camel 설정에 바로 넣을 수 없는 debezium 컴포넌트용 추가 프로퍼티예요(예: Debezium 엔진에 필요한 Kafka Connect 프로퍼티 설정, KafkaOffsetBackingStore 설정 같은 것). 프로퍼티에는 additionalProperties. 접두어를 붙여야 해요. 예: additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=http://localhost:8811/avro. additionalProperties. 접두어를 사용하는 멀티 밸류 옵션이에요. Map
internalKeyConverter (consumer) 오프셋의 키 데이터를 직렬화하고 역직렬화할 때 사용할 Converter 클래스예요. 기본값은 JSON 컨버터예요. org.apache.kafka.connect.json.JsonConverter String
internalValueConverter (consumer) 오프셋의 값 데이터를 직렬화하고 역직렬화할 때 사용할 Converter 클래스예요. 기본값은 JSON 컨버터예요. org.apache.kafka.connect.json.JsonConverter String
offsetCommitPolicy (consumer) 커밋 정책의 Java 클래스 이름이에요. 처리한 이벤트 수와 마지막 커밋 이후 경과 시간을 기준으로 오프셋 커밋을 언제 트리거할지 정의해요. 이 클래스는 'OffsetCommitPolicy' 인터페이스를 구현해야 하고, 기본값은 시간 간격 기반의 주기적 커밋 정책이에요. String
offsetCommitTimeoutMs (consumer) 레코드를 플러시하고 파티션 오프셋 데이터를 오프셋 저장소에 커밋할 때까지 기다리는 최대 시간(밀리초)이에요. 이 시간을 넘기면 처리를 취소하고, 오프셋 데이터는 나중에 다시 커밋 시도로 돌려 놓아요. 기본값은 5초예요. 5000 long
offsetFlushIntervalMs (consumer) 오프셋 커밋을 시도하는 간격이에요. 기본값은 1분이에요. 60000 long
offsetStorage (consumer) 커넥터 오프셋의 영속화를 담당하는 Java 클래스 이름이에요. org.apache.kafka.connect.storage.FileOffsetBackingStore String
offsetStorageFileName (consumer) 오프셋을 저장할 파일 경로예요. offset.storage가 FileOffsetBackingStore로 설정되어 있으면 필수예요. String
offsetStoragePartitions (consumer) 오프셋 저장소 토픽을 만들 때 사용할 파티션 수예요. offset.storage가 'KafkaOffsetBackingStore'로 설정되어 있으면 필수예요. int
offsetStorageReplicationFactor (consumer) 오프셋 저장소 토픽을 만들 때 사용할 복제 계수예요. offset.storage가 KafkaOffsetBackingStore로 설정되어 있으면 필수예요. int
offsetStorageTopic (consumer) 오프셋을 저장할 Kafka 토픽의 이름이에요. offset.storage가 KafkaOffsetBackingStore로 설정되어 있으면 필수예요. String
bridgeErrorHandler (consumer (advanced)) 컨슈머를 Camel 라우팅 에러 핸들러(Error Handler)에 브리지할 수 있게 해 줘요. 즉, Camel 컨슈머가 들어오는 메시지를 집어 올리는 동안 등에서 예외가 발생하면(가능한 경우), 그 예외를 메시지로 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 이것은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있도록 허용하는 경우에만 가능해요. 일부 컴포넌트는 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본으로 컨슈머는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. false boolean
exceptionHandler (consumer (advanced)) 컨슈머가 커스텀 ExceptionHandler를 쓰게 할 수 있어요. bridgeErrorHandler 옵션이 활성화되어 있으면 이 옵션은 사용되지 않는다는 점에 주의하세요. 기본으로 컨슈머는 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. ExceptionHandler
exchangePattern (consumer (advanced))
컨슈머가 교환(exchange)을 만들 때 교환 패턴을 설정해요.

Enum values:

  • InOnly

  • InOut

| | ExchangePattern | | captureMode (mongodb) | MongoDB 서버에서 변경 사항을 캡처하는 방식이에요. 'change_streams'는 MongoDB Change Streams로 변경을 캡처하고, update 이벤트에 전체 문서가 담기지 않아요. 'change_streams_update_full'(기본값)는 MongoDB Change Streams로 변경을 캡처하고, update 이벤트에 전체 문서가 담겨요. | change_streams_update_full | String | | collectionExcludeList (mongodb) | 변경을 제외할 컬렉션 이름과 일치하는 정규 표현식 또는 리터럴의 콤마 구분 목록이에요. | | String | | collectionIncludeList (mongodb) | 변경을 캡처할 컬렉션 이름과 일치하는 정규 표현식 또는 리터럴의 콤마 구분 목록이에요. | | String | | connectionValidationTimeoutMs (mongodb) | 연결 검증이 끝나기를 기다리는 최대 시간(밀리초)이에요. 기본값은 60초예요. | 1m | long | | converters (mongodb) | 기본 컨버터 대신 사용할 커스텀 컨버터의 선택 목록이에요. 컨버터는 '.type' 설정 옵션으로 정의하고 '.' 옵션들로 구성해요. | | String | | cursorMaxAwaitTimeMs (mongodb) | oplog 커서가 폴 요청 하나를 처리하기를 기다리는 최대 처리 시간(밀리초)이에요. | | int | | customMetricTags (mongodb) | 커스텀 메트릭 태그는 키-값 쌍을 받아서 MBean 객체 이름을 커스터마이즈해요. 이 이름은 일반 이름 끝에 덧붙여지고, 각 키는 MBean 객체 이름의 태그가 되며, 그에 대응하는 값이 그 키의 태그 값이 돼요. 예: k1=v1,k2=v2. | | String | | customSanitizePattern (mongodb) | 값을 마스킹할 설정 키를 식별하는 정규 표현식이에요. 설정하면 이 커스텀 패턴이 Debezium의 기본 비밀번호 마스킹 패턴을 대체해요. | .*secret$|.*password$|.*sasl\.jaas\.config$|.*basic\.auth\.user\.info|.*registry\.auth\.client-secret|.*credentials\.json$|.*connectionstring$|.*connection\.string$ | String | | databaseExcludeList (mongodb) | 변경을 제외할 데이터베이스 이름과 일치하는 정규 표현식 또는 리터럴의 콤마 구분 목록이에요. | | String | | databaseIncludeList (mongodb) | 변경을 캡처할 데이터베이스 이름과 일치하는 정규 표현식 또는 리터럴의 콤마 구분 목록이에요. | | String | | errorsMaxRetries (mongodb) | 실패하기 전에 연결 오류를 재시도하는 최대 횟수예요(-1 = 무제한, 0 = 비활성화, 그 외 = 재시도 횟수). | -1 | int | | eventProcessingFailureHandlingMode (mongodb) | 이벤트 처리 중 실패(예: 깨진 이벤트를 만났을 때)를 어떻게 다룰지 지정해요. 'fail'(기본값)은 문제가 된 이벤트와 그 위치를 알리는 예외를 던져서 커넥터를 멈춰요. 'warn'은 문제가 된 이벤트와 그 위치를 로그로 남기고 이벤트를 건너뛰어요. 'ignore'는 문제가 된 이벤트를 그냥 건너뛰어요. | fail | String | | executorShutdownTimeoutMs (mongodb) | 태스크 익스큐터가 종료되기를 기다리는 최대 시간(밀리초)이에요. | 4s | long | | extendedHeadersEnabled (mongodb) | 다운스트림 처리 시스템에서 CDC 이벤트의 출처를 추적하고 식별하는 데 꼭 필요한 메타데이터를 담은 Debezium 컨텍스트 헤더를 켜거나 끄는 옵션이에요. | true | boolean | | fieldExcludeList (mongodb) | 변경 이벤트 메시지 값에서 제외할 필드의 완전한 이름(fully-qualified name) 콤마 구분 목록이에요. | | String | | fieldRenames (mongodb) | 변경 이벤트 메시지 값에서 필드 이름을 바꿀 때 사용할 완전한 이름(fully-qualified) 대체 이름의 콤마 구분 목록이에요. 필드의 완전한 대체 이름은 databaseName.collectionName.fieldName.nestedFieldName:newNestedFieldName 형식이고, databaseName과 collectionName에는 아무 문자나 일치하는 와일드카드 ()를 쓸 수 있으며, 콜론(:)으로 필드의 이름 변경 매핑을 정해요. | | String | | guardrailCollectionsLimitAction (mongodb) | guardrail 컬렉션 한도를 초과했을 때 취할 동작을 지정해요. 'warn'(기본값)은 경고 메시지를 로그로 남기고 처리를 계속해요. 'fail'은 에러로 커넥터를 멈춰요. | warn | String | | guardrailCollectionsMax (mongodb) | 커넥터가 캡처할 수 있는 컬렉션이나 테이블의 최대 개수예요. 이 한도를 초과하면 'guardrail.collections.limit.action'으로 지정한 동작을 해요. 이 guardrail을 끄려면 0으로 설정하세요. | 0 | int | | heartbeatIntervalMs (mongodb) | 커넥터가 하트비트 토픽으로 하트비트 메시지를 주기적으로 보내는 간격(밀리초)이에요. 하트비트 메시지를 끄려면 0을 사용하세요. 기본값은 비활성화예요. | 0ms | int | | heartbeatTopicsPrefix (mongodb) | 하트비트 토픽 이름에 사용하는 접두어예요. 기본값은 __debezium-heartbeat이에요. | __debezium-heartbeat | String | | incrementalSnapshotWatermarkingStrategy (mongodb) | 증분 스냅샷 동안 워터마킹에 사용할 전략을 지정해요. 'insert_insert'는 open과 close 시그널을 모두 signal data collection에 기록해요(기본값). 'insert_delete'는 open 시그널만 signal data collection에 기록하고, close는 해당 open 시그널을 삭제해요. | INSERT_INSERT | String | | legacySnapshotMaxThreads (mongodb) | 활성화하면 예전 방식의 테이블당 스레드(table-per-thread) 병렬 스냅샷 알고리즘을 사용해요. false(기본값)로 두면 테이블을 청크로 나눠서 모든 스냅샷 스레드에 걸쳐 처리하기 때문에 스냅샷 동시성이 더 높아져요. | false | boolean | | maxBatchSize (mongodb) | 소스 레코드 배치 하나의 최대 크기예요. 기본값은 2048이에요. | 2048 | int | | maxQueueSize (mongodb) | 데이터베이스 로그에서 읽었지만 아직 기록되거나 전달되지 않은 변경 이벤트의 큐 최대 크기예요. 기본값은 8192이고, 항상 최대 배치 크기보다 커야 해요. | 8192 | int | | maxQueueSizeInBytes (mongodb) | 데이터베이스 로그에서 읽었지만 아직 기록되거나 전달되지 않은 변경 이벤트의 큐 최대 크기(바이트)예요. 기본값은 0이고, 기능이 꺼져 있다는 뜻이에요. | 0 | long | | mongodbAuthsource (mongodb) | 사용자 자격 증명이 들어 있는 데이터베이스예요. | admin | String | | mongodbConnectionString (mongodb) | 데이터베이스 연결 문자열이에요. | | String | | mongodbConnectTimeoutMs (mongodb) | 연결 타임아웃(밀리초)이에요. 기본값은 10초(10,000 ms)예요. | 10s | int | | mongodbHeartbeatFrequencyMs (mongodb) | 클러스터 모니터가 각 서버에 도달하려고 시도하는 주기예요. 기본값은 10초(10,000 ms)예요. | 10s | int | | mongodbPassword (mongodb) | 필수 MongoDB에 연결할 때 사용할 비밀번호예요(필요한 경우). | | String | | mongodbPollIntervalMs (mongodb) | 새로 생기거나 사라지거나 바뀐 레플리카 셋을 찾는 주기(밀리초)예요. 기본값은 30초(30,000 ms)예요. | 30s | long | | mongodbServerSelectionTimeoutMs (mongodb) | 서버 선택 타임아웃(밀리초)이에요. 기본값은 10초(10,000 ms)예요. | 30s | int | | mongodbSocketTimeoutMs (mongodb) | 소켓 타임아웃(밀리초)이에요. 기본값은 0 ms예요. | 0ms | int | | mongodbSslEnabled (mongodb) | 커넥터가 MongoDB 인스턴스에 연결할 때 SSL을 사용할지 여부예요. | false | boolean | | mongodbSslInvalidHostnameAllowed (mongodb) | SSL 사용 시 잘못된 호스트 이름을 허용할지 여부예요. true면 연결이 중간자(man-in-the-middle) 공격을 막지 못해요. | false | boolean | | mongodbUser (mongodb) | MongoDB에 연결할 때 사용할 데이터베이스 사용자예요(필요한 경우). | | String | | notificationEnabledChannels (mongodb) | 활성화된 알림 채널 이름 목록이에요. | | String | | notificationSinkTopicName (mongodb) | 알림용 토픽의 이름이에요. 활성화된 채널 목록에 'sink'가 있으면 필수예요. | | String | | openlineageIntegrationConfigFilePath (mongodb) | OpenLineage 파일 설정의 경로예요. 자세한 내용은 https://openlineage.io/docs/client/java/configuration을 참고하세요. | ./openlineage.yml | String | | openlineageIntegrationDatasetKafkaBootstrapServers (mongodb) | 입력/출력 네임스페이스로 사용할 Kafka 부트스트랩 서버 주소예요. | | String | | openlineageIntegrationEnabled (mongodb) | Debezium이 OpenLineage API로 데이터 리니지 메타데이터를 내보내도록 활성화해요. | false | boolean | | openlineageIntegrationJobDescription (mongodb) | Debezium이 내보내는 잡의 설명이에요. | Debezium change data capture job | String | | openlineageIntegrationJobNamespace (mongodb) | Debezium이 내보내는 잡의 네임스페이스예요. | | String | | openlineageIntegrationJobOwners (mongodb) | Debezium이 내보내는 잡의 소유자들이에요. 키-값 쌍의 콤마 구분 목록이에요. 예: k1=v1,k2=v2. | | String | | openlineageIntegrationJobTags (mongodb) | Debezium이 내보내는 잡의 태그들이에요. 키-값 쌍의 콤마 구분 목록이에요. 예: k1=v1,k2=v2. | | String | | pollIntervalMs (mongodb) | 이벤트가 없는 상태로 받은 뒤 새 변경 이벤트가 나타나기를 기다리는 시간(밀리초)이에요. 기본값은 500 ms예요. | 500ms | long | | postProcessors (mongodb) | 포스트 프로세서의 선택 목록이에요. 프로세서는 '.type' 설정 옵션으로 정의하고 '' 옵션들로 구성해요. | | String | | provideTransactionMetadata (mongodb) | 이벤트 카운팅과 함께 트랜잭션 메타데이터 추출을 활성화해요. | false | boolean | | queryFetchSize (mongodb) | 스트리밍 중에 메모리에 로드할 레코드의 최대 개수예요. '0'이면 기본 JDBC fetch size를 사용해요. | 0 | int | | retriableRestartConnectorWaitMs (mongodb) | 재시도 가능한 예외가 발생한 뒤 커넥터를 다시 시작하기 전에 기다리는 시간이에요. 기본값은 10000ms예요. | 10s | long | | schemaHistoryInternalFileFilename (mongodb) | 데이터베이스 스키마 히스토리를 기록하는 데 사용할 파일의 경로예요. | | String | | schemaNameAdjustmentMode (mongodb) | 커넥터가 사용하는 메시지 컨버터와의 호환성을 위해 스키마 이름을 어떻게 조정할지 지정해요. 'avro'는 Avro 타입 이름에 쓸 수 없는 문자를 언더스코어로 바꿔요. 'avro_unicode'는 Avro 타입 이름에 쓸 수 없는 언더스코어나 문자를 _uxxxx 같은 유니코드로 바꿔요. 참고: _는 자바의 백슬래시 같은 이스케이프 시퀀스예요. 'none'은 아무 조정도 하지 않아요(기본값). | none | String | | signalDataCollection (mongodb) | Debezium에 시그널/커맨드를 보내는 데 사용하는 데이터 컬렉션의 이름이에요. 멀티 파티션 모드 커넥터에서는 signal data collection을 콤마 구분 목록으로 여러 개 지정할 수 있어요. 설정하지 않으면 시그널링이 꺼져요. | | String | | signalEnabledChannels (mongodb) | 활성화된 채널 이름 목록이에요. source 채널이 기본으로 활성화되어 있어요. | source | String | | signalPollIntervalMs (mongodb) | 등록된 채널에서 새 시그널을 찾는 주기(밀리초)예요. 기본값은 5초예요. | 5s | long | | skippedOperations (mongodb) | 스트리밍 중에 건너뛸 연산의 콤마 구분 목록이에요. 'c'는 insert/create, 'u'는 update, 'd'는 delete, 't'는 truncate, 'none'은 아무것도 건너뛰지 않음을 뜻해요. 기본으로는 truncate 연산만 건너뛰어요. | t | String | | snapshotCollectionFilterOverrides (mongodb) | 이 프로퍼티는 콤마 구분 목록을 담고 있고, 여기에 해당하는 항목의 초기 스냅샷은 데이터 소스에 있는 데이터의 부분집합이 될 수 있어요. 부분집합은 snapshot.collection.filter.override. 프로퍼티 값으로 지정한 mongodb 필터 쿼리로 정의돼요. | | String | | snapshotDelayMs (mongodb) | 스냅샷이 시작되기 전의 지연 시간(밀리초)이에요. 기본값은 0 ms예요. | 0ms | long | | snapshotFetchSize (mongodb) | 스냅샷을 수행하는 동안 메모리에 로드할 레코드의 최대 개수예요. | | int | | snapshotIncludeCollectionList (mongodb) | 커넥터를 만들거나 재시작할 때 스냅샷을 꼭 찍어야 하는 테이블/컬렉션 목록을 지정하려면 이 설정을 반드시 지정해야 해요. | | String | | snapshotMaxThreads (mongodb) | 스냅샷을 수행하는 데 사용할 스레드의 최대 개수예요. 기본값은 1이에요. | 1 | int | | snapshotMaxThreadsMultiplier (mongodb) | 테이블당 스냅샷 청크 수를 조절하는 데 사용하는 계수예요. 기본 동작은 'row_count/snapshot.max.threads'로 청크당 행 수를 계산해요. 큰 테이블에는 이상적이지 않을 수 있는데, multiplier를 사용하면 'row_count/(snapshot.max.threads snapshot.max.threads.multiplier)' 공식으로 청크 수를 늘리도록 조정돼요. | 1 | int | | snapshotMode (mongodb) | 커넥터 시작 시 스냅샷을 실행할 기준이에요. 다음 스냅샷 옵션 중 하나를 선택하세요. 'initial'(기본값): logical server name에 대한 오프셋을 찾지 못하면 설정된 테이블의 현재 전체 상태를 캡처하는 스냅샷을 실행해요. 스냅샷이 끝나면 커넥터는 oplog에서 변경 스트리밍을 시작해요. 'never': 커넥터는 스냅샷을 실행하지 않아요. 처음 시작하자마자 oplog의 시작부터 읽기 시작해요. | initial | String | | snapshotModeConfigurationBasedSnapshotData (mongodb) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 데이터를 스냅샷할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeConfigurationBasedSnapshotOnDataError (mongodb) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 에러가 났을 경우 데이터를 스냅샷할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeConfigurationBasedSnapshotOnSchemaError (mongodb) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 에러가 났을 경우 스키마를 스냅샷할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeConfigurationBasedSnapshotSchema (mongodb) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 스키마를 스냅샷할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeConfigurationBasedStartStream (mongodb) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 스냅샷 이후 스트림을 시작할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeCustomName (mongodb) | 'snapshot.mode'가 custom으로 설정되어 있을 때, 'name()' 메서드가 제공하는 커스텀 구현의 이름을 지정하려면 이 설정을 반드시 지정해야 해요. 구현체는 'Snapshotter' 인터페이스를 구현해야 하고, 앱이 부팅될 때마다 호출되어 스냅샷을 할지 판단해요. | | String | | sourceinfoStructMaker (mongodb) | SourceInfo 스키마와 struct를 반환하는 SourceInfoStructMaker 클래스의 이름이에요. | io.debezium.connector.mongodb.MongoDbSourceInfoStructMaker | String | | statisticsMetricsEnabled (mongodb) | 레코드 처리 지연 시간 같은 여러 종류의 통계와, quantile 같은 파생 데이터 수집을 활성화해요. 기본으로 통계 수집은 켜져 있어요. | true | boolean | | streamingDelayMs (mongodb) | 스냅샷이 끝나고 스트리밍이 시작되기 전의 지연 시간(밀리초)이에요. 기본값은 0 ms예요. | 0ms | long | | tombstonesOnDelete (mongodb) | delete 연산을 delete 이벤트와 그 뒤의 톰브스톤 이벤트로 나타낼지(true), delete 이벤트만으로 나타낼지(false) 여부예요. 톰브스톤 이벤트를 내보내면(기본 동작) 소스 레코드가 삭제되었을 때 Kafka가 해당 키와 관련된 모든 이벤트를 완전히 삭제할 수 있어요. | false | boolean | | topicNamingStrategy (mongodb) | 데이터 변경, 스키마 변경, 트랜잭션, 하트비트 이벤트 등의 토픽 이름을 정하는 데 사용할 TopicNamingStrategy 클래스의 이름이에요. | io.debezium.schema.SchemaTopicNamingStrategy | String | | topicPrefix (mongodb) | 필수 변경을 캡처하는 특정 데이터베이스 서버/클러스터를 식별하고 네임스페이스를 제공하는 토픽 접두어예요. 이 커넥터가 내보내는 이벤트를 받는 모든 Kafka 토픽 이름의 접두어로 쓰이기 때문에, 토픽 접두어는 다른 모든 커넥터와 겹치지 않게 유일해야 해요. 영숫자, 하이픈, 점, 언더스코어만 받아들여야 해요. | | String | | transactionMetadataFactory (mongodb) | 트랜잭션 컨텍스트와 트랜잭션 struct/스키마를 만드는 클래스예요. | io.debezium.pipeline.txmetadata.DefaultTransactionMetadataFactory | String |

메시지 헤더 (Message Headers)

Debezium MongoDB Connector 컴포넌트는 다음 메시지 헤더(들)를 지원해요:

Name Description Default Type
CamelDebeziumSourceMetadata (consumer) Constant: HEADER_SOURCE_METADATA 소스 이벤트에 대한 메타데이터예요. 테이블 이름, 데이터베이스 이름, 로그 위치 등이 담기고, 자세한 내용은 Debezium 문서를 참고하세요. Map
CamelDebeziumIdentifier (consumer) Constant: HEADER_IDENTIFIER 커넥터의 식별자예요. 보통 {server-name}.{database-name}.{table-name} 형식이에요. String
CamelDebeziumKey (consumer) Constant: HEADER_KEY 이벤트의 키예요. 보통 테이블의 기본 키(Primary Key)예요. Struct
CamelDebeziumOperation (consumer) Constant: HEADER_OPERATION 있으면 이벤트 연산의 타입이에요. 이 커넥터의 값은 create(또는 insert)는 c, update는 u, delete는 d, read(초기 동기화의 경우 또는 스냅샷 이벤트의 경우)는 r이에요. String
CamelDebeziumTimestamp (consumer) Constant: HEADER_TIMESTAMP 있으면 커넥터가 이벤트를 처리한 시간(JVM의 시스템 시계 사용)이에요. Long
CamelDebeziumBefore (consumer) Constant: HEADER_BEFORE 있으면 이벤트가 발생하기 전의 로우 상태를 담고 있어요. Struct
CamelDebeziumDdlSQL (consumer) Constant: HEADER_DDL_SQL 있으면 이벤트의 DDL SQL 텍스트예요. String

설정에 대해 더 자세히 알아보려면 임베디드 엔진 프로퍼티와 MongoDB 커넥터 프로퍼티 문서를 참고하세요.

참고: Debezium MongoDB는 MongoDB의 oplog로 CDC 이벤트를 만들어요. MongoDB oplog의 update 이벤트에는 변경된 문서의 before/after 상태가 없어서, Debezium 커넥터가 이 정보를 제공할 방법이 없어요. 그래서 이 컴포넌트에서는 CamelDebeziumBefore 헤더 키를 사용할 수 없어요.

사용법 (Usage)

메시지 바디 (Message body)

메시지 바디가 null이 아니라면(톰브스톤의 경우 null이에요) 이벤트가 발생한 뒤의 로우 상태를 담고 있어요. String JSON 형식이라서 Camel JSON Data Format으로 unmarshal할 수 있어요.

자세한 내용은 아래를 참고하세요.

예제 (Examples)

이벤트 컨슈밍 (Consuming events)

MongoDB 커넥터의 Debezium 이벤트를 받아 보는 기본 라우트예요:

from("debezium-mongodb:dbz-test-1?offsetStorageFileName=/usr/offset-file-1.dat&mongodbConnectionString=RAW(mongodb://localhost:27017/?replicaSet=rs0)&mongodbUser=debezium&mongodbPassword=dbz&topicPrefix=dbserver1&schemaHistoryInternalFileFilename=/usr/history-file-1.dat")
    .log("Event received from Debezium : ${body}")
    .log("    with this identifier ${headers.CamelDebeziumIdentifier}")
    .log("    with these source metadata ${headers.CamelDebeziumSourceMetadata}")
    .log("    the event occurred upon this operation '${headers.CamelDebeziumOperation}'")
    .log("    on this database '${headers.CamelDebeziumSourceMetadata[db]}' and this table '${headers.CamelDebeziumSourceMetadata[table]}'")
    .log("    with the key ${headers.CamelDebeziumKey}")
    .choice()
        .when(header(DebeziumConstants.HEADER_OPERATION).in("c", "u", "r"))
            .unmarshal().json()
            .log("Event received from Debezium : ${body}")
         .end()
    .end();
<route>
  <from uri="debezium-mongodb:dbz-test-1?offsetStorageFileName=/usr/offset-file-1.dat&amp;mongodbConnectionString=RAW(mongodb://localhost:27017/?replicaSet=rs0)&amp;mongodbUser=debezium&amp;mongodbPassword=dbz&amp;topicPrefix=dbserver1&amp;schemaHistoryInternalFileFilename=/usr/history-file-1.dat"/>
  <log message="Event received from Debezium : ${body}"/>
  <log message="    with this identifier ${headers.CamelDebeziumIdentifier}"/>
  <log message="    with these source metadata ${headers.CamelDebeziumSourceMetadata}"/>
  <log message="    the event occurred upon this operation '${headers.CamelDebeziumOperation}'"/>
  <log message="    on this database '${headers.CamelDebeziumSourceMetadata[db]}' and this table '${headers.CamelDebeziumSourceMetadata[table]}'"/>
  <log message="    with the key ${headers.CamelDebeziumKey}"/>
  <choice>
    <when>
      <simple>${headers.CamelDebeziumOperation} in 'c,u,r'</simple>
      <unmarshal><json/></unmarshal>
      <log message="Event received from Debezium : ${body}"/>
    </when>
  </choice>
</route>
- route:
    from:
      uri: debezium-mongodb:dbz-test-1
      parameters:
        offsetStorageFileName: /usr/offset-file-1.dat
        mongodbConnectionString: "mongodb://localhost:27017/?replicaSet=rs0"
        mongodbUser: debezium
        mongodbPassword: dbz
        topicPrefix: dbserver1
        schemaHistoryInternalFileFilename: /usr/history-file-1.dat
      steps:
        - log:
            message: "Event received from Debezium : ${body}"
        - log:
            message: "    with this identifier ${headers.CamelDebeziumIdentifier}"
        - log:
            message: "    with these source metadata ${headers.CamelDebeziumSourceMetadata}"
        - log:
            message: "    the event occurred upon this operation '${headers.CamelDebeziumOperation}'"
        - log:
            message: "    on this database '${headers.CamelDebeziumSourceMetadata[db]}' and this table '${headers.CamelDebeziumSourceMetadata[table]}'"
        - log:
            message: "    with the key ${headers.CamelDebeziumKey}"
        - choice:
            when:
              - simple: "${headers.CamelDebeziumOperation} in 'c,u,r'"
                steps:
                  - unmarshal:
                      json: {}
                  - log:
                      message: "Event received from Debezium : ${body}"

기본으로 컴포넌트는 u, c, r 연산의 이벤트를 바디에 String JSON 형식으로 내보내요. 위 예제처럼 .unmarshal().json()으로 Camel JSON Data Format을 사용하면 JSON으로 간단히 변환할 수 있어요. d 연산의 경우 바디는 null이에요.

중요 앞서 말했듯이 이 컴포넌트는 Debezium Engine을 얇게 감싼 래퍼예요. 따라서 프로덕션에서 이 컴포넌트를 사용하기 전에 Debezium이 어떻게 동작하는지, 그리고 설정이 기대한 동작을 어떻게 반영하는지 이해해야 해요. 특히 장애 처리 부분이 그래요.

더 알아보기 (Learn more)

Debezium 자체의 스냅샷·오프셋·장애 처리 동작은 컴포넌트 설정보다 엔진 문서가 더 상세해요. 프로덕션 배치 전에는 위의 임베디드 엔진 문서를 먼저 확인하세요.