我计划在我的每台 ec2 服务器(大约 50-60 台 ec2 服务器(上让 elasticsearch python 客户端将数据发送到我的单个 ES 集群。
每个 python 客户端每秒都会向 ES 集群发送批量 json。总计 - 每秒 50/60 个批量索引 每个批量
JSON 最多可以有 ~500 个文档/~ 3-4 MB 批量 json。假设我使用的是 20 个节点集群 m4.large 或更多。
我的问题是
- ES 集群如何对来自不同服务器的请求进行负载均衡?
- 来自不同服务器的请求如此频繁,这将如何影响我的系统?
- 弹性搜索与卷曲到端点,哪个更好?
根据我的经验 您应该使用您的特定设置对其进行测试。
这取决于:
- 您的 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. 与索引时间和群集内通信相比,编码和网络延迟要小得多,因此选择哪一个并不重要。