到达GlobalKTable主题的数据是否触发联接?

时间:2018-11-04 16:36:04

标签: apache-kafka-streams

我有两个主题,其中包含以下数据:

include_once("www.mywebsite.com/php/db_conn.php")

ClientId在这里只是一个UUID字符串。

configurationTopic很小,可以压缩,因为我们只关心任何客户端的最新配置。

userTopic将更大。我看不到如何按clientId进行分区,因为系统永远无法扩展。具有大量用户的客户端的性能将大大降低,因为所有消息都必须由单个使用者读取。

我需要做的是,只要我们得到一个更新的用户(创建,更新,删除),我都希望使用最新的ClientConfiguration重新处理该用户。如果ClientConfiguration得到更新,我需要为每个用户重新处理该配置。我确实意识到这可能会重新处理大量数据,但是只要可以将工作分散到多个消费者上就可以了。

我一直在考虑将ConfigurationTopic转换为全局KTable,这将允许我使用循环方法将用户划分为主题。但是,关于GlobalKTables如何工作的信息很少。

来自here

  

到达GlobalKTable的数据不会触发联接。

这是真的吗?如果是真的,我该如何设计此联接以执行所需的工作?

2 个答案:

答案 0 :(得分:3)

  

到达GlobalKTable的数据不会触发联接。

是的,这成立。

  

如果ClientConfiguration得到更新,我需要为每个用户重新处理该配置。

如果这表示您想要seekToBeginning()中的userTopic并重新读取此数据,则不能为此使用Kafka Streams的联接。


网络上有关联接的一些材料:

答案 1 :(得分:1)

  

如果ClientConfiguration得到更新,我需要为每个用户重新处理该配置。

我目前对GlobalKTable的理解是,实现这种行为的唯一方法是简单地(?)将每个用户再次发送到trait OptionExt { type Type; } impl<T> OptionExt for Option<T> { type Type = T; } type MyOption = Option<fn()>; fn foo(f: <MyOption as OptionExt>::Type) { f(); } fn main() { foo(|| {}); }

这正是Kafka Streams会做的,因此,不是Kafka Streams,这是您的工作。