You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka Connect 6.0.1中MaskField SMT处理墓碑事件失败,如何实现仅对指定主题的非墓碑消息应用掩码

解决MaskField SMT遇到墓碑事件报错的方案

没问题,在Kafka Connect 6.0.1里完全可以通过组合内置谓词来解决这个问题,不用写自定义SMT。核心思路是让MaskField只对匹配指定主题且不是墓碑事件的消息生效,墓碑事件直接跳过转换,避免触发报错。

具体配置方案

你需要定义多个谓词,通过取反和逻辑组合来实现需求,完整配置如下:

# 定义转换逻辑
transforms: mask_trf
transforms.mask_trf.type: org.apache.kafka.connect.transforms.MaskField$Value
transforms.mask_trf.fields: foo
transforms.mask_trf.replacement: ***
# 关联组合后的谓词
transforms.mask_trf.predicate: combined_pred

# 声明所有需要用到的谓词
predicates: combined_pred, topic_match, is_tombstone, not_tombstone

# 1. 匹配目标主题的谓词(替换成你的实际主题正则)
predicates.topic_match.type: org.apache.kafka.connect.transforms.predicates.TopicNameMatches
predicates.topic_match.pattern: ^t1$  # 精确匹配主题t1,多主题可写为^(t1|t2)$

# 2. 检测墓碑事件的内置谓词
predicates.is_tombstone.type: org.apache.kafka.connect.transforms.predicates.RecordIsTombstone

# 3. 对墓碑谓词取反:表示"不是墓碑事件"
predicates.not_tombstone.type: org.apache.kafka.connect.transforms.predicates.PredicateNot
predicates.not_tombstone.predicate: is_tombstone

# 4. 组合两个条件:必须同时满足「匹配主题」和「不是墓碑」
predicates.combined_pred.type: org.apache.kafka.connect.transforms.predicates.PredicateAnd
predicates.combined_pred.predicates: topic_match, not_tombstone

配置说明

  • PredicateNot 用来反转RecordIsTombstone的结果,把“是墓碑”的判断转为“不是墓碑”的生效条件
  • PredicateAnd 用来将“匹配指定主题”和“不是墓碑”两个条件绑定,只有同时满足时,MaskField才会执行转换
  • 墓碑事件会因为不满足“不是墓碑”的条件,直接跳过转换,不会触发Only Map objects supported...的报错

记得根据你的实际主题调整topic_match.pattern的正则表达式,比如需要匹配所有以t1开头的主题,可以写成^t1.*$。

内容的提问来源于stack exchange,提问作者Anvar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 07:12:28