有选择地应用转换

当您配置一个消息转换为连接器(SMT),您可以定义一个谓词转换。谓词指定如何转换有条件地适用于连接器流程的信息的一个子集。你可以指定谓词转换为源代码配置连接器,如Debezium或连接器。开云体育官方注册网址

SMT谓词

开云体育官方注册网址Debezium提供几个单独的消息转换(smt),您可以使用修改事件记录在卡夫卡卡夫卡主题连接保存记录。默认情况下,当您配置一个smt Debezium连接器,卡夫卡连接,转换适用于连接器发出的每一个记录。开云体育官方注册网址但是,可能会有你想应用实例转换选择性,所以它只修改子集的改变事件消息,共享一个共同的特点。

例如,Debezium连接器,您可能希开云体育官方注册网址望运行转换只在事件消息从一个特定的表或包含特定头键。环境中运行Apache卡夫卡2.6或更高版本,您可以附加一个谓词语句转换指示卡夫卡连接SMT只适用于特定的记录。在您所指定的谓词,卡夫卡连接使用一个条件来评估每个消息的过程。当Debezi开云体育官方注册网址um连接器发出改变事件消息,卡夫卡连接检查消息根据配置的谓词条件。如果事件消息的条件为真,卡夫卡连接应用转换,然后写消息到卡夫卡的主题。不匹配的消息被发送到卡夫卡修改的状况。

情况类似的谓词的定义一个水槽连接器SMT。连接器从卡夫卡读取消息主题和卡夫卡连接评估对谓词条件的消息。如果消息匹配条件,卡夫卡连接转换,然后将消息传递适用于水槽连接器。

在定义一个谓词之后,您可以重用了这个道理并且把它应用到多个转换。谓词还包括否定选项,您可以使用它来转化一个谓词,谓词条件仅适用于记录匹配条件谓词语句中定义。您可以使用否定选择谓词与其他基于否定条件的变换。

谓词的元素

谓词包含以下元素:

  • 谓词前缀

  • 别名(例如,isOutboxTable)

  • 类型(例如,org.apache.kafka.connect.transforms.predicates.TopicNameMatches)。卡夫卡连接提供了一组缺省谓词类型,您可以定义您自己的自定义谓词的补充。

  • 条件语句和任何额外的配置属性,根据谓词的类型(例如,一个regex命名模式)

默认谓词类型

下面的谓词类型默认可用:

HasHeaderKey

指定的键名的事件消息头你想卡夫卡连接来评估。谓词评估的记录,包括头键指定的名称。

RecordIsTombstone

匹配卡夫卡墓碑上记录。谓词计算真正的对于任何有记录价值。使用这个谓词结合过滤器SMT移除墓碑记录。此谓词没有配置参数。

墓碑,卡夫卡是一个记录,一个关键0-byte,有效载荷。当Debezi开云体育官方注册网址um连接器处理源数据库的删除操作,删除操作的连接器发出两个变化的事件:开云体育电动老虎机

  • 删除操作(“人事处”:“d”)事件,提供数据库记录的前一个值。开云体育电动老虎机

  • 墓碑事件,有相同的关键,但是价值。

    墓碑代表删除标记为行。当日志压实压实期间启用了卡夫卡,卡夫卡删除所有事件和墓碑,共享相同的关键。日志定期发生压实,压实控制的时间间隔delete.retention.ms设置为主题。

    虽然它是可能的配置Debezium开云体育官方注册网址以便它不会排放墓碑事件,最好允许Debezium发出墓碑维护日志压开云体育官方注册网址实期间预期的行为。抑制墓碑阻止卡夫卡期间为一个删除键删除记录日志压实。如果您的环境包括水槽连接器无法处理墓碑,您可以配置水槽连接器使用的SMTRecordIsTombstone谓词过滤掉墓碑记录。

TopicNameMatches

一个正则表达式,指定一个主题的名称你想卡夫卡连接匹配。谓词适用于连接器记录的主题名称指定的正则表达式匹配。使用此谓词应用SMT记录基于源表的名称。

定义SMT谓词

