如何将kafka流从一种类型转换为另一种类型

时间:2019-11-12 00:13:10

标签: apache-kafka apache-kafka-streams

如何将KStream转换为另一个KStream?由于我的流中有多个转换,因此无法在配置中为DEFAULT_VALUE_SERDE_CLASS_CONFIG定义一个公共值。

我有一个用例,其中我从Kafka中读取json并根据JSON的少量属性进行一些处理,所有这些ClassA和ClassB都是中间的简单普通Java pojos。

final KStream<String, User> stream1 = builder.stream(inputTopic, Consumed.with(Serdes.String(), userSerde))
final KStream<String, ClassA> stream2 = stream1.map((k, v) -> new KeyValue<>(v.getId(), convertToClassA(v))))
final KStream<String, ClassB> stream3 = stream2.map((k, v) -> new KeyValue<>(v.getId(), convertToClassB(v))))
final KStream<String, Integer> stream3 = stream3.groupByKey().aggregate(...)
kTbl.toStream().to(outputTopic, Produced.with(Serdes.String(), Serdes.Integer()));

错误消息:

Caused by: org.apache.kafka.streams.errors.StreamsException:
  A serializer (key: org.apache.kafka.common.serialization.ByteArraySerializer / value: org.apache.kafka.common.serialization.ByteArraySerializer)
  is not compatible to the actual key or value type
  (key type: java.lang.String / value type: io.confluent.examples.streams.model.User).
Change the default Serdes in StreamConfig or provide correct Serdes via method parameters.

0 个答案:

没有答案