Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Kafka Streams-如何有效地连接大型非共分存储/主题_Apache Kafka_Apache Kafka Streams_Data Partitioning - Fatal编程技术网

Apache kafka Kafka Streams-如何有效地连接大型非共分存储/主题

Apache kafka Kafka Streams-如何有效地连接大型非共分存储/主题,apache-kafka,apache-kafka-streams,data-partitioning,Apache Kafka,Apache Kafka Streams,Data Partitioning,我们有一系列的网络活动 事件按(域,uid)分区 这里解释的所有事件都来自同一个域。有数千个域,流量非常不均匀(因此划分) 假设我们有来自一个未注册用户(uid1)的事件。 我们有来自同一个未注册用户的事件,这些事件来自一个单独的设备,该设备创建了一个新的uid(我们称之为uid2) 当我们在uid1上注册时,它会通过电子邮件(email1)注册。 稍后,从第二个设备登录,这样我们就可以知道两个UID来自同一个用户 发生这种情况时,我们可以在登录时检查状态存储中的用户标识符(例如电子邮件),以查

我们有一系列的网络活动

事件按(域,uid)分区

这里解释的所有事件都来自同一个域。有数千个域,流量非常不均匀(因此划分)

假设我们有来自一个未注册用户(uid1)的事件。 我们有来自同一个未注册用户的事件,这些事件来自一个单独的设备,该设备创建了一个新的uid(我们称之为uid2)

当我们在uid1上注册时,它会通过电子邮件(email1)注册。 稍后,从第二个设备登录,这样我们就可以知道两个UID来自同一个用户

发生这种情况时,我们可以在登录时检查状态存储中的用户标识符(例如电子邮件),以查看它是否存在,从而获得正确的用户

但是,由于它们是不同的UID,因此不会进行共分。仅按域而不是(域,uid)进行分区是不可取的

另外,这样一个用户存储的大小可能非常大,无法保存在每个应用程序实例中(数百万条记录),所以对于GlobalKTable存储来说可能太大了


如何解决这个问题

我想到的是,如果我们有对应于uid2的uid1,那么我们可以将uid1的用户数据存储在uid2实例上的本地KTable中。因为uid2总是指向该实例,所以我们只需要将uid1存储在该实例的KTable中(而不是全局KTable中)

因此,您可以在卡夫卡之外拥有一个全局存储,可能位于分布式内存中的键/值存储中。在收到uid2并且不知道用户但拥有电子邮件地址时,您会检查KTable,如果它不在那里,那么您会在Kafka之外的全局存储中查找它,然后将其存储在KTable中以备将来本地访问。从那时起,uid2的用户数据将始终位于其实例的本地

这样,当您第一次看到来自未知uid的新登录名时,您只需向key/value store支付网络调用的费用。

…作为kv store(uid->customerId)。似乎可以解决这个问题,并以合理的方式使用本地存储中的缓存。如果客户信息需要刷新,那么就有问题了,但我认为在我们的情况下,可以在外部完成。我会接受答案的。谢谢