多个Elasticsearch Python客户端将批量JSON数据发送到单个ES集群

时间:2018-09-11 18:55:26

标签: python elasticsearch elasticsearch-5

我计划在每台ec2服务器(大约50至60台ec2服务器)上使Elasticsearch python客户端将数据发送到单个ES集群。
每个python客户端将每秒发送大量json到ES集群。总计-每秒50/60散装指数
每个批量json最多可包含约500个文档/〜3-4 MB批量json。假设我正在使用20个节点群集m4.large或更多。

我的问题是

  1. ES群集如何平衡来自不同服务器的请求?
  2. 来自不同服务器的请求如此频繁,这将如何影响我的系统?
  3. elasticsearch vs Curl到端点,哪个更好?

1 个答案:

答案 0 :(得分:1)

根据我的经验 您应该使用特定的设置对其进行测试。

这取决于:

  • 您的ES集群有多大
  • 您的数据库大小有多大
  • 您有多少个副本
  • 您有多少个索引节点
  • 任何节点/分片识别ID
  • 您的文件有多大
  • 自定义标记化/索引编制的复杂程度
  • 您在发送文档方面是否遇到麻烦
  • 集群上还有多少其他查询在运行
  • 刷新间隔有多大

1。 在测试运行期间查看服务器中的数据

curl localhost:9200 / _cat / thread_pool?v = true

node_name name                active queue rejected
prodnode  bulk                     0     0        0
prodnode  fetch_shard_started      0     0        0
prodnode  fetch_shard_store        0     0        0
prodnode  flush                    0     0        0
prodnode  force_merge              0     0        0
prodnode  generic                  0     0        0
prodnode  get                      0     0        0
prodnode  index                    0     0        0
prodnode  listener                 0     0        0
prodnode  management               1     0        0
prodnode  refresh                  0     0        0
prodnode  search                   0     0        0
prodnode  snapshot                 0     0        0
prodnode  warmer                   0     0        0

2。 根据我的经验,您提到的内容应该可以按集群管理。 您可能会遇到的第一个问题:批量拒绝(really good article about this)。 您可以编码允许它并重新发送失败的文档吗?通过设计批量查询,可以更好地合并到单个队列中,并让一个代理将它们发送到集群。如果无法跟上,群集将锁定它或节流。 最好进行实验。

3。 与索引时间和集群内通信相比,编码和网络延迟要小得多,因此选择哪一个都没有关系。