我有两个主题,其中包含以下数据:
include_once("www.mywebsite.com/php/db_conn.php")
ClientId在这里只是一个UUID字符串。
configurationTopic很小,可以压缩,因为我们只关心任何客户端的最新配置。
userTopic将更大。我看不到如何按clientId进行分区,因为系统永远无法扩展。具有大量用户的客户端的性能将大大降低,因为所有消息都必须由单个使用者读取。
我需要做的是,只要我们得到一个更新的用户(创建,更新,删除),我都希望使用最新的ClientConfiguration重新处理该用户。如果ClientConfiguration得到更新,我需要为每个用户重新处理该配置。我确实意识到这可能会重新处理大量数据,但是只要可以将工作分散到多个消费者上就可以了。
我一直在考虑将ConfigurationTopic转换为全局KTable,这将允许我使用循环方法将用户划分为主题。但是,关于GlobalKTables如何工作的信息很少。
来自here:
到达GlobalKTable的数据不会触发联接。
这是真的吗?如果是真的,我该如何设计此联接以执行所需的工作?
答案 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,这是您的工作。