Создайте GenericRecord из объекта, созданного KafkaAvroDeserializer.deserialize(). ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Создайте GenericRecord из объекта, созданного KafkaAvroDeserializer.deserialize().

Сообщение Anonymous »

Я создал собственный десериализатор, потому что мне приходится слушать двух разных брокеров Kafka: один из них использует Avro, другой — обычную строку.

Код: Выделить всё

public class ConsumerKafkaDeserializer implements Deserializer {
private final KafkaAvroDeserializer kafkaAvroDeserializer;
private final StringDeserializer stringDeserializer = new StringDeserializer();

public ConsumerKafkaDeserializer(){
this.kafkaAvroDeserializer = new KafkaAvroDeserializer();
}
public ConsumerKafkaDeserializer(SchemaRegistryClient client) {
this.kafkaAvroDeserializer = new KafkaAvroDeserializer(client);
}
public ConsumerKafkaDeserializer(boolean useStringDeserializer) {
this.kafkaAvroDeserializer = null;
}

public String deserialize(String s, byte[] bytes) {
try{
if(this.kafkaAvroDeserializer != null){
return this.kafkaAvroDeserializer.deserialize(s, bytes).toString();
}
return this.stringDeserializer.deserialize(s, bytes);
} catch (Exception e) {
return this.stringDeserializer.deserialize(s, bytes);
}
}

@Override
public void close() {
// do nothing
}
}
Проблема в том, что когда он использует сообщение Avro, он печатает мусор вместе с реальным сообщением. Я подумываю о приведении объекта, возвращаемого kafkaAvroDesrializer.deserialize(), в GenericRecord, а затем вызвать из него .toString(), но я не знаю, как выполнить приведение. Пожалуйста, помогите мне.

Подробнее здесь: https://stackoverflow.com/questions/791 ... eserialize

Вернуться в «JAVA»