Skip to content

Commit 50e09cf

Browse files
BBM89Ryan P
authored andcommitted
Performance enhancement by caching fastavro schema parsed on every message serialized & deserialized
1 parent 40dddd8 commit 50e09cf

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

confluent_kafka/avro/serializer/message_serializer.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
HAS_FAST = False
4141
try:
4242
from fastavro import schemaless_reader, schemaless_writer
43+
from fastavro.schema import parse_schema
4344

4445
HAS_FAST = True
4546
except ImportError:
@@ -79,7 +80,8 @@ def __init__(self, registry_client, reader_key_schema=None, reader_value_schema=
7980
def _get_encoder_func(self, writer_schema):
8081
if HAS_FAST:
8182
schema = writer_schema.to_json()
82-
return lambda record, fp: schemaless_writer(fp, schema, record)
83+
parsed_schema = parse_schema(schema)
84+
return lambda record, fp: schemaless_writer(fp, parsed_schema, record)
8385
writer = avro.io.DatumWriter(writer_schema)
8486
return lambda record, fp: writer.write(record, avro.io.BinaryEncoder(fp))
8587

@@ -169,9 +171,9 @@ def _get_decoder_func(self, schema_id, payload, is_key=False):
169171
if HAS_FAST:
170172
# try to use fast avro
171173
try:
172-
writer_schema = writer_schema_obj.to_json()
173-
reader_schema = reader_schema_obj.to_json()
174-
schemaless_reader(payload, writer_schema)
174+
fast_avro_writer_schema = parse_schema(writer_schema_obj.to_json())
175+
fast_avro_reader_schema = parse_schema(reader_schema_obj.to_json())
176+
schemaless_reader(payload, fast_avro_writer_schema)
175177

176178
# If we reach this point, this means we have fastavro and it can
177179
# do this deserialization. Rewind since this method just determines
@@ -180,7 +182,7 @@ def _get_decoder_func(self, schema_id, payload, is_key=False):
180182
payload.seek(curr_pos)
181183

182184
self.id_to_decoder_func[schema_id] = lambda p: schemaless_reader(
183-
p, writer_schema, reader_schema)
185+
p, fast_avro_writer_schema, fast_avro_reader_schema)
184186
return self.id_to_decoder_func[schema_id]
185187
except Exception:
186188
# Fast avro failed, fall thru to standard avro below.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy