Docs 菜单
Docs 主页
/
MongoDB Kafka Connector
/ /

主题命名

在此页面上

  • Overview
  • 主题前缀
  • 主题后缀
  • 主题命名空间映射
  • 数据库和collection名称
  • 正则表达式
  • 通配符

本页上的示例展示了如何配置 MongoDB Kafka connector,以自定义其将记录发布到的主题的名称。

默认情况下,MongoDB Kafka connector将变更事件数据发布到 Kafka 主题,该主题与发起变更事件的 MongoDB命名空间同名。命名空间是一个字符串,由数据库和collection名称与点 ( . ) 字符连接起来组成。

以下部分介绍了自定义连接器将变更事件数据发布到的 Kafka 主题的不同方法:

  • 主题前缀

  • 主题后缀

  • 主题命名空间映射

您可以配置源connector,在事件数据的命名空间前添加一个字符串,并将记录发布到该 Kafka 主题。此设置会自动使用“.”将前缀与命名空间连接起来。 字符。

要指定主题前缀,请使用topic.prefix配置设置,如以下示例所示:

topic.prefix=myPrefix
database=test
collection=data

设置完成后,connector将对数据库test中的collectiondata的任何更改发布到名为myPrefix.test.data的 Kafka 主题。

您可以配置您的源connector,将字符串附加到变更事件的命名空间,并将记录发布到那个Kafka主题。此设置会自动将命名空间与后缀用“.”连接起来。 字符。

要指定主题后缀,请使用topic.suffix配置设置,如以下示例所示:

topic.suffix=mySuffix
database=test
collection=data

设置完成后,connector将对数据库test中的collectiondata的任何更改发布到名为test.data.mySuffix的 Kafka 主题。

您可以配置源connector,将命名空间值映射到传入变更事件数据的 Kafka 主题名称。主题命名空间映射包含由命名空间模式和目标主题名称模板组成的

以下各节介绍connector如何解释命名空间并将其映射到 Kafka 主题。In addition to directly mapping databases and collections to Kafka topics, the connector supports the use of regex and wildcard pairs in topic namespace maps.

您的命名空间映射中的键值对顺序可能会影响connector将事件写入您的主题的方式。连接器按以下顺序匹配命名空间:

  1. 与命名空间模式中的数据库和集合名称配对。 要了解有关此命名空间模式的更多信息,请参阅数据库和集合名称示例。

  2. 仅与命名空间模式中的数据库名称配对。 要学习;了解有关此命名空间模式的更多信息,请参阅数据库和集合名称示例。

  3. 按顺序正则表达式对。 要学习;了解有关此命名空间模式的更多信息,请参阅正则表达式示例。

  4. 通配符对。 要学习;了解有关此命名空间模式的更多信息,请参阅通配符示例。

您可以在主题命名空间映射中指定特定数据库和集合的名称,以便将变更事件从这些源写入 Kafka 主题。

如果变更事件的数据库名称或命名空间与映射中的某一字段匹配,则 Connector 会根据与该映射对应的主题名称模板计算目标主题名称,并将事件发布到该主题。

如果变更事件的数据库名称或命名空间与任何映射都不匹配,则连接器将使用默认主题命名方案发布记录,除非不同主题命名设置另有指定。

重要

由于/字符表示命名空间是正则表达式模式,因此如果命名空间在非正则表达式上下文中包含此字符,connector会引发ConnectConfigException

任何同时包含数据库和collection的映射都优先于仅指定源数据库名称的映射。

重要

命名空间映射匹配发生在connector应用任何其他主题命名设置之前。如果已定义,connector则会在映射后将topic.prefixtopic.suffix设置应用于主题名称。

以下示例展示如何指定topic.namespace.map设置来定义从carDb数据库到automobiles主题名称模板的主题命名空间映射,以及从carDb.ev命名空间到electricVehicles主题名称模板的主题命名空间映射:

topic.namespace.map={"carDb": "automobiles", "carDb.ev": "electricVehicles"}

