【南京Meetup】在CloudEdge中,通过ES实践解决ElasticLog产品问题

简介: 摘要: 2018 Elastic Meetup南京交流会,由赵伟带来以“ElasticLog with ES in CloudEdge”为题的演讲。本文首先介绍了CloudEdge与ElasticLog是什么,其次介绍了产品的构架图以及ES的作用,最后介绍了ES在实践过程中需要设计Index、分配Shard、快速将Spark里数据写入ES中和数据去重。

2018 Elastic Meetup南京交流会,由赵伟带来以“ElasticLog with ES in CloudEdge”为题的演讲。本文首先介绍了CloudEdge与ElasticLog是什么,其次介绍了产品的构架图以及ES的作用,最后介绍了ES在实践过程中需要设计Index、分配Shard、快速将Spark里数据写入ES中和数据去重。本文提出的产品已经解决了一些瓶颈问题,但还有一些问题仍在路上。
阿里云Elasticsearch 1核2G首月免费试用,开始云上实践吧
直播视频回顾
以下内容根据现场分享整理而成。

CloudEdge与ElasticLog

CloudEdge

image001


CloudEdge是一款自注册、自配置、自充值的网关产品,它可以分为两部分,一部分是硬件,另一部分是盒子。CloudEdge通常部署在客户网络的进出口,所有的流量都会经过这个盒子进行安全扫描,并做相应的流量控制。
CloudEdge产品主要面临着三方面的问题,第一方面是如何快速处理、快速存储大量数据量的问题,以供用户去查询。第二方面是要满足用户想要查某个时间段的数据不需查整段数据的需求,研究人员应当怎样做。第三方面是由于产品面对的是日本客户,日本客户比较谨慎,他们追求数据一条不能丢,一条不能多的精确度,研究人员应当怎样做。

CloudEdge

CloudEdge对流量进行扫描并进行控制后,会产生大量数据,例如网络访问相关的数据等。Project ElasticLog是负责将不安全的数据进行拦截,接着将所有的数据按照一定的格式写到软件中,让用户能够看到自己所需要关注的信息。最终通过盒子产生数据,Project ElasticLog负责将不安全的数据进行拦截后,做出跟业务相关、数据相关的scalable 系统。

架构图

image003


目前此架构已经基本实现,但在部署上依旧存在一些问题。在上图的架构中,蓝色部分是数据的走向,直到数据落地,绿色部分负责数据落地后用户查询数据。在上图中,首先,Client负责将数据聚合后上传到Log receiververs上,其中Log receiververs是部署在AWS上的。其次,Log receiververs将数据上传到Kinesis stream上,其中Kinesis stream是负责托管服务的。再次,Kinesis stream将数据上传到经典的生产消费者模式区域。最后,数据传输到下游,下游中一部分负责把数据源源不断的写进ES里去,另一部分负责把数据做相应的解析后写进S3里去,其中S3是负责存储服务的。
经过以上处理后,理论上解决了问题,但实际上还需要进一步的延伸。第一,对ES里面的数据进行聚合,即数据进去是以分钟单位计算的,出来时需要聚合成小时单位;第二,将经常查询的数据放到ES里面,剩下的数据放到S3里面;第三,对放到S3内部的数据进行查询,目前对放到S3内部的数据进行查询的方法是用AWS提供的Athena服务,并用托管的方式去搜索S3上的数据,最后提供一个ECS供用户去查询数据。

ES的作用以及现状

ES 在 ElasticLog中主要负责三件事情,第一,主要用来放一个月的热数据,即每分钟有130万条数据进入,必须提供的是秒级查询;第二,ES应建立在AWS上,需要三个专用主节点与十个数据节点,其中主节点指M4.Load,数据节点指C4.2xBug;第三,它最多需要考虑28个指标参数。
在ES服务中,WAS是首选的服务,因为WAS能够提供相对可靠的ES服务,并且是全托管的服务。它可以从一些集群的维护中解放出来,更多的集中在怎样用ES把业务实现。当ES服务达到一定临界值时,让WAS去管理ES服务。另外,在ES服务中,WAS具有区域意识、易于使用、VPC+安全组、蓝/绿部署以及监视器+自动快照等特点,例如,区域意识指可以在不同的机房将数据进行备份。

ES实践

ES的实践包括四个部分,第一部分是怎样去设计一个Index,使它能够很大程度上影响到class的走向;第二部分是Shard的分配,即在指标里面放多少个Shard是合适的;第三部分是快速的将Spark里的数据写到ES里去;第四部分是数据的去重。四个部分的详细介绍如下:

设计Index

设计Index有两种形式,第一种形式是只设计一个Index,但整个程序建立起来后许多地方都不能进行修改了,只适用于小型数据;第二种形式是按时间去分割,即分割成每周一个Index或每月一个Index,能够有效地解决数据量的问题。

image005


上图是ES实践中的一个设计案例,在这个案例的设计中需做一些考量的性能。第一,ES里面不能放两个doc,因为存放两个同名的doc需要字段类型一致,且多个doc类型已经不被支持,所以一个Index仅需存放一个doc类型即可;第二,如果客户只在乎查询结果,不考虑数据是什么,那么可以将source关掉,这样会有效地节约存储空间;第三,all的数据在做Index时能够做到将所有的数据聚合起来,如果只查找 某一段的数据则可把all关掉,这样不仅能够使空间的利用率得到有效地提升,还能使性能得到优化;第四,可以将dynamic改为strict。
在ES实践中,它是将分钟维度数据聚合成小时维度数据的,这就意味着将数据写进ES时是分钟Index,过一段时间后自动转换成小时维度Index。那么查询时它是怎样将分钟Index切换成小时Index的呢?原因是Index提供了一个aliases功能,这样数据一开始指向分钟Index,当分钟Index服务周期到了后,自动切换到小时Index,其中整个切换在数据的聚合里面去完成即可。

