Ich habe ein veraltetes C++ - basiertes System, das binär kodierte Avro-Daten ausspuckt, die das konfluente Avro Schema-Registry-Format unterstützen. In meiner Java-Anwendung konnte ich die Nachricht mithilfe der KafkaAvroDeserializer-Klasse erfolgreich deserialisieren, konnte die Nachricht jedoch nicht ausdrucken.Kann Kafka Avro decodierte Nachricht nicht drucken
private void consumeAvroData(){
String group = "group1";
Properties props = new Properties();
props.put("bootstrap.servers", "http://1.2.3.4:9092");
props.put("group.id", group);
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("session.timeout.ms", "30000");
props.put("key.deserializer", LongDeserializer.class.getName());
props.put("value.deserializer", KafkaAvroDeserializer.class.getName());
// props.put(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG,"false");
props.put("schema.registry.url","http://1.2.3.4:8081");
KafkaConsumer<String, GenericRecord> consumer = new KafkaConsumer<String, GenericRecord>(props);
consumer.subscribe(Arrays.asList(TOPIC_NAME));
System.out.println("Subscribed to topic " + TOPIC_NAME);
while (true) {
ConsumerRecords<String, GenericRecord> records = consumer.poll(100);
for (ConsumerRecord<String, GenericRecord> record : records)
{
System.out.printf("value = %s\n",record.value());
}
}
}
Der Ausgang ich erhalte, ist
{"value":"�"}
Warum ist, dass ich nicht die entserialisierten Daten drucken kann? Jede Hilfe wird geschätzt!
Vielen Dank für Ihre Antwort! Ich habe versucht, das Byte-Array manuell zu analysieren (ohne Confluent Deserializer) und ich kann das magische Byte, Schema ID drucken, aber aus irgendeinem Grund kann ich die Daten nicht drucken. – KarthikJ
Diese Daten sind in einem binären Format. Sie können es nicht ausdrucken. Passt die Schema-ID zu etwas, das in Ihrer Schemaregistry für dieses Thema konfiguriert ist? –
Ja. Bei der alternativen Methode verwende ich die AVSC-Datei, um die eingehenden geparsten Daten zu dekodieren, und dann versuche ich, das GenericRecord auszudrucken. Ich konnte das erste Byte als das magische Byte, 2,3,4,5 Bytes als Schema-ID und den Rest (6 bis die Länge des Arrays-1) sehen, ich behandle es als Daten und benutze Avro bytearray deserializer, um die Daten – KarthikJ