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



我计划在我的每台 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. 弹性搜索与卷曲到端点,哪个更好?

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

这取决于:

  • 您的 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

阿拉伯数字。 根据我的经验,您提到的数字应该可以通过集群进行管理。 您可能面临的第一个问题:批量拒绝(关于此的非常好的文章(。 你能用代码容忍它并重新发送失败的文档吗?通过设计批量查询,最好合并到单个队列,并让一个代理将它们发送到群集。集群将锁定它,如果它跟不上,就会节流。 最好是实验。

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

相关内容

  • 没有找到相关文章

最新更新