【发布时间】:2017-04-16 20:26:46
【问题描述】:
我正在评估使用开源技术为分析应用程序提供支持的几个不同选项。其中一个选项是使用 ElasticSearch,尽管我无法找到任何使用它进行大规模分析实施的公司的例子,因此我的问题在这里。
对于 1B-10B 点的数据集,ElasticSearch 会有哪些限制(如果有,或者可能吗?)?例如,拥有像 Google Analytics 这样的功能集。
【问题讨论】:
-
这是一位似乎对大量数据进行分析的用户 - digitalgov.gov/2015/01/07/elk - 加上他们所做的描述,包括缺点。
-
在 Elasticsearch 中,对于像您这样的开放式问题没有非黑即白的答案。记录的数量并不是一切:我们谈论多少磁盘空间、多少节点、多少索引、每个分片的数量、您需要什么样的分析、硬件规格等。有两件事可以确定。您提到的数据:您需要专用的主节点,更重要的是良好的客户端节点,根据查询和并发搜索计数,您将需要更多或更少的主节点。
-
在 Elasticsearch 5 中,客户端节点被称为协调节点,但它具有相同的角色。我能想到的一个限制是这种协调节点的堆/RAM 内存。由于 JVM 的垃圾收集周期较长(要清理的内存更大,需要更多时间,节点更不可用),因此 Elasticsearch 节点的堆不应设置为大于 ~30GB 的值。在 GC 期间,该 JVM 上没有其他任何东西运行。所以你可能会受到内存大小的限制。
-
我说您很可能需要协调节点,因为大量聚合(这可能是分析平台中最常用的功能)将在收集结果的final phase of a query 中使用 CPU 和内存从所有涉及的分片中提取并执行最终的排序和聚合。因此,与仅用于聚合的普通数据节点相比,它需要更多的内存。
-
我怀疑单个聚合会使用这么多 GB 的内存,但如果正在使用的查询/聚合是以鲁莽的方式构建的,它理论上可以使用它。根据有多少并发搜索以及它们使用多少内存,您可能需要更多或更少的协调节点,以便 GC 周期不是很频繁。底线:我认为这是可能的,但需要一些常识(请参阅我关于鲁莽聚合的评论)和一些尽可能接近现实的负载估计。
标签: elasticsearch analytics scalability