Kafka Connect RegexRouter转换正则表达式不生效问题咨询
问题原因分析
Kafka Connect的RegexRouter转换使用Java标准正则表达式语法,不存在额外特殊限制,你遇到的不生效问题来源于正则本身的匹配逻辑缺陷:
- 原正则
(\w*.)(\w*\d+)(.*)的第一个分组\w*.中,\w仅能匹配字母、数字、下划线,若topic首段包含横杠等其他合法topic字符会直接匹配失败;同时未转义的.会匹配任意字符,可能导致分组错位。 - 第二个分组
\w*\d+强制要求中间段必须以数字结尾,只要目标段不符合该规则,整个正则就不会命中,RegexRouter会直接保留原topic名称,不做任何修改。
适配性解决方案
你需要提取点分隔topic名称的第二段内容,可使用如下通用配置,适配任意前缀、后缀内容的三段及以上点分隔topic格式:
transforms=ReplaceField,RenameField,RemoveString transforms.RemoveString.type=org.apache.kafka.connect.transforms.RegexRouter transforms.RemoveString.regex=^[^.]+\.([^.]+)\..*$ transforms.RemoveString.replacement=$1
正则逻辑说明
^[^.]+\.匹配topic开头到第一个.的所有前缀内容([^.]+)捕获第一个.和第二个.之间的所有内容,即你需要的bar_1这类中间段\..*$匹配第二个.到topic末尾的所有后缀内容- 替换为
$1即直接使用捕获到的中间段作为最终传入的topic名称
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

