주제 이름 지정
개요
이 페이지의 예제에서는 레코드를 게시하는 주제의 이름을 사용자 지정하도록 MongoDB Kafka 소스 connector를 구성하는 방법을 보여 줍니다.
기본적으로 MongoDB Kafka 소스 커넥터는 변경 이벤트가 발생한 MongoDB 네임스페이스 와 동일한 이름을 사용하여 변경 이벤트 데이터를 Kafka 주제에 게시합니다. 네임스페이스는 점( .
) 문자로 연결된 데이터베이스 및 컬렉션 이름으로 구성된 문자열입니다.
다음 섹션에서는 connector가 변경 이벤트 데이터를 게시하는 Kafka 주제를 사용자 지정할 수 있는 다양한 방법을 보여줍니다.
주제 접두사
변경 이벤트 데이터의 네임스페이스에 문자열을 추가하고 해당 Kafka 주제에 레코드를 게시하도록 소스 connector를 구성할 수 있습니다. 이 설정은 네임스페이스가 있는 접두사를 "." 문자.
주제 접두사를 지정하려면 다음 예시와 같이 topic.prefix
구성 설정을 사용합니다.
topic.prefix=myPrefix database=test collection=data
설정이 완료되면 connector는 test
데이터베이스의 data
collection에 대한 모든 변경 사항을 myPrefix.test.data
라는 Kafka 주제에 게시합니다.
주제 접미사
변경 이벤트 데이터의 네임스페이스에 문자열을 추가하고 해당 Kafka 주제에 레코드를 게시하도록 소스 connector를 구성할 수 있습니다. 이 설정은 "." 문자.
주제 접미사를 지정하려면 다음 예와 같이 topic.suffix
구성 설정을 사용합니다.
topic.suffix=mySuffix database=test collection=data
설정이 완료되면 connector는 test
데이터베이스의 data
collection에 대한 모든 변경 사항을 test.data.mySuffix
라는 Kafka 주제에 게시합니다.
주제 네임스페이스 맵
수신 변경 이벤트 데이터의 Kafka 주제 이름에 네임스페이스 값을 매핑하도록 소스 connector를 구성할 수 있습니다. 주제 네임스페이스 맵에는 네임스페이스 패턴과 대상 주제 이름 템플릿으로 구성된 쌍이 포함되어 있습니다.
다음 섹션에서는 connector가 네임스페이스를 해석하고 이를 Kafka 주제에 매핑하는 방법을 설명합니다. 데이터베이스 및 컬렉션을 Kafka 주제에 직접 매핑하는 것 외에도, 커넥터는 주제 네임스페이스 맵에서 정규식 및 와일드카드 쌍의 사용을 지원합니다.
네임스페이스 맵의 쌍 순서는 connector가 주제에 이벤트를 쓰는 방식에 영향을 줄 수 있습니다. connector는 다음 순서로 네임스페이스를 일치시킵니다.
네임스페이스 패턴에서 데이터베이스 및 컬렉션 이름과 쌍을 이룹니다. 이 네임스페이스 패턴에 대해 자세히 알아보려면 데이터베이스 및 컬렉션 이름 예시를 참조하세요.
네임스페이스 패턴 에서 데이터베이스 이름과만 쌍을 이룹니다. 이 네임스페이스 패턴 에 학습 보려면 데이터베이스 및 컬렉션 이름 예시 를 참조하세요.
정규식 쌍을 순서대로 정렬합니다. 이 네임스페이스 패턴 에 학습 보려면 정규 표현식 예시 를 참조하세요.
와일드카드 쌍입니다. 이 네임스페이스 패턴 에 학습 보려면 와일드카드 예시 를 참조하세요.
데이터베이스 및 collection 이름
주제 네임스페이스 맵 내에서 특정 데이터베이스 및 collection의 이름을 지정하여 이러한 소스의 변경 이벤트를 Kafka 주제에 쓸 수 있습니다.
변경 이벤트의 데이터베이스 이름 또는 네임스페이스가 지도의 필드 중 하나와 일치하는 경우 커넥터는 해당 매핑에 해당하는 주제 이름 템플릿을 기반으로 대상 주제 이름을 계산하고 이벤트를 이 주제에 게시합니다.
변경 이벤트의 데이터베이스 이름 또는 네임스페이스가 매핑과 일치하지 않는 경우 connector는 다른 주제 명명 설정으로 달리 지정되지 않는 한 기본 주제 명명 체계를 사용하여 기록을 게시합니다.
중요
/
문자는 네임스페이스가 정규식 패턴임을 나타내므로 네임스페이스가 비정규식 컨텍스트에서 이 문자를 포함하는 경우 커넥터는 ConnectConfigException
를 발생시킵니다.
데이터베이스와 collection을 모두 포함하는 모든 매핑은 소스 데이터베이스 이름만 지정하는 매핑보다 우선합니다.
중요
네임스페이스 맵 일치는 connector가 다른 주제 명명 설정을 적용하기 전에 발생합니다. 정의된 경우 connector는 매핑 후 주제 이름에 topic.prefix
및 topic.suffix
설정을 적용합니다.
다음 예제에서는 topic.namespace.map
설정을 지정하여 carDb
데이터베이스에서 automobiles
주제 이름 템플릿으로, carDb.ev
네임스페이스에서 electricVehicles
주제 이름 템플릿으로의 주제 네임스페이스 매핑을 정의하는 방법을 보여 줍니다.
topic.namespace.map={"carDb": "automobiles", "carDb.ev": "electricVehicles"}
carDb.ev
네임스페이스 매핑은 carDb
매핑보다 우선하므로 connector는 다음 조치를 수행합니다.
변경 이벤트가 데이터베이스
carDb
및 collectionev
에서 발생한 경우 connector는 대상을electricVehicles
주제로 설정합니다.변경 이벤트가 데이터베이스
carDb
및ev
이외의 collection에서 발생한 경우 connector는 대상을automobiles.<collection name>
주제로 설정합니다.변경 문서가
carDb
이외의 데이터베이스에서 가져온 경우 커넥터는 대상 주제를 기본 네임스페이스 명명 체계로 설정합니다.topic.prefix
및topic.suffix
설정을 정의하면 커넥터는 네임스페이스 매핑을 수행한 후 해당 값을 대상 주제 이름에 적용합니다.
정규 표현식
주제 네임스페이스 맵 내에서 정규 표현식(regex)을 사용할 수 있습니다. 정규 표현식을 사용하려면 슬래시(/
) 문자로 네임스페이스 패턴을 시작합니다. java.util.regex.Pattern
클래스에서 지정한 구문과 동작에 따라 정규 표현식을 만듭니다.
커넥터는 주제 이름 템플릿에서 변수 확장을 수행하여 주제 이름을 계산합니다. connector는 다음 변수를 지원합니다.
db
: 일치하는 네임스페이스의 데이터베이스 이름입니다.sep
:topic.separator
구성 속성 의 값입니다. 이 속성 에 학습 보려면 Kafka 주제 속성을 참조하세요.coll
: 일치하는 네임스페이스의 collection 이름이거나 collection 이름이 없는 경우 빈 문자열입니다.sep_coll
:sep
변수의 값이 접두사로 붙은coll
변수의 값이거나,coll
값이 비어 있는 경우 빈 문자열입니다.coll_sep
:coll
변수의 값 뒤에sep
변수의 값이 붙거나,coll
값이 비어 있는 경우 빈 문자열입니다.sep_coll_sep
:sep
변수 값이 접두사와 접미사로 붙은coll
변수의 값이거나,coll
값이 비어 있는 경우 빈 문자열입니다.
주제 이름 템플릿에서 이전 변수를 사용하는 경우 connector가 변수를 확장할 수 있도록 중괄호({}
)로 묶어야 합니다. 주제 이름 템플릿에 중괄호를 다른 용도로는 사용할 수 없습니다.
참고
이스케이프 문자
네임스페이스 패턴을 만들 때는 이스케이프 처리가 필요한 문자를 올바르게 처리해야 합니다. 예를 들어 .
과 일치하려면 정규식 구문에 따라 \.
로 이스케이프해야 하지만 JSON 구문에 따라 백슬래시 \
문자를 \\
로 이스케이프해야 합니다. 그런 다음 네임스페이스 패턴의 .
을(를) 일치시키려면 \\.
로 작성해야 합니다.
이 예에서는 connector가 다음 매핑을 수행하도록 topic.namespace.map
설정을 지정하는 방법을 보여 줍니다.
정규 표현식과 일치하는 데이터베이스의 이벤트를
industrial{sep_coll}
주제 이름 템플릿에서 계산된 주제에 씁니다. 정규식 패턴은vertical
데이터베이스 이름을 가진 모든 네임스페이스와 일치합니다.vertical.health
네임스페이스의 이벤트를healthcare
주제 이름으로 씁니다. 이 경우 주제 이름 템플릿과 계산된 주제 이름은 동일합니다.
topic.namespace.map={"/vertical(?:\\..*)?": "industrial{sep_coll}", "vertical.health": "healthcare"}
참고
이 예제에서 topic.separator
구성 속성은 기본값인 "."
입니다.
vertical.health
네임스페이스 매핑은 정규 표현식 네임스페이스 매핑보다 우선하므로 connector는 다음 조치를 수행합니다.
변경 이벤트가
vertical
데이터베이스의health
컬렉션에서 비롯된 경우 connector는 대상을healthcare
주제로 설정합니다.변경 이벤트가
vertical
데이터베이스 이름을 가진 다른 네임스페이스에서 오는 경우, connector는industrial{sep_coll}
주제 이름 템플릿을 기반으로 대상 주제를 계산합니다. 다음 예제에서는 이 매핑을 보여 줍니다:변경 이벤트가
vertical.wasteManagement
네임스페이스에서 오는 경우 connector는industrial.wasteManagement
주제에 씁니다.변경 이벤트가
vertical
데이터베이스에서 오지만 특정 collection이 아닌 경우, connector는industrial
주제에 기록합니다.
변경 문서가 정규식 패턴과 일치하지 않는 데이터베이스에서 온 경우 connector는 대상 주제를 기본 네임스페이스 명명 체계로 설정합니다.
topic.prefix
및topic.suffix
설정을 정의하면 커넥터는 네임스페이스 매핑을 수행한 후 해당 값을 대상 주제 이름에 적용합니다.
와일드카드
데이터베이스 및 컬렉션 이름 에 표시된 대로 주제 네임스페이스 맵에 데이터베이스 이름과 네임스페이스 를 지정하는 것 외에도 와일드카드 *
를 사용하여 매핑 없이 모든 데이터베이스 및 네임스페이스의 변경 이벤트를 일치시킬 수 있습니다.
topic.namespace.map={"carDb": "automobiles", "carDb.ev": "electricVehicles", "*": "otherVehicles"}
앞의 와일드카드 예제에서 커넥터는 carDb
이외의 모든 데이터베이스에서 시작된 변경 문서를 otherVehicles
주제에 게시합니다.