Overview
Los ejemplos en esta página muestran cómo configurar tu conector de origen de MongoDB Kafka para personalizar el nombre del tema al que publica los registros.
Por defecto, el conector de origen de MongoDB Kafka publica los datos de eventos de cambio en un tema Kafka con el mismo nombre que el espacio de nombres de MongoDB del cual se originaron los eventos de cambio. Un namespace es una string compuesta por el nombre de la base de datos y de la colección concatenados con un punto (.) personaje.
Las siguientes secciones muestran las diferentes maneras en que puedes personalizar los temas de Kafka a los que el conector publica datos de eventos de cambio:
Prefijo de tema
Puede configurar su conector de origen para anteponer una string al namespace de los datos del evento de cambio y publicar registros en ese tema de Kafka. Esta configuración concatena automáticamente tu prefijo con tu namespace mediante el "." carácter.
Para especificar el prefijo del tema, utiliza el ajuste de configuración topic.prefix como se muestra en el siguiente ejemplo:
topic.prefix=myPrefix database=test collection=data
Una vez configurado, tu conector publica cualquier cambio en la colección data de la base de datos test en el tema de Kafka llamado myPrefix.test.data.
Sufijo del 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, utiliza el parámetro de configuración topic.suffix como se muestra en el ejemplo siguiente:
topic.suffix=mySuffix database=test collection=data
Una vez configurado, tu conector publica cualquier cambio en la colección data de la base de datos test en el tema de Kafka llamado test.data.mySuffix.
Mapa de namespace de temas
Puedes configurar tu conector de origen para asignar valores de namespace a nombres de temas de Kafka para los datos de eventos de cambio entrantes. Los mapas de espacios de nombres de temas contienen pares que están formados 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 namespace 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 pares de expresiones regulares y comodines en los mapas de namespace de temas.
El orden de los pares en tu mapa de namespace puede influir en cómo el conector escribe eventos en tus temas. El conector compara 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 namespace, consulta 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.
Nombre de las bases de datos y colecciones
Puede especificar los nombres de bases de datos y colecciones específicas dentro de un mapa de namespace de temas para guardar eventos de cambio de 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 namespace del evento de cambios no coincide con ningún mapeo, el conector publica el registro usando el esquema de nombres de temas por defecto, a menos que se especifique lo contrario mediante una configuración diferente de nombres de temas.
Importante
Porque el carácter / indica que el namespace es un patrón regex, el conector suscita un ConnectConfigException si el namespace incluye este carácter en un contexto que no sea regex.
Cualquier mapeo que incluya tanto la base de datos como la colección tiene prioridad sobre los mapeos 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 provino de cualquier base de datos que no sea
carDb, el conector establece el tema de destino en el esquema de nomenclatura del espacio de nombres predeterminado.Si defines los ajustes
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:
dbEl nombre de la base de datos del namespace coincidente.sepEl valor de la propiedad de configuracióntopic.separator. Para más información sobre esta propiedad, consulta 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_collEl valor de la variablecollprecedido por el valor de la variablesep, o una string vacía si el valor decollestá vacío.coll_sep: El valor de la variablecollsufijado con el valor de la variablesep, o una string vacía si el valor decollestá vacío.sep_coll_sep: El valor de la variablecollprecedido y seguido del valor de la variablesep, o una string vacía si el valor decollestá vacío.
Si se utiliza alguna de las variables anteriores en la plantilla para nombres de temas, deben ir entre llaves ({}) para que el conector pueda interpretarlas y desplegarlas. No puedes emplear llaves en la plantilla para nombres de temas con ningún otro propósito.
Nota
Carácteres de escape
Cuando cree un patrón de namespace, asegúrese de gestionar correctamente los caracteres que necesitan ser escapados. Por ejemplo, para hacer coincidir ., la sintaxis de expresiones regulares requiere que lo escapes como \. Sin embargo, debes escapar el carácter de barra invertida \ como \\ según la sintaxis JSON. Luego, para hacer coincidir . en tu patrón de namespace, debes 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 coincidan con una expresión regular en 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 namespace con el nombre de base de datosvertical.Guarda eventos desde el espacio de nombres
vertical.healthal nombre de temahealthcare. En este caso, la plantilla de nombre del tema y el nombre del tema computado son los mismos.
topic.namespace.map={"/vertical(?:\\..*)?": "industrial{sep_coll}", "vertical.health": "healthcare"}
Nota
En este ejemplo, la propiedad de configuración topic.separator es ".", el valor por defecto.
Debido a que el mapeo del espacio de nombres vertical.health tiene prioridad sobre el mapeo 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 en base a la plantilla de nombre de temaindustrial{sep_coll}. Los siguientes ejemplos demuestran este mapeo: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 no de una colección específica, el conector escribe en el temaindustrial.
Si el documento de cambio proviene de una base de datos que no coincide con el patrón regex, el conector establece el tema de destino en el esquema de nomenclatura de namespace por defecto.
Si defines los ajustes
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 namespace en el mapa de namespace de su tema, como se muestra en Nombres de bases de datos y colecciones, puede usar un comodín * para coincidir con los eventos de cambio de todas las bases de datos y namespace 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.