Menu Docs
Página inicial do Docs
/
MongoDB Kafka Connector
/ /

Nomenclatura de tópicos

Nesta página

  • Visão geral
  • Prefixo de tópico
  • Sufixo de tópico
  • Mapa de namespace de tópicos
  • Nomes de reconhecimento de data center e collection
  • Expressões regulares
  • Curinga

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

  • Sufixo de tópico

  • Mapa de namespace de tópicos

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.

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.

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:

  1. 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 .

  2. 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 .

  3. Pares regex em ordem. Para saber mais sobre esse padrão de namespace , consulte o exemplo de expressões regulares .

  4. O par curinga. Para saber mais sobre esse padrão de namespace , consulte o exemplo do Curinga .

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 collection ev, o connector definirá o destino para o tópico electricVehicles .

  • Se o evento de alteração vier do reconhecimento de data center carDb e de uma collection diferente de ev, o connector definirá o destino para o tópico automobiles.<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 e topic.suffix, o connector aplicará seus valores ao nome do tópico de destino após executar o mapeamento de namespace.

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ção topic.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ável coll prefixado com o valor da variável sep ou uma string vazia se o valor de coll estiver vazio.

  • coll_sep: O valor da variável coll com sufixo com o valor da variável sep ou uma string vazia se o valor de coll estiver vazio.

  • sep_coll_sep: o valor da variável coll prefixado e sufixado com o valor da variável sep ou uma string vazia se o valor de coll 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 center vertical .

  • Writes events from the vertical.health namespace to the healthcare 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 center vertical , o connector definirá o destino para o tópico healthcare .

  • 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ópico industrial{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ópico industrial.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ópico industrial .

  • 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 e topic.suffix, o connector aplicará seus valores ao nome do tópico de destino após executar o mapeamento de namespace.

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 .

Voltar

Múltiplas origens