我们正在使用kafka流处理器来处理生产者提供给我们的一些数据。但是,我们很难正确处理键,而又不会导致看不见的字符或转换错误。密钥的架构如下'{"type": "string"}')
已经存在并且大部分有效的方法是这样配置流:
properties.put(
StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG,
Serdes.String().getClass());
properties.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG,
GenericAvroSerde.class);
final Serde<String> stringSerde = Serdes.String();
final Serde<GenericRecord> avroSerde = new
GenericAvroSerde();
boolean isKeySerde = false;
avroSerde.configure(
Collections.singletonMap(
AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG,
propFile.getProperty("SchemaRegistry")),
isKeySerde);
KStream<String, GenericRecord> stream =
streamsBuilder.stream(inputTopic);
这会导致键602看起来像\u0000\u0000\u0000\u0000R\u0006602
尝试在关键上使用Avro Serde会导致生成错误:
properties.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG,
GenericAvroSerde.class);
properties.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG,
GenericAvroSerde.class);
final Serde<String> stringSerde = new GenericAvroSerde();
stringSerde.configure(
Collections.singletonMap(
AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG,
propFile.getProperty("SchemaRegistry")), true);
final Serde<GenericRecord> avroSerde = new GenericAvroSerde();
boolean isKeySerde = false;
avroSerde.configure(
Collections.singletonMap(
AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG,
propFile.getProperty("SchemaRegistry")),
isKeySerde);
KStream<String, GenericRecord> stream =
streamsBuilder.stream(inputTopic);
这会导致生成错误:
incompatible types: io.confluent.kafka.streams.serdes.avro.GenericAvroSerde cannot be converted to org.apache.kafka.common.serialization.Serde<java.lang.String>
有人在构建流处理器时遇到了类似的问题吗?
谢谢, -瑞恩