我是 Kafka Streams 的新手,我一直在阅读 documentation关于如何设置 Kafka Streams 应用程序。
不过,我不清楚数据是如何处理的——什么存储在内存中,什么存储在磁盘上。我在某处看到 RocksDB 提到过,但在流文档中没有。
我试图解决的问题如下。我有 2 个 Kafka 主题,都是键值存储类型,它们为每个键保留最旧的值。在我的流应用程序中,我想加入两个主题并将连接输出回 kafka,稍后可以由某些接收器使用。我担心的是不清楚如何执行连接。这两个主题都将有 GB 的数据,因此不可能适合 Streams App 内存。
最佳答案
您可以将每个主题阅读为 KTable
并进行表表连接:
KTable table1 = builder.table("topic-1");
KTable table2 = builder.table("topic-2");
KTable joinResult = table1.join(table2, ...);
joinResult.to("output-topic");
有关更多详细信息,请参阅:
http://docs.confluent.io/current/streams/developer-guide.html#ktable-ktable-join
另请查看示例:https://github.com/confluentinc/examples/tree/3.3.0-post/kafka-streams
对于运行时,这两个主题都将在 RocksDB 状态存储中具体化。 RocksDB 能够溢出到磁盘。另请注意,单个 RocksDB 实例只需要保存单个输入分区的数据。比较 http://docs.confluent.io/current/streams/architecture.html#parallelism-model
关于apache-kafka - Kafka Streams - Streams App 中存储在内存和磁盘中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834725/