Overview
Los ejemplos de esta página muestran cómo configurar su conector de origen MongoDB Kafka para personalizar el nombre del tema en el que publica registros.
De forma predeterminada, el conector de origen de MongoDB Kafka publica datos de eventos de cambio en un tema de Kafka con el mismo nombre que el espacio de nombres de MongoDB desde el que se originaron los eventos de cambio. Un espacio de nombres es una cadena compuesta por el nombre de la base de datos y el nombre de la colección concatenados con un punto (.) personaje.
Las siguientes secciones muestran diferentes formas de personalizar los temas de Kafka en los que el conector publica datos de eventos de cambio:
Prefijo de tema
Puede configurar su conector de origen para que anteponga una cadena al espacio de nombres de los datos del evento de cambio y publique registros en ese tema de Kafka. Esta configuración concatena automáticamente su prefijo con su espacio de nombres mediante el carácter "."
Para especificar el prefijo del tema, utilice la configuración topic.prefix como se muestra en el siguiente ejemplo:
topic.prefix=myPrefix database=test collection=data
Una vez configurado, su conector publica cualquier cambio en la colección data en la base de datos test en el tema de Kafka llamado myPrefix.test.data.
Sufijo de tema
Se puede configurar el conector de origen para añadir un string al namespace de los datos del evento de cambio y publicar registros en ese tema de Kafka. Esta configuración concatena automáticamente el namespace con el sufijo utilizando el símbolo "." carácter.
Para especificar el sufijo del tema, utilice la configuración topic.suffix como se muestra en el siguiente ejemplo:
topic.suffix=mySuffix database=test collection=data
Una vez configurado, su conector publica cualquier cambio en la colección data en la base de datos test en el tema de Kafka llamado test.data.mySuffix.
Mapa del espacio de nombres del tema
Puede configurar su conector de origen para asignar valores de espacio de nombres a nombres de tema de Kafka para los datos de eventos de cambio entrantes. Los mapas de espacios de nombres de tema contienen pares compuestos por un patrón de espacio de nombres y una plantilla de nombre de tema de destino.
Las siguientes secciones describen cómo el conector interpreta los espacios de nombres y los asigna a temas de Kafka. Además de asignar directamente bases de datos y colecciones a temas de Kafka, el conector admite el uso de expresiones regulares y pares de comodines en los mapas de espacios de nombres de temas.
El orden de los pares en el mapa de espacios de nombres puede afectar la forma en que el conector escribe eventos en los temas. El conector relaciona los espacios de nombres en el siguiente orden:
Se empareja con nombres de bases de datos y colecciones en el patrón de espacio de nombres. Para obtener más información sobre este patrón de espacio de nombres, consulte el ejemplo de nombres de bases de datos y colecciones.
Se empareja con solo un nombre de base de datos en el patrón de espacio de nombres. Para obtener más información sobre este patrón de espacio de nombres, consulte el ejemplo de nombres de bases de datos y colecciones.
Pares de expresiones regulares en orden. Para obtener más información sobre este patrón de espacio de nombres, consulte el ejemplo de expresiones regulares.
El par de comodines. Para obtener más información sobre este patrón de espacio de nombres, consulte el ejemplo de comodín.
Nombres de bases de datos y colecciones
Puede especificar los nombres de bases de datos y colecciones específicas dentro de un mapa de espacio de nombres de temas para escribir eventos de cambio desde estas fuentes en temas de Kafka.
Si el nombre de la base de datos o el espacio de nombres del evento de cambio coincide con uno de los campos del mapa, el conector calcula el nombre del tema de destino según la plantilla de nombre de tema que corresponde a esa asignación y publica el evento en este tema.
Si el nombre de la base de datos o el espacio de nombres del evento de cambio no coincide con ninguna asignación, el conector publica el registro utilizando el esquema de nombres de tema predeterminado a menos que se especifique lo contrario mediante una configuración de nombres de tema diferente.
Importante
Dado que el carácter / indica que el espacio de nombres es un patrón de expresiones regulares, el conector genera un ConnectConfigException si el espacio de nombres incluye este carácter en un contexto que no es de expresiones regulares.
Cualquier asignación que incluya tanto la base de datos como la colección tiene prioridad sobre las asignaciones que solo especifican el nombre de la base de datos de origen.
Importante
La coincidencia del mapa de espacios de nombres se produce antes de que el conector aplique cualquier otra configuración de nomenclatura de tema. Si se definen, el conector aplica las configuraciones topic.prefix y topic.suffix al nombre del tema después de la asignación.
El siguiente ejemplo muestra cómo especificar la configuración topic.namespace.map para definir asignaciones de espacio de nombres de tema desde la base de datos carDb a la plantilla de nombre de tema automobiles y del espacio de nombres carDb.ev a la plantilla de nombre de tema electricVehicles:
topic.namespace.map={"carDb": "automobiles", "carDb.ev": "electricVehicles"}
Dado que la asignación de namespace carDb.ev tiene prioridad sobre la asignación carDb, el conector realiza las siguientes acciones:
Si el evento de cambio provino de la base de datos
carDby de la colecciónev, el conector configura el destino en el temaelectricVehicles.Si el evento de cambio provino de la base de datos
carDby de una colección distinta aev, el conector asigna el destino al temaautomobiles.<collection name>.Si el documento de cambio proviene de una base de datos distinta de
carDb, el conector establece el tema de destino en el esquema de nombres de espacio de nombres predeterminado.Si define las configuraciones
topic.prefixytopic.suffix, el conector aplica sus valores al nombre del tema de destino después de realizar la asignación del espacio de nombres.
Expresiones regulares
Puede usar una expresión regular (regex) dentro de un mapa de espacio de nombres de tema. Para usar una expresión regular, inicie el patrón de espacio de nombres con la barra diagonal (/). Cree la expresión regular siguiendo la sintaxis y el comportamiento especificados por la clase java.util.regex.Pattern.
El conector calcula el nombre del tema realizando una expansión de variables en la plantilla del nombre del tema. El conector admite las siguientes variables:
db:El nombre de la base de datos del espacio de nombres coincidente.sepEl valor de la propiedad de configuracióntopic.separator. Para obtener más información sobre esta propiedad, consulte Propiedades del tema de Kafka para el conector de origen.coll:El nombre de la colección del espacio de nombres coincidente, o una cadena vacía si no hay ningún nombre de colección.sep_coll:El valor de la variablecollprefijado con el valor de la variablesep, o una cadena vacía si el valor decollestá vacío.coll_sep:El valor de la variablecollcon el sufijo del valor de la variablesep, o una cadena vacía si el valor decollestá vacío.sep_coll_sep:El valor de la variablecollcon prefijo y sufijo del valor de la variablesep, o una cadena vacía si el valor decollestá vacío.
Si utiliza alguna de las variables anteriores en su plantilla de nombre de tema, debe encerrarla entre llaves ({}) para que el conector la expanda. No puede usar llaves en la plantilla de nombre de tema para ningún otro propósito.
Nota
Personajes que escapan
Al crear un patrón de espacio de nombres, asegúrese de gestionar correctamente los caracteres que requieren escape. Por ejemplo, para que coincida con ., la sintaxis de expresiones regulares requiere que se escape como \.. Sin embargo, debe escapar la barra invertida \ como \\ según la sintaxis JSON. Por lo tanto, para que coincida con . en su patrón de espacio de nombres, debe escribirlo como \\..
Este ejemplo muestra cómo especificar la configuración topic.namespace.map para que el conector realice la siguiente asignación:
Escribe eventos de bases de datos que coinciden con una expresión regular de un tema calculado a partir de la plantilla de nombre de tema
industrial{sep_coll}. El patrón de expresión regular coincide con cualquier espacio de nombres con el nombre de base de datosvertical.Escribe eventos del espacio de nombres
vertical.healthen el nombre del temahealthcare. En este caso, la plantilla del nombre del tema y el nombre del tema calculado son iguales.
topic.namespace.map={"/vertical(?:\\..*)?": "industrial{sep_coll}", "vertical.health": "healthcare"}
Nota
En este ejemplo, la propiedad de configuración topic.separator es ".", el valor predeterminado.
Debido a que la asignación del espacio de nombres vertical.health tiene prioridad sobre la asignación del espacio de nombres de expresiones regulares, el conector realiza las siguientes acciones:
Si el evento de cambio proviene de la colección
healthde la base de datosvertical, el conector establece el destino en el temahealthcare.Si el evento de cambio proviene de cualquier otro espacio de nombres con el nombre de base de datos
vertical, el conector calcula el tema de destino basándose en la plantilla de nombre de temaindustrial{sep_coll}. Los siguientes ejemplos ilustran esta asignación:Si el evento de cambio proviene del espacio de nombres
vertical.wasteManagement, el conector escribe en el temaindustrial.wasteManagement.Si el evento de cambio proviene de la base de datos
verticalpero de ninguna colección específica, el conector escribe en el temaindustrial.
Si el documento de cambio proviene de alguna base de datos que no coincide con el patrón de expresión regular, el conector establece el tema de destino en el esquema de nombres de espacio de nombres predeterminado.
Si define las configuraciones
topic.prefixytopic.suffix, el conector aplica sus valores al nombre del tema de destino después de realizar la asignación del espacio de nombres.
Comodín
Además de especificar el nombre de la base de datos y el espacio de nombres en el mapa de espacios de nombres de su tema como se muestra en Nombres de bases de datos y colecciones, puede usar un comodín * para hacer coincidir eventos de cambio de todas las bases de datos y espacios de nombres sin asignaciones.
topic.namespace.map={"carDb": "automobiles", "carDb.ev": "electricVehicles", "*": "otherVehicles"}
En el ejemplo comodín anterior, el conector publica documentos de cambio originados en todas las bases de datos, excepto carDb, al tema otherVehicles.