You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by Greg Fodor <gf...@gmail.com> on 2017/07/10 17:43:27 UTC

Contention on CachedSchemaRegistryClient#getBy*

We've noticed that there's a lot of contention on get/set of schemas by ID
in CachedSchemaRegistryClient if that object is shared across threads. All
of the methods on CachedSchemaRegistryClient are synchronized and
getBySubjectAndId is called when deserializing a record:
https://github.com/confluentinc/schema-registry/blob/master/avro-serializer/src/main/java/io/confluent/kafka/serializers/AbstractKafkaAvroDeserializer.java#L122

It seems like a good idea to make a thread-local variant of this data
structure, or perhaps make the entire thing be backed by thread local
storage. The cost would be memory but it seems safe to do and would remove
contention on the registry object across threads. We've implemented a
simple thread local schema registry to do this but wanted to get community
feedback on the best way to factor this before submitting a PR.