apache-kafka - SchemaRegistryClient 缓存不起作用,不必要的 Schemaregistry GET 请求是问题所在,
问题描述
我正在使用 Kafka 反序列化 Avro 消息。为此,程序应该从 Schema 注册表中提取相应的 Schema。流媒体应用程序被实现为一个 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);
因此,当需要 Schema 时,调用以下内容
return schemaRegistryClientProvider.getSchemaRegistryClient().getByID(avroSchemaId);
正在供应它。但是每次我们发出一个新的 GET 请求。
否则处理器按预期工作。随着时间的推移,所有这些对 Schemaregistry 的额外调用都是一个巨大的负担。任何建议,将不胜感激
编辑:
缓存按预期工作。这只是一个初始化问题,导致它在每个 onTrigger() 处重新加载模式 URL。
解决方案
检索模式的代码似乎不正确。
SchemaRegistryClient 接口只有两个方法:
RecordSchema getSchema(String schemaName) throws IOException, SchemaNotFoundException;
RecordSchema getSchema(int schemaId) throws IOException, SchemaNotFoundException;
我不确定 getByID 方法的来源,但我认为您通过不同的代码路径以某种方式绕过缓存。
推荐阅读
- cloud - Velodyne 激光雷达实时解码
- c++ - 如何在 Minecraft 服务器上执行命令
- c# - 如何绑定 LostFocus 和 GotFocus 事件以查看模型命令?
- ios - 创建自己的可可豆荚
- html - 将 HTML 过滤器应用于 nvarchar(max) 列上的 FREETEXT SQL 查询
- python - scikit-learn - 预测模型返回“错误”预测
- firebase - 没有匹配结果的 Flutter Firestore 查询导致使用 orderBy 时查询挂起
- c++ - 聚合初始化,将成员指针设置为相同的结构成员
- github - 从我的 GitHub 帐户中删除公共存储库
- javascript - 我想使用 jquery 从数据库中选择值并在同一页面上返回