代码之家  ›  专栏  ›  技术社区  ›  Bikas Katwal

在对solr进行了几次成功的更新之后,抛出SolrException:java。util。同时发生的TimeoutException:无法连接到ZooKeeper

  •  0
  • Bikas Katwal  · 技术社区  · 7 年前

    我正在使用solr版本7.3.1,并将其与3个外部zookeeper节点一起使用。

    下面是其中一个节点的zookeeper配置,所有节点都有类似的配置:

    tickTime=2000
    
    initLimit=10
    syncLimit=5
    dataDir=/Users/<user>/zookeeper/zookdata/zk2/
    clientPort=2182
    
    server.1=localhost:2666:3666
    server.2=localhost:2667:3667
    server.3=localhost:2668:3668
    

    然后,我使用这3个节点来启动solr。在我的应用程序中,我使用 localhost:2182,localhost:2183 要连接到solr,请使用以下代码。

    List<String> zkHosts = Arrays.asList(solrZkHostPort.split(","));
        CloudSolrClient.Builder builder = new CloudSolrClient.Builder(zkHosts, Optional.empty());
        solrClient = builder.build();
    

    我正在使用多个spark执行器将文档更新为solr。在更新失败后,对于大约1100-1300条记录的更新,它可以正常工作,但以下情况除外:

    Caused by: org.apache.solr.common.SolrException: java.util.concurrent.TimeoutException: Could not connect to ZooKeeper localhost:2182,localhost:2183 within 10000 ms
        at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:183)
        at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:120)
        at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:110)
        at org.apache.solr.common.cloud.ZkStateReader.<init>(ZkStateReader.java:285)
        at org.apache.solr.client.solrj.impl.ZkClientClusterStateProvider.connect(ZkClientClusterStateProvider.java:155)
        at org.apache.solr.client.solrj.impl.CloudSolrClient.connect(CloudSolrClient.java:399)
        at org.apache.solr.client.solrj.impl.CloudSolrClient.requestWithRetryOnStaleState(CloudSolrClient.java:828)
        at org.apache.solr.client.solrj.impl.CloudSolrClient.request(CloudSolrClient.java:818)
        at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:194)
        at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:106)
        at com.package.SomeApplicationClass
        ... 16 more
    Caused by: java.util.concurrent.TimeoutException: Could not connect to ZooKeeper localhost:2182,localhost:2183 within 10000 ms
        at org.apache.solr.common.cloud.ConnectionManager.waitForConnected(ConnectionManager.java:232)
        at org.apache.solr.common.cloud.SolrZkClient.<init>(SolrZkClient.java:175)
        ... 26 more
    

    我也得到以下例外,但不确定这是否有任何意义:

    18/09/20 12:45:40 WARN ClientCnxn: Session 0x0 for server localhost/127.0.0.1:2183, unexpected error, closing socket connection and attempting reconnect
    
        java.io.IOException: Connection reset by peer
            at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
            at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
            at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
            at sun.nio.ch.IOUtil.read(IOUtil.java:192)
            at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
            at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:68)
            at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:366)
            at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)
    

    知道有什么问题吗?我是否需要更改zookeeper配置,或者更改我创建solr客户端的方式?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Bikas Katwal    7 年前

    没有错。

    我的spark工作是创建1000多个spark执行人,每个执行人都创建了solr客户,我没有关闭solr客户。执行器完成后关闭solrclient。

    推荐文章