Nomenclatura de tópicos
Nesta página
Visão geral
Os exemplos nesta página mostram como configurar o connector de origem do MongoDB Kafka para personalizar o nome do tópico para o qual ele publica registros.
Por padrão, o conector de origem MongoDB Kafka publica dados de eventos de alteração em um tópico do Kafka com o mesmo nome do namespace MongoDB do qual os eventos de alteração se originaram. Um namespace é uma string composta do nome do reconhecimento de data center e da collection concatenada com um caractere de ponto (.
).
As seções a seguir mostram maneiras diferentes de personalizar os tópicos do Kafka para os quais o connector publica dados de event de alteração:
Prefixo de tópico
Você pode configurar o seu connector de origem para preceder uma string ao namespace dos dados do evento de alteração e publicar registros nesse tópico do Kafka. Essa configuração concatena automaticamente seu prefixo com seu namespace com o "." personagem.
Para especificar o prefixo do tópico, utilize a configuração do topic.prefix
como mostrado no seguinte exemplo:
topic.prefix=myPrefix database=test collection=data
Depois de definido, o conector publica quaisquer alterações na coleção data
no banco de dados test
no tópico Kafka chamado myPrefix.test.data
.
Sufixo de tópico
Você pode configurar o seu connector de origem para acrescentar uma string ao namespace dos dados do evento de alteração e publicar registros nesse tópico do Kafka. Essa configuração concatena automaticamente seu namespace com seu sufixo com o "." personagem.
Para especificar o sufixo do tópico, utilize a configuração do topic.suffix
como mostrado no seguinte exemplo:
topic.suffix=mySuffix database=test collection=data
Depois de definido, o conector publica quaisquer alterações na coleção data
no banco de dados test
no tópico Kafka chamado test.data.mySuffix
.
Mapa de namespace de tópicos
Você pode configurar o conector de origem para mapear valores de namespace para nomes de tópicos do Kafka para dados de eventos de alteração recebidos. Os mapas de namespace de tópicos contêm pares que são compostos por um padrão de namespace e um modelo de nome de tópico de destino.
As seções a seguir descrevem como o connector interpreta os namespace e os mapeia para os tópicos do Kafka. Além de mapear diretamente bancos de dados e collections para tópicos do Kafka, o conector suporta o uso de pares regex e curingas em mapas de namespace de tópicos.
A ordem dos pares no mapa de namespace pode afetar a forma como o connector grava evento nos seus tópicos. O connector corresponde aos namespace na seguinte ordem:
Pares com nomes de banco de dados e coleção no padrão de namespace. Para saber mais sobre esse padrão de namespace, consulte o exemplo Nomes de banco de dados e coleção .
Pares com apenas um nome de banco de dados de dados no padrão de namespace . Para saber mais sobre esse padrão de namespace , consulte o exemplo de Nomes de banco de dados e coleção .
Pares regex em ordem. Para saber mais sobre esse padrão de namespace , consulte o exemplo de expressões regulares .
O par curinga. Para saber mais sobre esse padrão de namespace , consulte o exemplo do Curinga .
Nomes de reconhecimento de data center e collection
Você pode especificar os nomes de reconhecimento de data center e collection específicos em um mapa de namespace de tópico para gravar evento de alteração dessas fontes em tópicos do Kafka.
Se o nome do banco de dados ou namespace do evento de alteração corresponder a um dos campos no mapa, o conector calculará o nome do tópico de destino com base no modelo de nome do tópico que corresponde a esse mapeamento e publicará o evento nesse tópico.
Se o nome do banco de dados ou namespace do evento de alteração não corresponder a nenhum mapeamento, o conector publicará o registro usando o esquema de nomenclatura de tópico padrão, a menos que especificado de outra forma por uma configuração de nomenclatura de tópico diferente.
Importante
Como o caractere /
denota que o namespace é um padrão regex, o connector gera um ConnectConfigException
se o namespace incluir esse caractere em um contexto não regex.
Qualquer mapeamento que inclua banco de dados e coleção tem precedência sobre mapeamentos que especificam apenas o nome do banco de dados de origem.
Importante
A correspondência do namespace map ocorre antes que o connector aplique qualquer outra configuração de nomenclatura de tópico. Se definido, o connector aplicará as configurações topic.prefix
e topic.suffix
ao nome do tópico após o mapeamento.
O exemplo a seguir mostra como especificar a configuração topic.namespace.map
para definir um mapeamento de namespace de tópico do reconhecimento de data center carDb
para o modelo de nome de tópico automobiles
e do namespace carDb.ev
para o modelo de nome de tópico electricVehicles
:
topic.namespace.map={"carDb": "automobiles", "carDb.ev": "electricVehicles"}
Como o mapeamento do namespace carDb.ev
tem precedência sobre o mapeamento carDb
, o connector executa a seguinte ação:
Se o evento de alteração vier do reconhecimento de data center
carDb
e da collectionev
, o connector definirá o destino para o tópicoelectricVehicles
.Se o evento de alteração vier do reconhecimento de data center
carDb
e de uma collection diferente deev
, o connector definirá o destino para o tópicoautomobiles.<collection name>
.Se o documento de alteração vier de qualquer reconhecimento de data center diferente de
carDb
, o connector definirá o tópico de destino para o esquema de nomenclatura de namespace padrão.Se você definir as configurações
topic.prefix
etopic.suffix
, o connector aplicará seus valores ao nome do tópico de destino após executar o mapeamento de namespace.
Expressões regulares
Você pode usar uma expressão regular (regex) em um mapa de namespace de tópico. Para usar uma expressão regular, inicie o padrão de namespace com o caractere de barra (/
). Crie a expressão regular seguindo a sintaxe e o comportamento especificados pela classe java.util.regex.Pattern
.
O connector calcula o nome do tópico fazendo expansão variável no modelo de nome do tópico. O connector suporta as seguintes variáveis:
db
: o nome do reconhecimento de data center a partir do namespace correspondente.sep
: o valor da propriedade de configuraçãotopic.separator
. Para saber mais sobre esta propriedade, consulte Propriedades do tópico Kafka.coll
: o nome da collection do namespace correspondente ou uma string vazia se não houver nenhum nome de collection.sep_coll
: O valor da variávelcoll
prefixado com o valor da variávelsep
ou uma string vazia se o valor decoll
estiver vazio.coll_sep
: O valor da variávelcoll
com sufixo com o valor da variávelsep
ou uma string vazia se o valor decoll
estiver vazio.sep_coll_sep
: o valor da variávelcoll
prefixado e sufixado com o valor da variávelsep
ou uma string vazia se o valor decoll
estiver vazio.
Se você usar qualquer uma das variáveis anteriores no modelo de nome do tópico, deverá colocá-la entre chaves ({}
) para que o connector a expanda. Você não pode usar chaves no modelo de nome do tópico para qualquer outra finalidade.
Observação
Caracteres de escape
Ao criar um padrão de namespace, certifique-se de lidar adequadamente com os caracteres que precisam ser escapados. Por exemplo, para corresponder a .
, a sintaxe regex exige que você escape como \.
No entanto, você deve trocar o caractere de barra invertida \
como \\
de acordo com a sintaxe JSON. Em seguida, para corresponder ao .
em seu padrão de namespace, você deve escrevê-lo como \\.
.
Este exemplo mostra como especificar a configuração topic.namespace.map
para que o connector execute o seguinte mapeamento:
Escreve evento de reconhecimento de data center que correspondem a uma expressão regular para um tópico calculado a partir do modelo de nome de tópico
industrial{sep_coll}
. O padrão regex corresponde a qualquer namespace com o nome do reconhecimento de data centervertical
.Writes events from the
vertical.health
namespace to thehealthcare
topic name. Nesse caso, o modelo de nome do tópico e o nome do tópico calculado são os mesmos.
topic.namespace.map={"/vertical(?:\\..*)?": "industrial{sep_coll}", "vertical.health": "healthcare"}
Observação
Neste exemplo, a propriedade de configuração topic.separator
é "."
, o valor padrão.
Como o mapeamento de namespace vertical.health
tem precedência sobre o mapeamento de namespace de expressão regular, o conector executa as seguintes ações:
Se o evento de alteração vier da collection
health
do reconhecimento de data centervertical
, o connector definirá o destino para o tópicohealthcare
.Se o evento de alteração vier de qualquer outro namespace com o nome do reconhecimento de data center
vertical
, o connector calculará o tópico de destino com base no modelo de nome de tópicoindustrial{sep_coll}
. Os exemplos a seguir demonstram esse mapeamento:Se o evento de alteração vier do namespace
vertical.wasteManagement
, o connector gravará no tópicoindustrial.wasteManagement
.Se o evento de alteração vier do reconhecimento de data center
vertical
, mas de nenhuma collection específica, o connector gravará no tópicoindustrial
.
Se o documento de alteração vier de qualquer reconhecimento de data center que não corresponda ao padrão regex, o connector definirá o tópico de destino para o esquema de nomenclatura de namespace padrão.
Se você definir as configurações
topic.prefix
etopic.suffix
, o connector aplicará seus valores ao nome do tópico de destino após executar o mapeamento de namespace.
Curinga
Além de especificar o nome do banco de dados de dados e o namespace em seu mapa de namespace de tópico, conforme mostrado em Nomes de bancos de dados e coleções, você pode usar um curinga *
para corresponder a eventos de alteração de todos os bancos de dados e namespaces sem mapeamentos.
topic.namespace.map={"carDb": "automobiles", "carDb.ev": "electricVehicles", "*": "otherVehicles"}
No exemplo de curinga anterior, o connector publica documento de alteração originados de todos os reconhecimento de data center diferentes de carDb
no tópico otherVehicles
.