使用avro架构将kafka使用者消息从字符串解码为avro

时间:2018-01-25 07:22:37

标签: apache-kafka kafka-consumer-api

我们将数据作为字符串发送给Kafka生产商,消费者的最终输出采用Avro Schema格式。

我需要使用avro架构解码最终输出。可以有人共享示例java代码来执行此操作。

2 个答案:

答案 0 :(得分:1)

按照以下步骤 -

1.从avro架构创建对象

java -jar /path/to/avro-tools-1.8.2.jar compile schema <schema file> <destination>

eg.
java -jar /path/to/avro-tools-1.8.2.jar compile schema user.avsc .

这将根据模式的命名空间

在包中生成相应的源文件
  1. 使用avro架构和上面生成的类反序列化 例如,如果上面的命令将源类创建为User.class,则反序列化数据,如下所示
  2. java -jar /path/to/avro-tools-1.8.2.jar compile schema <schema file> <destination>
    
    eg.
    java -jar /path/to/avro-tools-1.8.2.jar compile schema user.avsc .
    

答案 1 :(得分:0)

以下是我的解决方法:此代码将以Avro架构格式打印消费者消息。

 props.put("key.deserializer","org.apache.kafka.common.serialization.StringDeserializer");
 props.put("value.deserializer","io.confluent.kafka.serializers.KafkaAvroDeserializer");
 props.put("schema.registry.url", "http://kafka-.XXX");

 KafkaConsumer<String, avro_schema> consumer = new KafkaConsumer<>(props);

 consumer.subscribe(Arrays.asList("topic"));
 //infinite poll loop

 try {
      while (true) {

           ConsumerRecords<String, avro_schema> records = consumer.poll(200L);
           for (ConsumerRecord<String, avro_schema> record : records) {
                   System.out.println(record.value());

           }
      }
 }