通用类型的 Kafka Streams Serdes

问题描述 投票:0回答:0

我为 Kafka 流写了一个 Serde。我的 Serde 类具有通用类型。当我在 API 方法中显式传递它(覆盖默认值)时它工作正常但是当我通过

Properties
指定它以将其设置为默认值时它不起作用。

所以我查看了docs,它确实告诉我我不能这样做:

如果通过

Serde
指定了
Properties
,则
Serde
类不能有泛型类型,即不能使用类
MySerde<T extends Number> implements Serde<T>
。这意味着您不能使用通过
Serde
创建的任何
Serdes.serdeFrom(Serializer<T>, Deserializer<T>)
。由于 Java 类型擦除,仅支持完全类型化的
Serde
类,如
MySerde implements Serde<MyCustomType>

好的,好的。然而,有 SpecificAvroSerde

Properties
中指定时工作得很好,就像这样:

streamsConfiguration.put(StreamsConfig.VALUE_SERDE_CLASS_CONFIG, SpecificAvroSerde.class);

这是来自 GitHub 的类定义的前几行

public class SpecificAvroSerde<T extends org.apache.avro.specific.SpecificRecord> implements Serde<T> {
  private final Serde<T> inner;

  public SpecificAvroSerde() {
    inner = Serdes.serdeFrom(new SpecificAvroSerializer<T>(), new SpecificAvroDeserializer<T>());
  }

这不是与文档直接矛盾吗?为什么

SpecificAvroSerde
Properties
中指定为默认值时工作得很好?

java apache-kafka apache-kafka-streams confluent-platform
© www.soinside.com 2019 - 2024. All rights reserved.