2016-11-06 6 views
1

カフカトピックの内容をコンソールにダンプするための簡単なJavaツールを作成しています。 Kafkaレコードの値は、Avroオブジェクトになります。 Avroデータを人間が読める形式でダンプできるようにしたい。私はバイト配列として持っている1つのAvroオブジェクトの内容を人間が読める形式に印刷する方法があるかどうかを知りたいですか?私はアブロオブジェクトバイトに関連付けられたスキーマを知ることなくmyAvroDataAsBytesの内容を印刷する方法を探しています上記のスニペットにおいてスキーマのないダンプAvroバイト

KafkaConsumer<String, byte[]> kafkaConsumer = createConsumer(); //Create a consumer with my config 

ConsumerRecords<String, byte[]> records = kafkaConsumer.poll(200); 

for (ConsumerRecord<String, byte[]> record : records) { 
    byte[] myAvroDataAsBytes = record.value(); 
    //TODO: How do I print these bytes without knowing the schema? 
} 

答えて

1

documentationに記載されているように、スキーマを提供せずにデータを解析することはできません。

[...] Avroデータ自体はタイプ情報でタグ付けされていません。データを解析するにはスキーマ が必要です。

protobufとは異なり、Avroはシリアル化されたデータにフィールド情報を格納しません。これは回避できない設計上の選択です。

多くの記事は、このアプローチの賛成論点&について書かれています。 Schema evolution in Avro, Protocol Buffers and ThriftによってMartin Kleppmannは物事がどのようにボンネットの下で働くか、そしてそれが必要とするものを理解するのに非常に良い紹介です。

+1

ありがとう、私は答えを受け入れ、これを先に進めました。しかし、実際にはスキーマを持っているコンテナファイルのコンセプトがあるので、自分でスキーマを知らなくても読むことができるという答えを追加したいと思います。カフカにAvroメッセージを書く場合、あなたが指摘した個々のメッセージはスキーマを持たないでしょう。ありがとう。 –

関連する問題