【问题标题】:Python HTTP POST requests serialized in AVRO在 AVRO 中序列化的 Python HTTP POST 请求
【发布时间】:2020-12-16 17:11:03
【问题描述】:

我正在尝试通过 HTTP 请求使用 python 脚本向 Apache NiFi 发送数据。我可以毫无问题地以 JSON 格式发送它,但我试图在 AVRO 中对其进行序列化。 我的尝试之一是在下面的代码中(代码的输出是 requests* 行的 Response[405])。

import requests
import avro.schema
from avro.datafile import DataFileReader, DataFileWriter
from avro.io import DatumReader, DatumWriter

json = {'fname':'Foo','lname':'Bar','sex':'m','year':1900}
SCHEMA_PATH = r"<PATH_TO_AVSC>\user.avsc"
URL = <URL_TO_NIFI_LISTENHTTP>
schema = avro.schema.parse(open(SCHEMA_PATH, "rb").read())
import io
buf = io.BytesIO()
writer = DataFileWriter(buf, DatumWriter(), schema)
writer.append(json)
writer.flush()
buf.seek(0)
msg = buf.read()
requests.post(URL, data = msg)

是否可以在不创建和发送文件的情况下发送 AVRO 序列化消息,类似于我的尝试,以及我哪里出错了?

使用 AVRO 代替 JSON 有什么大的优势吗?最后,我可以将消息作为 JSON 传输,但我想在 AVRO 中完成。

【问题讨论】:

    标签: python http httprequest apache-nifi avro


    【解决方案1】:

    是否可以在不创建和发送文件的情况下发送 AVRO 序列化消息,类似于我的尝试,以及我哪里出错了?

    在 avro 中序列化数据的结果只是一个二进制字符串,因此您应该能够将该二进制字符串发送到服务器并让服务器对其进行反序列化。我不确定你的服务器代码在做什么,所以我无法帮助解释 405 错误。

    使用 AVRO 代替 JSON 有什么大的优势吗?最后,我可以将消息传输为 JSON,但我想在 AVRO 中完成。

    使用 Avro 通过网络传输的数据量应该更少(尤其是在一次发送多条记录的情况下)。您可以决定带宽差异是否足够显着以使其值得。

    【讨论】:

    • 原来我收到了响应消息,因为我在同一个端口上有 2 个 ListenHTTP 处理器。关闭一个后,我得到一个常规的“200”响应。我必须对它进行更多调查,并花更多时间在 NiFi 上......
    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 2017-11-28
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多