Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不调用注册新架构的情况下填充CachedSchemaRegistryClient中的缓存?_Java_Apache Kafka_Spark Streaming_Avro_Confluent Platform - Fatal编程技术网

Java 如何在不调用注册新架构的情况下填充CachedSchemaRegistryClient中的缓存?

Java 如何在不调用注册新架构的情况下填充CachedSchemaRegistryClient中的缓存?,java,apache-kafka,spark-streaming,avro,confluent-platform,Java,Apache Kafka,Spark Streaming,Avro,Confluent Platform,我们有一个与Kafka集成的spark流媒体应用程序,我正在尝试对其进行优化,因为它会过度调用Schema Registry来下载Schema 数据的avro模式很少改变,目前我们的应用程序在记录进入时调用模式注册表,这太过分了 我从confluent遇到了一个很有希望的人。虽然在研究了它的实现之后,我不确定如何使用它的内置缓存来减少对Schema注册表的REST调用 上面的链接将带您进入源代码,这里我粘贴的是唯一一个与将模式附加到CachedSchemaRegistrCyclient缓存有关的

我们有一个与Kafka集成的spark流媒体应用程序,我正在尝试对其进行优化,因为它会过度调用Schema Registry来下载Schema

数据的avro模式很少改变,目前我们的应用程序在记录进入时调用模式注册表,这太过分了

我从confluent遇到了一个很有希望的人。虽然在研究了它的实现之后,我不确定如何使用它的内置缓存来减少对Schema注册表的REST调用

上面的链接将带您进入源代码,这里我粘贴的是唯一一个与将模式附加到CachedSchemaRegistrCyclient缓存有关的方法

public synchronized int register(String subject, Schema schema) throws IOException, RestClientException
{
    Object schemaIdMap;
    if(this.schemaCache.containsKey(subject)) {
        schemaIdMap = (Map)this.schemaCache.get(subject);
    } else {
        schemaIdMap = new HashMap();
        this.schemaCache.put(subject, (Map)schemaIdMap);
    }
    /*
     * let's call the above as the FIRST part of this method, below as the SECOND part
     */
    if(((Map)schemaIdMap).containsKey(schema)) {
        return ((Integer)((Map)schemaIdMap).get(schema)).intValue();
    } else if(((Map)schemaIdMap).size() >= this.identityMapCapacity) {
        throw new IllegalStateException("Too many schema objects created for " + subject + "!");
    } else {
        int id = this.registerAndGetId(subject, schema);
        ((Map)schemaIdMap).put(schema, Integer.valueOf(id));
        return id;
    }
}
此方法的目的是将模式注册到模式注册表以及本地缓存,并返回其schemaID;或者,如果架构在本地已经存在,则返回schemaID。如果我们注册的是一个全新的模式,那么这将非常有效

但是在一个场景中,一个模式已经在schema Registry中注册(在我们的情况下由另一个应用程序注册),我们只想将该模式放在CachedSchemareRegistrClient的本地缓存中,以便轻松快速地访问-我个人认为,到目前为止,这还不受支持,因此是否有一个没有定制的干净解决方案

我们考虑自己维护一个本地缓存,但如果confluent有什么可以提供的话,我们希望保留它作为最后的手段


任何建议/想法都将不胜感激,提前谢谢。

这方面有任何更新吗?@howard,你能得到更多的想法吗?如果有更新,将不胜感激:)。仍在寻找解决方案。这里有什么新消息吗?