Kafka Streams物化商店构建错误

时间:2019-01-06 14:30:06

标签: java apache-kafka apache-kafka-streams

我正在尝试在此处构建Materialized.as DSL代码:https://kafka.apache.org/11/javadoc/org/apache/kafka/streams/state/Stores.html

但是我遇到了错误

incompatible types: org.apache.kafka.common.serialization.Serde<java.lang.Long> cannot be converted to org.apache.kafka.common.serialization.Serde<java.lang.Object>

在线

.withKeySerde(Serdes.Long())

有人知道这可能是什么问题吗?

final StreamsBuilder builder = new StreamsBuilder();

   KeyValueBytesStoreSupplier storeSupplier = Stores.inMemoryKeyValueStore("mystore");
   KTable<Long,String> dataStore = builder.table(
     "example_stream",
     Materialized.as(storeSupplier)
             .withKeySerde(Serdes.Long())
             .withValueSerde(Serdes.String()));

2 个答案:

答案 0 :(得分:1)

问题是<Object,Object>不知道默认为KTable<Long,String> dataStore = builder.<Long,String>table( "example_stream", Materialized.as(storeSupplier) .withKeySerde(Serdes.Long()) .withValueSerde(Serdes.String())); 的通用类型。后来,Serde类型不匹配。您需要指定类似

的类型
<script src="js/chartjs-plugin-annotation.js"></script>

答案 1 :(得分:0)

如果没有代码示例,我无法确定,但是错误消息非常清楚。您正在向Kafka指定密钥的类型为Long。但是,您的密钥实际上是其他一些Java对象。例如,如果您有一条带有String键的消息,则此代码将更改为:.withKeySerde(Serdes.String())。检查密钥的类型,并为该类型指定正确的Serde