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
相关产品推荐
相关产品推荐

