Kafka Streams - Streams App中存储在内存和磁盘中的内容

时间:2017-08-23 08:38:58

标签: apache-kafka apache-kafka-streams

我是Kafka Streams的新手,我一直在阅读有关如何设置Kafka Streams应用程序的documentation

我不清楚,如何处理数据 - 存储在内存中的内容以及存储在磁盘上的内容。我已经看到RocksDB在某处提到过,但在流文档中却没有。

我想解决的问题如下。我有2个Kafka主题,这两个键值存储类型都保留了每个键的最旧值。在我的流应用程序中,我想要加入这两个主题并将连接输出回kafka,以后可以被某个接收器使用。我担心的是,不清楚联接的执行方式。这两个主题都将包含GB数据,因此不可能适合Streams App内存。

1 个答案:

答案 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