【问题标题】:Unbelievably slow indexing in ElasticSearchElasticSearch 中令人难以置信的慢速索引
【发布时间】:2016-12-10 20:06:09
【问题描述】:

我们决定在我们的产品中加入搜索引擎。并比较 ElasticSearch 和 Solr。 当我们开始使用 Elastic 2.3.3 时。我们面临索引缓慢的问题。我们使用 Logstash 提供弹性数据,对具有 4000000 条记录的表进行索引需要 8 个多小时。表的物理大小接近 40GB。我们使用硬盘......是的,很遗憾。但是在同一台 PC 上,我们测试了 Solr,同样的操作需要 3 个小时。 可能我们在elastic的配置上搞错了? 而弹性的另一个时刻索引大小是表大小的两倍多,而 solr 索引只有 DB 大小的 8%。 当我们使用logstash在文件中输出数据时,速度非常快。

这里我们为elastic配置logstash的jdbc模块:

input { 
   jdbc {
        jdbc_driver_library => "F:\elasticsearch-2.3.3\lib\sqljdbc_4.0\enu\sqljdbc4.jar"
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        jdbc_connection_string => "jdbc:sqlserver://s_tkachenko\mssql2014:49172;databaseName=work"
        jdbc_user => "sa"
        jdbc_password => "__masked_password__"
        statement => "SELECT id, name FROM Contact"                     
        }
      }

我们只设置了 1 个分片,没有副本。

亲爱的社区,也许您有任何建议,因为只有在我们购买订阅后,对弹性的支持才会对我们有所帮助。但是购买订阅效果不佳的产品,我认为这不是一个好主意。 感谢您的关注,等待您的想法。

【问题讨论】:

  • 您可能想在Superuser 上问这个问题,因为这不是一个编程问题。请让版主将您的问题移到那里。

标签: elasticsearch logstash logstash-jdbc


【解决方案1】:

与此同时,您也可以在 logstash 中进行一些更改:

  • 使用以下命令指定工作人员计数:-w {WORKER_COUNT}。 cpu count * 2 在我的实验中是最好的。
  • 使用 -u {BUFFER_SIZE} 指定缓冲区大小。 512 最适合我。

您还可以为 elasticsearch 输出插件指定输出工作人员计数和刷新缓冲区:

output {
    elasticsearch {
        # elasticsearch hosts
        hosts => ["127.0.0.1"]
        # bulk message size
        flush_size => 512
        # output worker cpu core * 2
        workers => 8
    }
}

希望这些帮助。

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2014-12-28
    • 2016-03-01
    相关资源
    最近更新 更多