Kafka KTable将一个值添加到“内存存储”中

时间:2018-10-02 23:52:22

标签: apache-kafka apache-kafka-streams

是否可以在Kafka Streaming中向商店添加值,我想做的是,如果主题中出现另一条具有相同ID的消息,那么我会将消息作为值添加到列表中

类似的东西:

ID为1的第一次流迭代

ID | Messages
1  | [1]

ID 1的第二次流迭代,然后更新密钥1的值

ID | Messages
1  | [1,2]

更新代码

以下内容正常工作,但是我现在需要将自定义对象发送到主题中,然后追加到列表中,但是我无法将自定义Message对象添加到ArrayList中

KStream<String, String> textLines = builder.stream("processed-conv");

KTable<String, ArrayList<String>> conversations1 = textLines
                        .groupBy((key, message) -> message)
                          .aggregate( ArrayList<String>::new,
                                     (k, v, a) -> {
                                         a.add(v);
                                         return a;
                                     }, myStateStoreProvider );


//then  I am able to query the store later with the below
    ReadOnlyKeyValueStore<String, ArrayList<String>> keyValueStore =
                        streams.store("StateStore2", QueryableStoreTypes.keyValueStore());

KeyValueIterator<String, ArrayList<String>> storeIterator = keyValueStore.all();
                while (storeIterator.hasNext()) {
                  KeyValue<String, ArrayList<String>> next = storeIterator.next();
                  System.out.println("messages for " + next.key + ": " + next.value);
                }

0 个答案:

没有答案