信息过滤
默认情况下,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。
下载脚本SMT存档
存档的内容提取到卡夫卡的Debezium插件目录连接环境。开云体育官方注册网址
获得一个jsr - 223脚本引擎实现和其内容添加到Debezium卡夫卡连接环境插件目录。开云体育官方注册网址
重新启动卡夫卡连接过程去接新的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过滤:开云体育官方注册网址
的名字 | 描述 | 类型 |
---|---|---|
|
一个关键的信息。 |
|
|
消息的一个值。 |
|
|
消息键的模式。 |
|
|
模式信息的价值。 |
|
|
目标主题的名称。 |
字符串 |
|
一个Java消息头的地图。关键字段标题名称。的
|
|
一个表达式可以调用任意方法的变量。表达式应该解决一个布尔值来决定如何SMT性情消息。当表达式计算的过滤条件真正的
,消息被保留。当过滤条件评估假
,消息被移除。
表达式不应该产生任何副作用。也就是说,他们不应该修改他们传递的任何变量。
选项有选择地应用转换
除了改变事件消息,Debezium连接器排放数据库变化发生时,连接器还散发出其他类型的消息,包括开云体育官方注册网址心跳消息,和元数据信息模式变化和事务。开云体育电动老虎机因为这些消息的结构不同于SMT的改变事件消息的结构设计过程,最好配置连接器有选择地应用SMT,这样流程只有预期的数据变化信息。您可以使用下列方法之一来配置连接器应用SMT选择性:
使用topic.regexSMT的配置选项。
语言细节
你表达的方式过滤条件取决于您使用的脚本语言。
例如,如图所示基本配置示例,当你使用Groovy
表达式语言,以下表达式删除所有消息,除了更新记录id
值设置为2
:
价值。人事处== 'u' && value.before.id == 2
其他语言使用不同的方法来表达相同的条件。
Debe开云体育官方注册网址zium MongoDB连接器发出 你也可以使用JSON解析器的方法在一个表达式来为每个数组项生成单独的输出文档。 |
如果您使用JavaScript表达式语言,您可以调用结构体# get ()
方法指定筛选条件,如以下示例:
value.get (op) = = ' u ' & & value.get(之前). get (id) = = 2
如果您使用JavaScript Graal。js定义过滤条件,使用这种方法类似于您使用Groovy。例如:
价值。人事处== 'u' && value.before.id == 2
配置选项
下表列出了配置选项,您可以使用过滤器SMT。
财产 |
默认的 |
描述 |
一个可选的正则表达式,对目的地的名称的主题事件过滤逻辑来决定是否适用。如果目的地主题的名称匹配的价值 |
||
的语言表达。必须首先 |
||
每条消息的表达式计算。必须评估一个布尔值的结果在哪里 |
||
|
指定转换如何处理
|