我想使用 Avro 来标准化二进制格式,以便跨不同应用程序进行对象序列化。应用程序本身不会使用 Avro RPC 进行通信。可能会使用像 ZeroMQ 这样的东西。
我正在尝试编写一个简单的原型,其中 Python 客户端与 Scala 服务器对话。我对 Scala 方面没有问题,但我不太确定在 Python 方面该怎么做。我尝试按照官方指南以及许多博客文章进行操作。
在指南和我找到的帖子中,示例仅显示如何从文件写入/读取,或如何通过 Avro 进行 RPC。我希望能够编写某个对象的 Avro 字节表示
我可以在发送端和接收端部署模式的副本,但模式本身不应该传播,因为消息将是原子的,我不希望在每个请求上发送模式的开销.
python avro 库是否可以实现上述功能?
使用fastavro:
import fastavro
import io
# read serialized data:
schema = get_my_schema()
message = fastavro.schemaless_reader(io.BytesIO(input_bytes), schema)
# optionally add reader_schema parameter:
message = fastavro.schemaless_reader(io.BytesIO(input_bytes), writer_schema, reader_schema)
# write data:
binary_output = io.BytesIO()
schema = get_my_schema()
fastavro.schemaless_writer(binary_output, schema, object_to_serialize)
其中
input_bytes
是序列化的Avro记录没有模式