Kafka- 使用非键值将 Kafka 流与全局 K 表连接

问题描述 投票:0回答:1

我看过多个帖子,说明可以使用记录值而不是全局 k 表上的键将 kafka 流与全局 k 表连接起来 https://kafka.apache.org/20/documentation/streams/developer-guide/dsl-api.html#kstream-globalktable-join

They allow for joining against foreign keys; i.e., you can lookup data in the table not just by the keys of records in the stream, but also by data in the record values.

这是否意味着可以使用全局 k 表的记录值而不是全局 k 表的键将流与全局 k 表连接起来。

例如:

我有两个对象/表 Order --> orderId, 订单金额 订单详情 --> orderDetailid, orderId, qty, price

Order 将被转换为带有键 orderId 的 kafka 流 OrderDetail 将被转换为具有键 orderDetailId

的全局 k 表

OrderId 是 OrderDetail 中的外键

是否可以使用 OrderDetail 的非键值对 Stream(Order) 和 GlobalKTable(OrderDetail) 执行连接 即:Order.orderId 与 OrderDetail.OrderId 的连接。 这里的目的是检索包含所有订单详细信息的订单列表

我查看了 KStreamKTableJoinProcessor 并注意到 process() 方法总是在全局 k 表上搜索键。 我知道可以选择要在左侧(KStream)使用的键,但是在执行连接时是否可以从右侧(全局 K 表)选择一个记录值作为键。

一个解决方案是使用 orderId 作为新键重新创建全局 k 表,但我不希望这样做,因为那样只会在全局 K 表中创建一个 orderId 值。我正在尝试获取一对多关系

apache-kafka apache-kafka-streams
1个回答
0
投票

要回答您的问题-不,不可能使用表端的值进行

KStream
-
GlobalKTable
连接,您只能使用流中的值来匹配
GlobalKTable

的键
© www.soinside.com 2019 - 2024. All rights reserved.