信息过滤

默认情况下,Debezi开云体育官方注册网址um提供每个数据更改事件,它接收到卡夫卡代理。然而,在许多情况下,你可能感兴趣的只有一个子集的生产者发出的事件。只允许您处理相关的记录,Debezium提供开云体育官方注册网址过滤器单独的消息变换(SMT)。

过滤器SMT正在积极开发中。发出消息或其他细节的结构可能会改变随着开发的进展。

虽然可以使用Java创建一个定制的SMT编码过滤逻辑,使用custom-coded SMT有其缺陷。例如:

  • 有必要预先编译转换并将其部署到卡夫卡连接。

  • 每个改变都需要代码重新编译和重新部署,导致僵化的操作。

过滤器SMT支持脚本语言集成JSR 223Java™平台(脚本)。

开云体育官方注册网址Debezium没有附带任何JSR 223 API的实现。与Debezium使用表达式语言,你必须下载JSR 223语言的脚本引开云体育官方注册网址擎实现。例如,Groovy 3,您可以下载它的JSR 223实现https://groovy-lang.org/。JSR223实现GraalVM JavaScript可用的https://github.com/graalvm/graaljs。获得脚本引擎文件之后,您将它们添加到您的Debezium连接器插件目录,以及任何其他语言实现所使用的JAR文件。开云体育官方注册网址

设置

出于安全原因,不包括过滤器SMT与Debezium连接器档案。开云体育官方注册网址相反,它提供了一个单独的工件,开云体育官方注册网址debezium-scripting-2.3.0.Final.tar.gz

使用基于内容的路由SMT Debezium连接器插件,您必须显式地添加SMT工件卡夫卡连开云体育官方注册网址接环境。重要:过滤后SMT存在于卡夫卡连接实例,任何用户可以添加一个连接器实例可以运行脚本表达式。确保只有授权用户可以运行脚本表达式,一定要确保卡夫卡连接实例及其配置接口之前添加过滤器SMT。

动物园管理员,卡夫卡,卡夫卡连接,和一个或多个Debezium连接器开云体育官方注册网址安装,安装过滤器SMT剩下的任务:

  1. 下载脚本SMT存档

  2. 存档的内容提取到卡夫卡的Debezium插件目录连接环境。开云体育官方注册网址

  3. 获得一个jsr - 223脚本引擎实现和其内容添加到Debezium卡夫卡连接环境插件目录。开云体育官方注册网址

  4. 重新启动卡夫卡连接过程去接新的JAR文件。

Groovy语言需要以下库类路径:

  • groovy

  • groovy-json(可选)

  • groovy-jsr223

上的JavaScript语言需要以下库类路径:

  • graalvm.js

  • graalvm.js.scriptengine

例如:基本配置

您配置过滤转换Debezium连接器卡夫卡的连接配置。开云体育官方注册网址在您所指定的配置,您感兴趣的事件通过定义基于业务规则的过滤条件。当过滤器SMT流程事件流,它根据配置的过滤条件评估每个事件。只有事件满足过滤条件的标准传递到代理。

配置一个Debezium连接器开云体育官方注册网址过滤改变事件记录,配置过滤器SMT在卡夫卡Debezium连接器的连接配置。开云体育官方注册网址过滤器SMT的配置需要指定一个正则表达式,定义了过滤标准。

例如,您可以添加以下连接器配置中配置。

…变换=过滤器transforms.filter.type = io.debezium.t开云体育官方注册网址ransforms.Filter transforms.filter.language = jsr223。groovy transforms.filter.condition =价值。op = = & & value.before“u”。id = = 2…

前面的示例指定的使用Groovy表达式语言。正则表达式价值。人事处== 'u' && value.before.id == 2删除所有消息,除了那些代表更新(u)记录id值等于2

自定义配置

前面的示例显示了一个简单的SMT配置设计过程只有DML事件,它包含一个人事处字段。其他类型的连接器可能发出的消息(心跳消息,墓碑消息或元数据信息模式变化和交易)不包含这个领域。避免处理失败,您可以定义SMT谓词选择性地应用转换的语句特定事件。

变量用于筛选器表达式

