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 结构中的字段?

SMT 通过连接器配置创建 kafka 连接器字符串分区键

是否可以仅将 SMT(单消息转换)应用于来自指定主题的消息

如何在 Apache Kafka 中使用 AVRO 序列化处理嵌套的源数据?

PADS软件如何输出SMT坐标文件