Kafka 加入 - 我们如何实现它?
Kafka Joins - How can we achive it?
我在 Kafka 中有以下主题(每个 10 个分区)并且想按照下面的示例加入它们?有人可以建议如何做到这一点吗?
主题:“订单”
主题:“参考数据”
基本上,我们将所有订单和参考数据加载到哈希映射中,然后将它们连接起来。当有很多订单时,这会导致很多性能问题。我遇到了诸如 KTable/GlobalKTable 之类的事情,但不确定它在内部是如何运作的。
- KTable/GlobalKTable会加载堆内存中的所有数据?如果是,那么它将无助于保持 java 内存不足。
有人可以建议如何完成这种情况吗?
我建议将 referencedata 主题变成以 tickerString 为键的 KTable。这意味着您将拥有一个物化视图,当新的引用数据到达主题时,它会自动更新。这也意味着您可以使用键(即 tickerString)查询 KTable。然后您可以创建一个从订单主题消费的 KStream,并将此流连接到引用数据 KTable,并将生成的连接推送到一个新主题(即 merged_ref_orders)。
使用相同的密钥(即 tickerString)为参考数据 KTable 和订单主题设置密钥,这样您就不必使用 GlobalKTable。一个常规的 KTable(更具可扩展性)就足够了。将 KTable 与 Rocks DB 一起使用将使您的内存使用率非常低,因为它利用分区数据并将本地数据存储到您的 jvm 数据到 RocksDB。
两个官方融合示例如何将KStream加入/丰富到KTable:
https://github.com/confluentinc/kafka-streams-examples/blob/6.0.1-post/src/main/java/io/confluent/examples/streams/PageViewRegionLambdaExample.java
我在 Kafka 中有以下主题(每个 10 个分区)并且想按照下面的示例加入它们?有人可以建议如何做到这一点吗?
主题:“订单”
主题:“参考数据”
基本上,我们将所有订单和参考数据加载到哈希映射中,然后将它们连接起来。当有很多订单时,这会导致很多性能问题。我遇到了诸如 KTable/GlobalKTable 之类的事情,但不确定它在内部是如何运作的。
- KTable/GlobalKTable会加载堆内存中的所有数据?如果是,那么它将无助于保持 java 内存不足。 有人可以建议如何完成这种情况吗?
我建议将 referencedata 主题变成以 tickerString 为键的 KTable。这意味着您将拥有一个物化视图,当新的引用数据到达主题时,它会自动更新。这也意味着您可以使用键(即 tickerString)查询 KTable。然后您可以创建一个从订单主题消费的 KStream,并将此流连接到引用数据 KTable,并将生成的连接推送到一个新主题(即 merged_ref_orders)。
使用相同的密钥(即 tickerString)为参考数据 KTable 和订单主题设置密钥,这样您就不必使用 GlobalKTable。一个常规的 KTable(更具可扩展性)就足够了。将 KTable 与 Rocks DB 一起使用将使您的内存使用率非常低,因为它利用分区数据并将本地数据存储到您的 jvm 数据到 RocksDB。
两个官方融合示例如何将KStream加入/丰富到KTable: https://github.com/confluentinc/kafka-streams-examples/blob/6.0.1-post/src/main/java/io/confluent/examples/streams/PageViewRegionLambdaExample.java