Я использую Kafka для десериализации сообщений Avro.Для этого программа должна извлечь соответствующую схему из реестра схем.Потоковое приложение реализовано в виде процессора Nifi, который работает сам по себе.Проблема в том, что после каждого потока запрашивается новая схема.Кажется, что никакая схема не кэшируется.
Эта часть журнала здесь является проблемой:
2019-04-16 22:08:51,333 INFO [Timer-Driven Process Thread-2] i.c.k.s.KafkaAvroDeserializerConfig KafkaAvroDeserializerConfig values:
schema.registry.url = [http://localhost:8081]
max.schemas.per.subject = 1000
specific.avro.reader = false
При вызове CachedSchemaRegistryClient можно подумать, что схемы кэшируются автоматически?
private SchemaRegistryClient schemaRegistryClient;
this.schemaRegistryClient = new CachedSchemaRegistryClient(schemaUrl, 1000);
Таким образом, когда требуется схема, ее вызывает вызов со следующим
return schemaRegistryClientProvider.getSchemaRegistryClient().getByID(avroSchemaId);
.Но каждый раз мы делаем новый запрос GET.
В противном случае процессор работает как положено.Просто все эти дополнительные звонки в Schemaregistry являются огромным бременем со временем.Буду признателен за любые предложения
РЕДАКТИРОВАТЬ:
Кэш работает как задумано.Это была просто проблема инициализации, из-за которой он перезагружал URL схемы в каждом onTrigger ().