现在,我们使用JSON格式向Kafka进行消息传递,现在我将使用Schema Registry将ser / deser格式更改为Avro。 也许我想要很多,但是我的要求是:
我做到了:
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, LongSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, MyCustomAvroSerializer.class);
props.put("schema.registry.url", "http://localhost:8081");
props.put("value.subject.name.strategy", TopicRecordNameStrategy.class);
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, MyCustomAvroDeserializer.class);
props.put(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG, true);
props.put("schema.registry.url", "http://localhost:8081");
在那种情况下,两个POJO都正确地反序列化为BasicMessage,这对我有好处。但是,然后我检查了向后兼容性-在POJO之一中添加了具有默认值的新字段,并且已经使用更新的方案再次使用了消息(它变成了读取器模式),在反序列化期间出现异常。
所以,问题是: