Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否需要在schema registry下注册kafka stream changelog主题的架构?_Java_Apache Kafka_Apache Kafka Streams_Confluent Schema Registry - Fatal编程技术网

Java 我是否需要在schema registry下注册kafka stream changelog主题的架构?

Java 我是否需要在schema registry下注册kafka stream changelog主题的架构?,java,apache-kafka,apache-kafka-streams,confluent-schema-registry,Java,Apache Kafka,Apache Kafka Streams,Confluent Schema Registry,我正在使用处理器API和kafka StreamDSL实现kafka stream项目。 我在处理器中的处理功能是 @Override public void process(final String key, final T event) { keyValueStore.put(key, event); } 我的拓扑结构是 protected Topology buildTopology() { final StreamsBuilder builder = new Stream

我正在使用处理器API和kafka StreamDSL实现kafka stream项目。 我在处理器中的处理功能是

@Override
public void process(final String key, final T event) {
  keyValueStore.put(key, event);
}
我的拓扑结构是

 protected Topology buildTopology() {
    final StreamsBuilder builder = new StreamsBuilder();

    KeyValueBytesStoreSupplier storeSupplier = Stores.persistentKeyValueStore(stateStoreName);
    StoreBuilder<KeyValueStore<String, T>> storeBuilder =
        Stores.keyValueStoreBuilder(storeSupplier, Serdes.String(), Serdes.serdeFrom(
            new EventSerializer(streamProperties()),
            new EventDeserializer(streamProperties())));
    builder.addStateStore(storeBuilder);

    final KStream<String, T> stream = builder.stream(inputTopic);
    stream.process(() -> new Processor<>(stateStoreName), stateStoreName);
    stream.to(outputTopic);

    return builder.build();
  }
受保护的拓扑buildTopology(){
最终StreamsBuilder生成器=新StreamsBuilder();
KeyValueByTesstoreSupplierStoreSupplier=Stores.persistentKeyValueStore(stateStoreName);
StoreBuilder StoreBuilder=
Stores.keyValueStoreBuilder(storeSupplier,Serdes.String(),Serdes.serdeFrom(
新的EventSerializer(streamProperties()),
新的EventDeserializer(streamProperties());
builder.addStateStore(storeBuilder);
最终KStream流=builder.stream(inputTopic);
进程(()->新处理器(stateStoreName),stateStoreName);
流到(输出);
返回builder.build();
}
最后,这是我的自定义EventSerializer类:

public class EventSerializer<T extends SpecificRecordBase & SpecificRecord>
    implements Serializer<T> {
  private final KafkaAvroSerializer inner;

  public EventSerializer(Map<String, ?> properties) {
    inner = new KafkaAvroSerializer();
    configure(properties, false);
  }

  @Override
  public void configure(Map<String, ?> configs, boolean isKey) {
    inner.configure(EventSerdeConfig.withProducerConfig(configs), isKey);
  }

  @Override
  public byte[] serialize(final String topic, final T record) {
    return inner.serialize(topic, record);
  }
}
公共类事件序列化程序
实现序列化程序{
私人最终卡夫卡夫罗塞里泽内部;
公共事件序列化程序(映射属性){
内部=新KafkaAvroSerializer();
配置(属性,false);
}
@凌驾
公共无效配置(映射配置、布尔isKey){
内部配置(EventSerdeConfig.withProducerConfig(configs),isKey);
}
@凌驾
公共字节[]序列化(最终字符串主题,最终T记录){
返回内部。序列化(主题、记录);
}
}
当处理器将事件放入keyValueStore时,我点击了en errorio.confluent.rest.exceptions.RestNotFoundException:Subject not found。函数
publicbyte[]serialize(最终字符串主题,最终T记录)
中的主题是
application id store changelog
。这是卡夫卡的内心行为,尽管我不知道为什么。Serialzer找不到此组合主题的架构,因此引发错误。
我是否需要为此组合主题注册架构,或者是否有任何方法将真正的使用者主题传递给已注册架构的Serializer?

当您拥有
新的KafkaAvroSerializer()时
,它默认指向模式注册表的
localhost:8081

您不需要注册(尽管可以注册),因为生产者使用
internal.serialize将其作为序列化逻辑的一部分进行注册


注意:扩展KafkaAvroSerializer
可能更有意义

我意识到我们禁用了自动提交功能,这就是我们可能需要手动注册的原因。但是谢谢你!!