【发布时间】:2023-03-15 17:01:01
【问题描述】:
我们有一个 SOLR 插件(一个特殊的 RequestHandler 用于我们的目的),它在启动时从 SOLR 获得两个回调,一个 RequestHandler.init 方法和一个 SolrCoreAware.inform(SolrCore core) 方法。在 SolrCoreAware.inform 方法中,我们启动了一个 Kafka 消费者。
问题在于,有时插件会在 SolrCloud 完成启动之前获取要处理的 Kafka 消息(它只是将其转发到另一个 SOLR 更新处理程序以进行索引)。在这种情况下,Solr 会在等待一段时间后抛出异常。只有当 SolrCloud 完成启动时,有没有办法在我的插件中回调某种类型,以便我可以延迟启动 Kafka 消费者直到那时?当然,我可以有一些技巧来引入基于固定时间的延迟,但希望系统可以告诉我可以初始化。
谢谢。
附:
我得到的异常如下:
Caused by: org.apache.solr.common.SolrException: 等待4000ms后没有找到注册leader,collection: taxonomy slice: shard1 在 org.apache.solr.common.cloud.ZkStateReader.getLeaderRetry(ZkStateReader.java:676) 在 org.apache.solr.common.cloud.ZkStateReader.getLeaderRetry(ZkStateReader.java:662) 在 org.apache.solr.update.processor.DistributedUpdateProcessor.setupRequest(DistributedUpdateProcessor.java:361) 在 org.apache.solr.update.processor.DistributedUpdateProcessor.setupRequest(DistributedUpdateProcessor.java:312) 在 org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd(DistributedUpdateProcessor.java:662) 在 org.apache.solr.handler.loader.JsonLoader$SingleThreadedJsonLoader$1.handle(JsonLoader.java:227) 在 org.apache.solr.common.util.JsonRecordReader$Node.handleObjectStart(JsonRecordReader.java:364) 在 org.apache.solr.common.util.JsonRecordReader$Node.parse(JsonRecordReader.java:289) 在 org.apache.solr.common.util.JsonRecordReader$Node.access$200(JsonRecordReader.java:154) 在 org.apache.solr.common.util.JsonRecordReader.streamRecords(JsonRecordReader.java:138) 在 org.apache.solr.handler.loader.JsonLoader$SingleThreadedJsonLoader.handleSplitMode(JsonLoader.java:205) 在 org.apache.solr.handler.loader.JsonLoader$SingleThreadedJsonLoader.processUpdate(JsonLoader.java:122) 在 org.apache.solr.handler.loader.JsonLoader$SingleThreadedJsonLoader.load(JsonLoader.java:110) 在 org.apache.solr.handler.loader.JsonLoader.load(JsonLoader.java:73) 在 org.apache.solr.handler.UpdateRequestHandler$1.load(UpdateRequestHandler.java:103) 在 org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:74) 在 org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143) 在 org.apache.solr.core.SolrCore.execute(SolrCore.java:1984) 在 com.aol.dmp.solr.kafka.SolrKafkaHandler.processDoc(SolrKafkaHandler.java:407)
【问题讨论】: