【问题标题】:non-key join with GlobalTable vs Ktable-Ktable Join?GlobalTable 与 Ktable-Ktable 连接的非键连接?
【发布时间】:2019-07-09 07:34:48
【问题描述】:

我很好奇为什么非键连接适用于 GlobalKTtableKTable-KTable ?虽然我理解为什么我们不需要为globalKTable (BroadCast Join) 进行共同分区,但我不明白是什么启用了非键连接?任何人都可以大致了解正在发生的事情吗?

【问题讨论】:

  • 支持非键 KTable-KTable 连接是 WIP:cwiki.apache.org/confluence/display/KAFKA/…
  • 是的,我知道 :) !我想了解的是为什么使用 globalktable 是可能的。有什么区别...
  • 请看我下面的评论:对于stream-globalKtable 连接,连接仍然使用GlobalKTable 的主键——非键部分来自流...
  • 我看错了。然而,是什么让 globalktable 而不是 Kstream-kstream 可行?我知道这是细节,但是了解正在发生的事情非常有帮助......更好地了解如何使用 lib
  • 目前Kstream-kstream也不支持非key join ....

标签: apache-kafka-streams ksqldb


【解决方案1】:

GlobalKTable 和 KTable 都代表了 changelog 的抽象,但不同之处在于 KTable 是为每个分区的每个应用程序实例在本地创建的,而 GlobalKTable 填充来自每个应用程序实例上所有分区的全部数据。它在每个应用程序实例上复制整个数据,这意味着整个数据集可用于在每个实例上进行查询。因此它不需要共同分区,并且可以在整个表中进行查找。

在下面的例子中:

KStream<String, Long> left = ...;  // // KStream has string type key
GlobalKTable<Integer, Double> right = ...;   // GlobalKTable has integer type key

// Java 8+ example, using lambda expressions
KStream<String, String> joined = left.leftJoin(right,
    (leftKey, leftValue) -> leftKey.length(), /* derive a (potentially) new key by which to lookup against the table */
    (leftValue, rightValue) -> "left=" + leftValue + ", right=" + rightValue /* ValueJoiner */
  );

使用 KeyValueMapper 从左侧流中选择一个键,您可以使用它在 GlobalKTable 中查找,如下所示:

(leftKey, leftValue) -> leftKey.length(), /* select a (potentially) new key by which to lookup against the table */

GlobalKTable 便于连接,但价格昂贵,因为与 KTables 相比,它需要更多的存储空间,并且还会增加网络和 kafka 代理的负载。

【讨论】:

  • 我仍然不明白是什么使能够查看所有领域的能力???在不允许查看或加入非关键字段的 KTable-KTable 场景中缺少什么(大致)。我理解共同分区问题,但对我来说,这与非关键字段问题没有明确关系......否则你能不能把它说得更清楚一些......
  • 如果你去KStreamImpl链接,你可以看到它是如何工作的。 keyMapper 选择 GlobalKTable 的键,即 K2 和 KStreamKTableJoinProcessor 过程方法显示如何使用 valueGetter 获取具有键“k2”的记录。
  • 请注意,连接中的非关键部分 if 对于 stream:您从流记录值中提取属性,然后查找表(使用表的键)。 atm 不支持从表中获取非键属性。
猜你喜欢
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-27
  • 2018-12-28
  • 2021-12-03
相关资源
最近更新 更多