在 elasticsearch 2.4 中跨节点分发批量摄取

Distributing bulk ingest across nodes in elasticsearch 2.4

我目前 运行 一个 10 节点 Elasticsearch 2.4 集群,并通过 PutElasticsearch 处理器使用 Apache Nifi 批量摄取数据。

我很好奇 Elasticsearch 在将负载分配到所有节点时如何处理摄取(批量摄取)。如果我只在我的 Elasticsearch 集群中的主节点上执行批量摄取命令,那么该主节点是否知道将摄取负载分配到集群中我的所有其他节点,比如循环类型策略?

关于 Nifi,在我的 PutElasticsearch 处理器中,我可以选择将 Elasticsearch 节点的所有 IP 地址放入 Elasticsearch Hosts 配置中。到目前为止,我只是放置了主节点 IP,因为我假设它正在分配负载。是否值得在集群中输入所有 IP 地址或只输入主节点?

这取决于你所说的分配负载的含义。 这个过程基本上是这样的:

  1. 客户端向协调器节点发送请求(它是接收请求的节点,它可以是集群中的任何节点,不仅是主节点 - 主节点角色用于不同的目的)
  2. 协调器节点找出文档需要路由到的分片以及这些分片托管在哪些节点上,并将文档路由到这些节点。
  3. 主分片更新后,其主机节点会将文档转发到托管副本的节点。
  4. 处理完成后,协调器节点响应客户端。

因此,索引工作分布在托管目标分片和副本的节点之间,但是,所有协调都由收到请求的节点完成。因此,向不同节点发送请求以分配协调工作可能是有意义的。

也可以将节点配置为具有特定角色,请查看 doc