ホームページ >バックエンド開発 >Golang >逆シリアル化/解析エラー KafkaProtobuf Python

逆シリアル化/解析エラー KafkaProtobuf Python

PHPz
PHPz転載
2024-02-09 23:48:091129ブラウズ

反序列化/解析错误 KafkaProtobuf Python

php エディタ Xinyi では、KafkaProtobuf Python の逆シリアル化/解析エラーという一般的なエラーを紹介します。 KafkaProtobuf Python ライブラリを使用すると、逆シリアル化または解析エラーに関する問題が発生する可能性があります。これは、メッセージのシリアル化形式とコンシューマー コードの間の不一致、またはメッセージの形式が不正であることが原因である可能性があります。この問題に対する解決策には、メッセージのシリアル化形式とコンシューマ コードの互換性をチェックすることや、メッセージが適切な形式であることを確認することが含まれます。この記事では、同様のエラーの解決に役立つことを願って、この問題の原因と解決策について詳しく説明します。

質問内容

シリアルコード(Go言語)

###1。プロデューサー### リーリー

2.Kafka メッセージを送信する

リーリー

メッセージを使ってみる (Diff、Python のアプリ)

リーリー ###間違い###

メッセージ解析エラー

デバッグしようとしていますが、できません。

両方のアプリケーションの proto ファイルは同じです

私は
    proton
  1. を使用して pb2 ファイルを生成します。
  2. ###ご協力いただきありがとうございます。 ###ありがとう### メッセージを元の形式で取得できます:
オリジナル形式のメッセージ。

元のメッセージ データ: b'\x00\x00\x00\x00\x02\x02\x08\n$1775100a-1a47-48b2-93b7-b7a331be59b4\x12\tcompleted'

UTF-8 を使用してデコードしようとしましたが、すべてのフィールドが読み取られなかったために失敗しました。

リーリー 上記のコードの出力:

func NewProducer(kafkaBrokerURL string, kafkaSchemaRegistryUrl string) {
    producerConfig := getKafkaProducerConfig(config.EnvConfig)

    producer, err := confluent_kafka.NewProducer(producerConfig)
    if err != nil {
        log.WithFields(log.Fields{"err": err}).Error("Failed to create Kafka Producer")
        log.Panicf("Unable to create Kafka Producer")
    }

    client, err := schemaregistry.NewClient(schemaregistry.NewConfig(kafkaSchemaRegistryUrl))
    if err != nil {
        log.WithFields(log.Fields{"err": err}).Error("Failed to create Kafka Client")
        log.Panicf("Unable to create Kafka Client")
    }

    serializer, err := protobuf.NewSerializer(client, serde.ValueSerde, protobuf.NewSerializerConfig())
    if err != nil {
        log.WithFields(log.Fields{"err": err}).Error("Failed to create Kafka Serializer")
        log.Panicf("Unable to create Kafka Serializer")
    }

    KafkaProducerInstance = &KafkaProducer{
        producer:   producer,
        serializer: serializer,
    }

    log.Info("Created Kafka Producer and Serializer")
}

    回避策
  • Go クライアントはシリアル化にスキーマ レジストリを使用しています。つまり、Python コードでも同じことを行う必要があります。スキーマ ID もバイト単位でエンコードされているため、これらのレコードは「Protobuf だけではない」ため、通常の Protobuf パーサーは失敗します。

リポジトリには、レジストリ統合で Protobuf を使用するためのサンプル コードがあります

https://github.com/confluenceinc /confluence-kafka-python/blob/master/examples/protobuf_consumer.py

以上が逆シリアル化/解析エラー KafkaProtobuf Pythonの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。