由于carDb.ev命名空间映射优先于carDb映射,因此connector会执行以下操作:

  • 如果变更事件来自数据库carDb和集合ev ,则连接器会将目标设置为electricVehicles主题。

  • 如果更改事件来自数据库carDbev以外的集合,则连接器会将目标设置为automobiles.<collection name>主题。

  • 如果变更文档来自carDb以外的任何数据库,连接器会将目标主题设置为默认命名空间命名方案。

  • 如果您定义了topic.prefixtopic.suffix设置,connector将在执行命名空间映射后将其值应用于目标主题名称。

您可以在主题命名空间映射中使用正则表达式 (regex)。 要使用正则表达式,请以正斜杠 ( / ) 字符开始命名空间模式。 按照java.util.regex.Pattern类指定的语法和行为创建正则表达式。

connector通过对主题名称模板进行变量扩展来计算主题名称。connector支持以下变量:

  • db:匹配命名空间中的数据库名称。

  • septopic.separator配置属性的值。 要学习;了解有关此属性的更多信息,请参阅 Kafka主题属性。

  • coll:匹配命名空间中的集合名称,如果没有集合名称,则为空字符串。

  • sep_collcoll变量的值,以sep变量的值为前缀;如果coll的值为空,则为空字符串。

  • coll_sepcoll变量的值,以sep变量的值作为后缀;如果coll的值为空,则为空字符串。

  • sep_coll_sep:以sep变量值为前缀和后缀的coll变量值;如果coll值为空,则为空字符串。

如果您在主题名称模板中使用任何以前的变量,则必须将其括在大括号 ( {} ) 中,以便connector将其展开。您不能在主题名称模板中将大括号用于任何其他目的。

注意

转义字符

创建命名空间模式时,请确保正确处理需要转义的字符。 例如,要匹配. ,正则表达式语法要求您将其转义为\.但是,根据 JSON 语法,您必须将反斜杠\字符转义为\\ 。 然后,为了匹配命名空间模式中的. ,您必须将其写为\\.

此示例展示如何指定topic.namespace.map设置,以便connector执行以下映射:

  • 将数据库中与正则表达式匹配的事件写入根据industrial{sep_coll}主题名称模板计算得出的主题。 正则表达式模式匹配具有vertical数据库名称的任何命名空间。

  • 将事件从vertical.health命名空间写入healthcare主题名称。 在这种情况下,主题名称模板和计算出的主题名称相同。

topic.namespace.map={"/vertical(?:\\..*)?": "industrial{sep_coll}", "vertical.health": "healthcare"}

注意

在此示例中, topic.separator配置属性为默认值"."

由于vertical.health命名空间映射优先于正则表达式命名空间映射,因此连接器会执行以下操作:

  • 如果变更事件来自vertical数据库的health集合,连接器会将目标设置为healthcare主题。

  • 如果事件来自任何其他具有vertical数据库名称的命名空间,connector将根据industrial{sep_coll}主题名称模板计算目标主题。以下示例演示了此映射:

    • 如果更改事件来自vertical.wasteManagement命名空间,connector将写入industrial.wasteManagement主题。

    • 如果更改事件来自vertical数据库但没有特定collection,则connector将写入industrial主题。

  • 如果变更文档来自与正则表达式模式不匹配的任何数据库,connector会将目标主题设置为默认命名空间命名方案。

  • 如果您定义了topic.prefixtopic.suffix设置,connector将在执行命名空间映射后将其值应用于目标主题名称。

除了在主题命名空间映射中指定数据库名称和命名空间空间(如数据库和集合名称所示)之外,您还可以使用通配符*来匹配来自所有没有映射的数据库和命名空间的变更事件。

topic.namespace.map={"carDb": "automobiles", "carDb.ev": "electricVehicles", "*": "otherVehicles"}

在前面的通配符示例中,connector将源自carDb以外的所有数据库的文档发布到主题otherVehicles

后退

多个来源