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 - carDbe 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 - carDbe 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.prefixe- topic.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ção- topic.separator. Para saber mais sobre esta propriedade, consulte Propriedades do tópico Kafka para o conector de origem.
- 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- collprefixado com o valor da variável- sepou uma string vazia se o valor de- collestiver vazio.
- coll_sep: O valor da variável- collcom sufixo com o valor da variável- sepou uma string vazia se o valor de- collestiver vazio.
- sep_coll_sep: o valor da variável- collprefixado e sufixado com o valor da variável- sepou uma string vazia se o valor de- collestiver 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.healthnamespace to the- healthcaretopic 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 - healthdo 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.prefixe- topic.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 .