簡體   English   中英

我是否需要在模式注冊表下為 kafka stream 更改日志主題注冊模式?

[英]Do i need to register schema for kafka stream changelog topic under schema registry?

我正在使用處理器 API 和 Kafka StreamDSL 實施 kafka stream 項目。 我在處理器中的進程 function 是

@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();
  }

最后這是我的自定義 EventSerializer class:

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);
  }
}

當處理器將事件放入 keyValueStore 時,我遇到了錯誤io.confluent.rest.exceptions.RestNotFoundException:找不到主題。 調試了一段時間后,我意識到這是因為序列化程序在序列化事件時出現了問題。 function public byte[] serialize(final String topic, final T record)中的主題是application id-store-changelog 即使我不知道為什么,這是卡夫卡的內在行為。 Serialzer 找不到此組合主題的架構,因此引發錯誤。 我是否需要為這個組合主題注冊模式,或者有什么方法可以將真正的消費者主題傳遞給已經注冊了模式的序列化器?

當你有new KafkaAvroSerializer(); ,它默認指向localhost:8081用於架構注冊表。

您不需要注冊(盡管可以),因為 Producer 將其作為序列化邏輯的一部分使用inner.serialize

注意:擴展KafkaAvroSerializer可能更有意義

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM