【发布时间】:2019-11-18 05:29:15
【问题描述】:
我正在尝试理解以下提到的解决方法:
https://issues.apache.org/jira/browse/KAFKA-3705
如
如今,在 Kafka Streams DSL 中,KTable 连接仅基于键。如果 用户想通过 key a 加入一个 KTable A 和另一个 KTable B 通过 key b 但使用“外键”a,并假设它们是从两个主题中读取的 它们分别在 a 和 b 上分区,它们需要执行 以下模式:
tableB' = tableB.groupBy(/* select on field "a" */).agg(...); // now tableB' is partitioned on "a" tableA.join(tableB', joiner);
我很难理解到底发生了什么。
这句话特别令人困惑:“如果用户想通过键 a 加入另一个 KTable B,但通过键 b 但使用“外键”a”。我也不明白上面的代码。
有人可以澄清一下这里发生了什么吗?
这里也提到了:
缩小流中KTables的语义和关系数据库中的表之间的差距。通常的做法是在对 RDBMS 中的表进行更改时将更改捕获到 Kafka 主题(JDBC-connect、Debezium、Maxwell)中。这些实体通常具有多个一对多的关系。通常,RDBMS 提供了很好的支持来通过连接解决这种关系。 Streams 在这里不足,解决方法 (group by - join -lateral view) 也没有得到很好的支持,并且不符合基于记录的处理的想法。 https://cwiki.apache.org/confluence/display/KAFKA/KIP-213+Support+non-key+joining+in+KTable
什么意思(分组-加入-横向视图)?我怀疑它与上面的代码有关,但又有点难以理解。任何人都可以对此有所了解吗?
【问题讨论】:
标签: apache-kafka apache-kafka-streams