Kafka SMT ValueToKey - 如何使用多个值作为键?
Posted
技术标签:
【中文标题】Kafka SMT ValueToKey - 如何使用多个值作为键?【英文标题】:Kafka SMT ValueToKey - How use multiple values as key? 【发布时间】:2018-07-23 01:54:59 【问题描述】:我正在使用 Confluent JDBCSourceConnector 从 Oracle 表中读取数据。我正在尝试使用 SMT 生成由 3 个连接字段组成的密钥。
transforms=createKey
transforms.createKey.type=org.apache.kafka.connect.transforms.ValueToKey
transforms.createKey.fields=BUS_OFC_ID_CD,SO_TYPE,SO_NO
使用上面的转换,我得到这样的结果:
"BUS_OFC_ID_CD":"111","SO_TYPE":"I","SO_NO":"55555"
我想要类似的东西:
111I55555
知道如何仅连接这些值吗?
【问题讨论】:
追踪:github.com/confluentinc/kafka-connect-jdbc/issues/359 【参考方案1】:我无法在属性文件中解决上述问题。因此,解决方法是:
创建一个视图(我们已经必须这样做才能将 mode=timestamp 设置为 使用我们的 Oracle 数据库) 添加一个包含 KEYNAME 连接值的额外字段 提取连接的值以用作键。例如:
CREATE VIEW XX_TEST_V AS
SELECT BUS_OFC_ID_CD, SO_TYPE, SO_NO, BUS_OFC_ID_CD||SO_TYPE||SO_NO as KEYNAME
FROM XX_TEST;
这会给你一个 JSON 密钥消息
"KEYNAME ":"111I55555"
剥离 JSON 以仅保留文本然后在属性文件中完成
例如:
transforms=createKey,extractString
transforms.createKey.type=org.apache.kafka.connect.transforms.ValueToKey
transforms.createKey.fields=KEYNAME
transforms.extractString.type=org.apache.kafka.connect.transforms.ExtractField$Key
transforms.extractString.field=KEYNAME
这应该给你以下作为关键
"111I55555"
问候 彼得
【讨论】:
以上是关于Kafka SMT ValueToKey - 如何使用多个值作为键?的主要内容,如果未能解决你的问题,请参考以下文章
如何在融合的 kafka docker 安装中安装自定义 SMT?
如何重命名/替换 Kafka-connect SMT 结构中的字段?