首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fastavro从Kafka反序列化Avro

使用fastavro从Kafka反序列化Avro
EN

Stack Overflow用户
提问于 2020-04-28 14:22:08
回答 1查看 1.2K关注 0票数 3

我正在构建一个从Kafka接收数据的应用程序。当使用Apache ( https://pypi.org/project/avro-python3/ )提供的标准avro库时,结果是正确的,但是,反序列化过程非常慢。

代码语言:javascript
复制
class KafkaReceiver:
    data = {}

    def __init__(self, bootstrap='192.168.1.111:9092'):
        self.client = KafkaConsumer(
            'topic',
            bootstrap_servers=bootstrap,
            client_id='app',
            api_version=(0, 10, 1)
        )
        self.schema = avro.schema.parse(open("Schema.avsc", "rb").read())
        self.reader = avro.io.DatumReader(self.schema)

    def do(self):
        for msg in self.client:
            bytes_reader = io.BytesIO(msg.value)
            decoder = BinaryDecoder(bytes_reader)

            self.data = self.reader.read(decoder)

在阅读为什么它这么慢的时候,我发现了fastavro,它应该快得多。我是这样使用的:

代码语言:javascript
复制
    def do(self):

        schema = fastavro.schema.load_schema('Schema.avsc')
        for msg in self.client:
            bytes_reader = io.BytesIO(msg.value)
            bytes_reader.seek(0)
            for record in reader(bytes_reader, schema):
                self.data = record

而且,由于使用Apache的librabry时一切正常,所以我希望使用fastavro时一切都会以相同的方式工作。然而,在运行这段代码时,我得到了

代码语言:javascript
复制
  File "fastavro/_read.pyx", line 389, in fastavro._read.read_map
  File "fastavro/_read.pyx", line 290, in fastavro._read.read_utf8
  File "fastavro/_six.pyx", line 22, in fastavro._six.py3_btou
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 3: invalid start byte

我通常不用Python编程,所以我不知道如何处理这个问题。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-29 23:18:44

fastavro.reader需要包含标头的avro文件格式。看起来您拥有的是一个没有头的序列化记录。我想你也许可以使用fastavro.schemaless_reader来阅读这篇文章。

因此,不是:

代码语言:javascript
复制
for record in reader(bytes_reader, schema):
    self.data = record

你会这样做:

代码语言:javascript
复制
self.data = schemaless_reader(bytes_reader, schema)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61473880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档