web-dev-qa-db-ja.com

KafkaシリアライザーJSON

Kafka、シリアル化、JSONは初めてです

私が欲しいのは、プロデューサーがkafkaを介してJSONファイルを送信し、コンシューマーが元のファイル形式のJSONファイルを使用して操作することです。

JSONが文字列に変換され、文字列シリアライザーを介して送信され、コンシューマーが文字列を解析してJSONオブジェクトを再作成するように取得できましたが、これが効率的でないか、正しいメソッドであることが心配です(フィールドタイプが失われる可能性があります) JSONの場合)

そこで、JSONシリアライザーを作成し、それをプロデューサーの構成に設定することを検討しました。

ここでJsonEncoderを使用しました: Kafka:カスタムシリアライザーの作成

しかし、今プロデューサーを実行しようとすると、エンコーダーのtoBytes関数で、tryブロックが希望どおりの結果を返さないようです。

_try {
            bytes = objectMapper.writeValueAsString(object).getBytes();

        } catch (JsonProcessingException e) {
            logger.error(String.format("Json processing failed for object: %s", object.getClass().getName()), e);
        }
_

objectMapper.writeValueAsString(object).getBytes(); JSON obj(_{"name":"Kate","age":25}_)を受け取り、それを何にも変換しません。

これは私のプロデューサーの実行関数です

_List<KeyedMessage<String,JSONObject>> msgList=new ArrayList<KeyedMessage<String,JSONObject>>();   

    JSONObject record = new JSONObject();

    record.put("name", "Kate");
    record.put("age", 25);

    msgList.add(new KeyedMessage<String, JSONObject>(topic, record));

    producer.send(msgList);
_

何が足りないのですか?私の元のメソッド(文字列に変換して送信してからJSONオブジェクトを再構築する)は大丈夫ですか?それとも正しい方法ではありませんか?

ありがとう!

7
user3780651

うーん、なぜシリアル化/逆シリアル化のステップでデータが失われるのではないかと心配しているのですか?

あなたが持っている1つのオプションは、無料のオープンソースソフトウェアである Confluentのスキーマレジストリ に含まれているKafka JSONシリアライザーを使用することです(免責事項:私はConfluentで働いています)。その テストスイート は、開始するためのいくつかの例を提供し、詳細は シリアライザーとフォーマッター で説明されています。このJSONシリアライザーとスキーマレジストリ自体の利点は、それらがKafkaのプロデューサーおよびコンシューマークライアントとの透過的な統合を提供します。JSONの他に、必要に応じてApacheAvroもサポートされます。

IMHOこのセットアップは、開発者の利便性とJSONのKafka)と話すときの使いやすさの点で最良のオプションの1つですが、もちろんYMMVです!

4
Michael G. Noll

JSONであるイベント文字列を次のようなバイト配列に変換することをお勧めします。

byte [] eventBody = event.getBody();

これによりパフォーマンスが向上し、Kafka Consumerは、JSONを取り戻すのに役立つJSONパーサーも提供します。
さらに情報が必要な場合はお知らせください。

1
Bector2