Apache Kafka Streams交互式查询 - 如何创建值为实体而非聚合的商店

时间:2017-07-17 08:40:09

标签: apache-kafka event-sourcing apache-kafka-streams

我有一个主题,它使用以下信息接收事件:

键 - > orderId(整数)

值 - > {"orderId" : aaa, "productId" : xxx, "userId" : yyy, "state" : "zzz"}(JSON包含订单的全部信息)

我想实现一个交互式查询,以通过orderId获取完整的订单信息。这个想法是能够从物化视图(Kafka Streams商店)获取订单的当前状态。

首先,我创建主题的KStream:

KStream<Integer, JsonNode> stream = kStreamBuilder.stream(integerSerde, jsonSerde, STREAMING_TOPIC);

然后我创建一个KTable将其分配给商店。问题是显然我只能创建值为聚合的商店,例如:stream.groupByKey().count("myStore");

我需要的商店应该有整个订单信息,而不是聚合。这可能吗?

1 个答案:

答案 0 :(得分:1)

您也可以直接将该主题视为KTable

KTable<Integer, JsonNode> stream = kStreamBuilder.table(integerSerde, jsonSerde, STREAMING_TOPIC, "store-name-for-IQ");

此常见问题解答也可能有所帮助:http://docs.confluent.io/current/streams/faq.html#how-can-i-convert-a-kstream-to-a-ktable-without-an-aggregation-step