Shard的分配

那么在有了Index的基础上,怎样去合理的分配Shard的个数呢?另外,Shard是落在不同的集群上,又该怎样去选择合适的集群大小呢?具体介绍如下:
在设计好Index之后,进行读取数据量,并估计每周以至每分钟有多少数据量送进来。估计数据量的大小之后基本就能够确定Index有多大以及需要多少个Index,接着确定磁盘空间以及需要多少机器设备。进而算出Shard的个数,其中Shard的个数是数据节点个数的k倍,且建议每个Shard存储不得超过30GB。最后进行相应的测试、调整以及反馈,经过几轮测试后,基本就可以确定业务大概需要什么样的集群,这个集群需要多大了。

快速地将Spark里数据写到ES内

首先,通过一个Spark Streaming程序把数据源源不断地写进ES里去,接着,Spark调用ES-Hadoop库把数据写进ES当中。那么怎样快速地将Spark里的数据写到ES里去呢?除了调整一些ES参数以外,还需要将Spark进行并行计算和ES进行并行写入,使得并行task执行的个数等于集群总共拥有的vCores个数,最终两者对接实现资源的最大利用和快速地写入。

数据去重

image006


在上文讲的架构中,由于Spark在做并行运算时会把任务分到每个task里面去做,如果一个task写入ES中失败了,那么Spark在task里面就会重新写入,从而导致数据出现重复。要想将重复进到ES的数据去重,可以从使用自定义唯一ID、使用聚合来发现复制和删除文件以及做明确的查询三个方面入手。


阿里云Elasticsearch 1核2G首月免费试用,开始云上实践吧

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
Java Unix Linux
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
当涉及到网络通信和高性能的Java应用程序时,Netty是一个强大的框架。它提供了许多功能和组件,其中之一是JNI传输。JNI传输是Netty的一个特性,它为特定平台提供了高效的网络传输。 在本文中,我们将深入探讨Netty提供的特定平台的JNI传输功能,分析其优势和适用场景。我们将介绍每个特定平台的JNI传输,并讨论其性能、可靠性和可扩展性。通过了解这些特定平台的JNI传输,您将能够更好地选择和配置适合您应用程序需求的网络传输方式,以实现最佳的性能和可靠性。
345 7
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
|
监控 大数据 Java
使用Apache Flink进行大数据实时流处理
Apache Flink是开源流处理框架,擅长低延迟、高吞吐量实时数据流处理。本文深入解析Flink的核心概念、架构(包括客户端、作业管理器、任务管理器和数据源/接收器)和事件时间、窗口、状态管理等特性。通过实战代码展示Flink在词频统计中的应用,讨论其实战挑战与优化。Flink作为大数据处理的关键组件,将持续影响实时处理领域。
2315 5
|
12月前
|
人工智能 自然语言处理 并行计算
Kokoro-TTS:超轻量级文本转语音模型,支持生成多种语言和多种语音风格
Kokoro-TTS 是一款轻量级文本转语音模型,支持多语言和多语音风格生成,具备实时处理能力和低资源占用,适用于多种应用场景。
1964 5
Kokoro-TTS:超轻量级文本转语音模型,支持生成多种语言和多种语音风格
|
运维 监控 安全
【ELK入门】Elastic中文社区运维监控实战之架构篇
阿里云MVP曾勇撰写的《ELK运维监控入门实战》系列,以Elasticsearch中文社区网站运维监控体系搭建作为案例,讲解了ELK监控系统的相关原理和技术实现,可作为对ELK感兴趣的同学的入门级文章。本篇作为第一篇,介绍了项目背景和技术架构。
7040 0
|
Kubernetes jenkins 测试技术
Jenkins,持续交付的利器:揭秘插件生态系统(二)
Jenkins,持续交付的利器:揭秘插件生态系统
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
280 5
|
编解码 vr&ar 芯片
VR与AR:未来的科技趋势
【8月更文挑战第26天】VR与AR技术正以前所未有的速度发展,并在市场规模、技术创新、应用场景以及竞争格局等方面展现出强劲的增长潜力。随着技术的不断进步和应用场景的不断拓展,VR/AR/MR技术将为人们带来更加丰富的虚拟体验和更加便捷的生活方式。未来,我们有理由相信,VR与AR技术将在多个领域实现更广泛的应用和更深入的融合,成为推动社会进步的重要力量。
|
开发框架 前端开发 JavaScript
使用代码生成工具快速生成基于ABP框架的Vue+Element的前端界面
使用代码生成工具快速生成基于ABP框架的Vue+Element的前端界面
|
应用服务中间件 PHP Apache
使用LightPicture开源搭建私人图床:详细教程及远程访问配置方法-1
使用LightPicture开源搭建私人图床:详细教程及远程访问配置方法
|
安全 机器学习/深度学习 容器
【云上未来】从Elasticsearch到ElasticStack的技术演进之路 |(附视频)
在2019云栖大会【Elasticsearch开发者生态专场】上,Elastic中国首席架构师朱杰(Jerry),为大家详细介绍了从“Elasticsearch”到“Elastic Stack”的产品和技术的演进趋势,并确立云上ES战略的意义。
3954 0
【云上未来】从Elasticsearch到ElasticStack的技术演进之路 |(附视频)

热门文章

最新文章