配置转换配置类似于卡夫卡连接谓词。你指定一个谓词别名,别名关联变换,然后为谓词定义类型和配置。

先决条件
  • Debe开云体育官方注册网址zium环境运行Apache卡夫卡2.6或更高版本。

  • SMT Debezium连接器配置。开云体育官方注册网址

过程
  1. 在Debezi开云体育官方注册网址um连接器配置中,指定一个谓词的别名谓词例如,参数IsOutboxTable

  2. 将谓词别名与您想应用条件的变换,通过添加谓词变换别名在连接器配置别名:

    变换。< TRANSFORM_ALIAS >.predicate =< PREDICATE_ALIAS >

    例如:

    transforms.outbox.predicate = IsOutboxTable
  3. 配置谓词通过指定其类型和配置参数提供值。

    1. 下面的类型,指定一个默认的类型中可用卡夫卡连接:

      • HasHeaderKey

      • RecordIsTombstone

      • TopicNameMatches

        例如:

        predicates.IsOutboxTable.type = org.apache.kafka.connect.transforms.predicates.TopicNameMatches
    2. TopicNameMatch或HasHeaderKey谓词,指定一个正则表达式的主题或标题名称你想匹配。

      例如:

      predicates.IsOutboxTable.pattern = outbox.event。*
  4. 如果你想否定一个条件,附加的否定关键字转换别名和设置真正的

    例如:

    transforms.outbox.negate = true

    前面的属性颠倒的记录集谓词匹配,所以卡夫卡连接转换适用于任何不匹配的记录中指定的条件谓词。

例子:TopicNameMatch谓词的发件箱活动路由器转换

下面的示例显示了一个Debezium连接器配置发件箱事件路由开云体育官方注册网址器转换只适用于卡夫卡Debezium发出的消息outbox.event.order的话题。

因为TopicNameMatch谓词计算真正的只有从发件箱表信息(outbox.event。*),转换不应用于消息来自其他表在数据库中。开云体育电动老虎机

转换transforms.outbox =发件箱。谓语= IsOutboxTable transforms.outbox.type = io.debe开云体育官方注册网址zium.transforms.outbox.EventRouter谓词= IsOutboxTable predicates.IsOutboxTable.type = org.apache.kafka.connect.transforms.predicates。TopicNameMatches predicates.IsOutboxTable.pattern = outbox.event。*

忽略墓碑事件

您可以控制是否Debezium发出墓碑事件和卡夫开云体育官方注册网址卡保留多长时间。根据你的数据管道,您可能希望设置tombstones.on.delete财产连接器以便Debezium不会排放墓碑事件。开云体育官方注册网址

是否启用Debezium排放墓碑取决于开云体育官方注册网址主题是如何在您的环境中使用和水槽的消费者的特点。一些水槽连接器依赖墓碑事件从下游数据存储删除记录。在下沉的情况下连接器依赖墓碑记录表明在下游数据存储删除记录时,配置Debezium释放他们。开云体育官方注册网址

配置Debezium时生成墓碑,需要进开云体育官方注册网址一步配置确保水槽连接器接收墓碑事件。主题必须设置的保留政策使得连接器有时间读事件消息卡夫卡删除之前在日志压实。的时间,一个主题保留墓碑前压实控制的delete.retention.ms属性为主题。

默认情况下,tombstones.on.delete连接器将财产真正的所以每个删除事件后连接器生成一个墓碑。如果你设置的属性防止Debezium墓开云体育官方注册网址碑记录保存到卡夫卡的话题,没有墓碑记录可能会导致意想不到的后果。卡夫卡依赖墓碑在日志压实删除相关记录,一个删除键。

如果您需要支持水槽连接器或下游卡夫卡消费者无法用null值过程记录,而不是阻止Debezium发射墓碑,考虑配置的SMT连接器使用的谓词开云体育官方注册网址RecordIsTombstone谓词类型删除墓碑前消息消费者阅读。

过程
  • 防止Debezium发开云体育官方注册网址射墓碑事件删除数据库记录,设置连接器选项开云体育电动老虎机tombstones.on.delete

    例如:

    “tombstones.on.delete”:“假”