是否可以使用Spring Cloud Stream API聚合字符串的对象实例?

时间:2018-11-07 06:04:02

标签: apache-kafka-streams spring-cloud-stream spring-kafka

我想使用Spring Cloud Stream API汇总主题中的事件。 因此,我使用KStream作为输入。

KStream<Object, LoggerCreatedMessage>

现在,我想使用聚合器将新对象存储在KeyValue存储中,因此我使用以下代码:

input
  .map((key, value) -> {
    return new KeyValue<>(value.logger_id,value);
  })
  /*.groupBy(
    (s, loggerEvent) -> loggerEvent.logger_id,
    Serialized.with(null, loggerEventSerde))*/
  .groupByKey()
  .aggregate(
    String::new,
    (s, loggerEvent, vr) -> {
      return vr;
    },
    Materialized.<String, String, KeyValueStore<Bytes, byte[]>>as(STORE_NAME).withKeySerde(Serdes.String()).
      withValueSerde(Serdes.String())
  );

为什么我只能使用字符串作为初始化程序,否则无法使用任何对象?

我想使用LoggerDomain :: new,而不是String :: new,但我只收到以下错误消息:

  

方法参考中的错误返回类型:无法将LoggerDomain转换为VR

我想念什么吗?

1 个答案:

答案 0 :(得分:0)

您通过<key,value><String, String>定义为Materialized.<String, String, KeyValueStore<Bytes, byte[]>> -如果您的值类型应为LoggerDomain,则应为Materialized.<KeyType, LoggerDomain, KeyValueStore<Bytes, byte[]>>()

请注意,在这种情况下,您还需要为Serde提供LoggerDomain的自定义Materialized