多个elasticsearch python客户端将批量json数据发送到单个ES集群

问题描述 投票:1回答:1

我计划在每台ec2服务器(大约50-60 ec2服务器)上安装elasticsearch python客户端,将数据发送到我的单个ES集群。 每个python客户端都会每秒向ES集群发送批量json。总计 - 每秒50/60批量指数 每个批量json可以有最多~500个文件/ ~3-4 MB批量json。假设我使用20节点集群m4.large或更多。 我的问题是

  1. ES集群如何负载均衡来自不同服务器的请求?
  2. 来自不同服务器的请求如此频繁,这对我的系统有何影响?
  3. elasticsearch vs Curl到端点,哪个更好?
python elasticsearch elasticsearch-5
1个回答
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

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

3.与索引时间和群集内通信相比,编码和网络延迟要小得多,因此您选择哪一个并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.