开云体育官方注册网址Debezium结合某些变量为过滤器SMT评估上下文。当您创建表达式来指定过滤条件,您可以使用变量Debezium结合评估上下文。开云体育官方注册网址通过绑定变量,Debezium使SMT查找和开云体育官方注册网址解释他们的价值观,评估条件表达式中。

下表列出了变量Debezium绑定到评估上下文SMT过滤:开云体育官方注册网址

表1。筛选器表达式变量
的名字 描述 类型

关键

一个关键的信息。

org.apache.kafka.connect.data.Struct

价值

消息的一个值。

org.apache.kafka.connect.data.Struct

keySchema

消息键的模式。

org.apache.kafka.connect.data.Schema

valueSchema

模式信息的价值。

org.apache.kafka.connect.data.Schema

主题

目标主题的名称。

字符串

一个Java消息头的地图。关键字段标题名称。的变量公开以下属性:

  • 价值(类型的对象)

  • 模式(类型的org.apache.kafka.connect.data.Schema)

java.util。Map < String, i开云体育官方注册网址o.debezium.transforms.scripting.RecordHeader >

一个表达式可以调用任意方法的变量。表达式应该解决一个布尔值来决定如何SMT性情消息。当表达式计算的过滤条件真正的,消息被保留。当过滤条件评估,消息被移除。

表达式不应该产生任何副作用。也就是说,他们不应该修改他们传递的任何变量。

选项有选择地应用转换

除了改变事件消息,Debezium连接器排放数据库变化发生时,连接器还散发出其他类型的消息,包括开云体育官方注册网址心跳消息,和元数据信息模式变化和事务。开云体育电动老虎机因为这些消息的结构不同于SMT的改变事件消息的结构设计过程,最好配置连接器有选择地应用SMT,这样流程只有预期的数据变化信息。您可以使用下列方法之一来配置连接器应用SMT选择性:

语言细节

你表达的方式过滤条件取决于您使用的脚本语言。

例如,如图所示基本配置示例,当你使用Groovy表达式语言,以下表达式删除所有消息,除了更新记录id值设置为2:

价值。人事处== 'u' && value.before.id == 2

其他语言使用不同的方法来表达相同的条件。

Debe开云体育官方注册网址zium MongoDB连接器发出补丁字段序列化JSON文档而不是结构。
使用过滤器SMT与MongoDB连接器,您必须首先解除JSON数组字段到单独的文件中。
你可以通过应用MongoDBExtractNewDocumentStateSMT。

你也可以使用JSON解析器的方法在一个表达式来为每个数组项生成单独的输出文档。
例如,如果您使用Groovy表达式语言,添加groovy-json工件的类路径中,然后添加一个表达式等(新groovy.json.JsonSlurper ()) .parseText (value.after)。last_name = =“Kretchmar”

Javascript

如果您使用JavaScript表达式语言,您可以调用结构体# get ()方法指定筛选条件,如以下示例:

value.get (op) = = ' u ' & & value.get(之前). get (id) = = 2
Javascript与Graal.js

如果您使用JavaScript Graal。js定义过滤条件,使用这种方法类似于您使用Groovy。例如:

价值。人事处== 'u' && value.before.id == 2

配置选项

下表列出了配置选项,您可以使用过滤器SMT。

表2。过滤器SMT配置选项

财产

默认的

描述

一个可选的正则表达式,对目的地的名称的主题事件过滤逻辑来决定是否适用。如果目的地主题的名称匹配的价值topic.regex之前,转换适用于过滤逻辑将事件传递给这个话题。如果主题的名称不匹配的价值topic.regex、SMT将事件传递给主题修改的。

的语言表达。必须首先jsr223。例如,jsr223.groovy,或jsr223.graal.js。开云体育官方注册网址Debezium支持引导的JSR 223 API (Java™平台“脚本”)只有。

每条消息的表达式计算。必须评估一个布尔值的结果在哪里真正的让消息,和的结果删除它。

保持

指定转换如何处理(墓碑)消息。您可以指定以下选项之一:

保持

(默认)通过传递消息。

下降

完全删除消息。

评估

应用消息的过滤条件。