让Elasticsearch飞起来!百亿级实时查询优化实战

2020-06-01 00:00:00 索引 查询 数据 集群 指定

近的一个项目是风控过程数据实时统计分析和聚合的一个 OLAP 分析监控平台,日流量峰值在 10 到 12 亿上下,每年数据约 4000 亿条,占用空间大概 200T。



Java进阶交流群851531810


面对这样一个数据量级的需求,我们的数据如何存储和实现实时查询将是一个严峻的挑战。


经过对 Elasticsearch 多方调研和超过几百亿条数据的插入和聚合查询的验证之后,我们总结出以下几种能够有效提升性能和解决这一问题的方案:

  • 集群规划
  • 存储策略
  • 索引拆分
  • 压缩
  • 冷热分区等


本文所使用的 Elasticsearch 版本为 5.3.3。


Java进阶交流群851531810


什么是时序索引?其主要特点体现在如下两个方面:

  • 存,以时间为轴,数据只有增加,没有变更,并且必须包含 timestamp(日期时间,名称随意)字段。
    其作用和意义要大于数据的 id 字段,常见的数据比如我们通常要记录的操作日志、用户行为日志、或股市行情数据、服务器 CPU、内存、网络的使用率等。
  • 取,一定是以时间范围为过滤条件,然后是其他查询条件,比如近一天、一周、本月等等,然后在这个范围内进行二次过滤。
    比如性别或地域等,查询结果中比较关注的是每条数据和 timestamp 字段具体发生的时间点,而非 id。


此类数据一般用于 OLAP、监控分析等场景。


集群部署规划



Java进阶交流群851531810


我们都知道在 Elasticsearch(下称 ES)集群中有两个主要角色:Master Node 和 Data Node,其他如 Tribe Node 等节点可根据业务需要另行设立。


为了让集群有更好的性能表现,我们应该对这两个角色有一个更好的规划,在 Nodes 之间做读取分离,保证集群的稳定性和快速响应,在大规模的数据存储和查询的压力之下能够坦然面对,各自愉快的协作。


Master Nodes


Master Node,整个集群的管理者,负有对 index 的管理、shards 的分配,以及整个集群拓扑信息的管理等功能。


众所周知,Master Node 可以通过 Data Node 兼任,但是,如果对群集规模和稳定要求很高的话,就要职责分离,Master Node 推荐独立,它的状态关乎整个集群的存活。


Master 的配置:

node.master: true 
node.data: false 
node.ingest: false

相关文章