我是Kafka Streams的新手,我一直在阅读有关如何设置Kafka Streams应用程序的documentation。
我不清楚,如何处理数据 - 存储在内存中的内容以及存储在磁盘上的内容。我已经看到RocksDB在某处提到过,但在流文档中却没有。
我想解决的问题如下。我有2个Kafka主题,这两个键值存储类型都保留了每个键的最旧值。在我的流应用程序中,我想要加入这两个主题并将连接输出回kafka,以后可以被某个接收器使用。我担心的是,不清楚联接的执行方式。这两个主题都将包含GB数据,因此不可能适合Streams App内存。
答案 0 :(得分:3)
您可以将每个主题读作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