【问题标题】:Kafka transforms ignoring regexKafka 转换忽略正则表达式
【发布时间】:2021-10-20 12:28:44
【问题描述】:

我正在尝试使用 kafka transforms.RemoveString 在将主题名称传递到我的连接器之前对其进行修改。我的主题名称是这样的

foo.bar_1.baz

我想提取 bar_1 并将其作为主题名称传入。据我所知,我的regex is correct 但kafka 转换似乎不喜欢它-

transforms=ReplaceField,RenameField,RemoveString
transforms.RemoveString.type=org.apache.kafka.connect.transforms.RegexRouter
transforms.RemoveString.regex=(\w*.)(\w*\d+)(.*)
transforms.RemoveString.replacement=$2

我可以告诉正在使用 RemoveString,因为当我将正则表达式更改为以下时,我得到了我想要的结果,但这对我的用例来说相当限制 -

transforms.RemoveString.regex=(foo.)(.*)(.baz)
transforms.RemoveString.replacement=$2

Kafka 转换中的正则表达式使用是否存在某种限制?

【问题讨论】:

  • 可能你错过了transforms=RemoveString
  • 包含在内,我会在上面添加。
  • 我会使用(\w*)\.(\w+)\.(.*),因为\w 已经包含数字
  • (\w*)\.(\w+)\.(.*) 的结果相同,它仍然通过完整的主题名称,似乎不喜欢使用\w

标签: regex apache-kafka apache-kafka-connect


【解决方案1】:

发现问题,必须转义反斜杠,使用我改进的正则表达式现在看起来像这样 -

(\\w*)\\.(\\w+)\\.(.*)

【讨论】:

    【解决方案2】:

    你在 RegexRouter 中有错字,你错过了R

    transforms=ReplaceField,RenameField,RemoveString
    transforms.RemoveString.type=org.apache.kafka.connect.transforms.RegexRouter
    transforms.RemoveString.regex=(\w*.)(\w*\d+)(.*)
    transforms.RemoveString.replacement=$2
    

    【讨论】:

    • 代表我道歉复制/粘贴错误,我的实际文件已正确列出。
    • 您是否遇到了一些错误?你在日志中看到了吗?
    • 日志中没有错误,但我确实在那里重新访问了它们并且我注意到了这个问题,它似乎在加载属性时删除了反斜杠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2020-08-06
    • 2016-03-30
    相关资源
    最近更新 更多