最近在做日志搜集系统,涉及到Kafka到ES的数据解析写入,但是Kafka的写入效率远远高于ES,造成大量的数据在Kafka中积累,且ES的数据更新非常缓慢,最终造成了在Kibana中查询的时候发现,ES中的数据有接近9个小时的数据延迟,这显然是不可接受的。因此,必须着手优化ES的写入效率。在尽可能不改变已有配置的情况下,写入效率优先可以考虑以下两点。
必须使用bulk方式提交写入数据
一开始我们的解析器是通过单条数据的形式提交的数据,很明显这种方式在大数据量的时候就越来越慢,因此我们必须修改为批量提交的方式。ES的bulk提交有个限制就是一次性提交的数据量不能超过15MB,因此,在考虑一次性提交多少条数据比较合适的时候,这个参数无比重要。根据分析,我们目前的数据量一次性bulk提交5000条数据比较合适,约为5-6MB的样子。当然不是越多越好,也不是满满地一定要达到15MB的限制,那样的风险太大,对于我们来讲,能够提升速率满足需求即可。并且我们的程序优化过后能够满足随时根据参数调整bulk请求数量的消息数量大小。我们的k8s中对应的容器配置是这样的:
可根据实际情况调整bulk queue size
bulk queue size是ES的数据处理队列大小,由于ES在接收到数据之后需要做一些索引处理,因此需要将接收到的请求暂放到队列中进行缓冲处理,这个队列默认的值是根据机器的配置动态计算的,一般为200左右。为什么说要根据实际情况来调整呢?因为默认情况下,200左右的队列大小已经够用,比如我们现在的情况客户端配置的队列大小只有50。当然并发量实在是太大的时候,可以适当调整这个参数。需要在配置文件 elasticsearch.yml 中增加以下配置:
其他一些临时修改方案
主要是2个参数:index.refresh_interval 和 index.number_of_replicas 。为什么说是临时修改方案呢?因为这些方案需要修改索引配置,并且不能长期保持该方案运行,否则会引起稳定性的问题,必须在适当时候再调整回来。参考官方文档:https://www.elastic.co/guide/en/elasticsearch/guide/current/indexing-performance.html
相关推荐
1. 批量写入优化:通过批量提交数据降低网络通信开销,提高写入效率。 2. 设置合理的refresh间隔:频繁的refresh会消耗大量资源,应根据需求平衡实时性和性能。 3. 分片策略:合理分配分片数量,避免单个分片过载。 ...
在IT领域,Elasticsearch(ES)是一种广泛使用的开源全文搜索引擎,它以其高效、可扩展性和实时性...通过理解并应用这些知识点,你可以有效地利用Elasticsearch的批量写入功能,优化数据导入效率,提升整体系统的性能。
Elasticsearch-Hadoop允许用户直接从Hadoop作业读取和写入Elasticsearch,无需将数据移动到本地文件系统或临时位置。 2. **HQL转化**:HQL可能是指Hadoop Query Language,虽然这不是一个标准的术语,但在这里可能...
段归并是优化索引效率的重要环节,Elasticsearch默认使用Lucene的CMS自调优机制,限制了最大合并大小。归并策略包括`floor_segment`、`max_merge_at_once`、`max_merge_at_once_explicit`和`max_merged_segment`等...
为了确保其高效稳定运行,对Elasticsearch进行优化和升级是必不可少的。以下是一些关键的优化策略,主要关注内存管理、系统配置、索引设置以及网络配置。 1. 内存优化:Elasticsearch 建议使用系统内存的50%作为堆...
随着2.0的发布,Elasticsearch继续引领搜索和分析技术的发展,不断追求更高的效率和灵活性。无论是开发人员还是系统管理员,都需要了解这些版本间的差异,以便更好地利用Elasticsearch解决各种数据挑战。
- **改进的性能**:此版本对查询和写入速度进行了优化,提高了整体性能。 - **更强大的分析器**:支持更多语言的分析,提供了更精确的文本分词。 - **安全增强**:内置的X-Pack安全功能更加成熟,包括用户认证、...
在`bulkSaveToEs`方法中,我们使用Elasticsearch的Bulk API进行批量保存,这能显著提高插入效率。`parseLog`方法根据实际日志格式解析并转换日志数据。 为了实现“百万日志秒处理”的目标,我们需要注意优化以下几...
5. **分片(Shard)**:为了分散存储和提高查询效率,Elasticsearch将索引分成多个分片。分片可以在不同节点上,使得数据分布更均匀。 6. **副本(Replica)**:每个分片的副本用于提高数据可用性和容错性,当主分片...
**Elasticsearch** 是一个流行的开源全文搜索引擎,广泛应用于大数据分析、日志分析、实时搜索等领域。本参考资料基于《Elasticsearch 权威指南》的中文版,由原作者Clinton Gormley和Zachary Tong编著,旨在帮助...
3. **Elasticsearch索引设计**:为了优化日志检索,我们需要设计合理的索引模板,考虑日志字段的类型、分词器、分析器等。例如,日志时间通常使用日期类型,便于按时间范围查询;日志级别可以设置为枚举类型,方便...
- **Hadoop 到 Elasticsearch 数据流**: 在 Hadoop 端,使用例如 Logstash 或者 Elasticsearch 的 Hadoop 插件(如 Elasticsearch-Hadoop)将 MapReduce 或 Spark 处理后的结果直接写入 Elasticsearch。这通常涉及...
其次,调整系统设置对于优化Elasticsearch性能同样重要。例如,通过在`/etc/sysctl.conf`文件中设置`vm.swappiness=1`,可以减少系统对交换分区的依赖,从而降低磁盘I/O。此外,增加最大映射文件数`vm.max_map_count...
- 通过调整Elasticsearch的索引设置,如分片数、副本数、刷新间隔等,以优化查询性能和存储需求。 5. **监控和故障恢复**: - 需要监控数据导入的进度和错误,确保数据一致性。一旦出现错误,应有相应的策略进行...
这个插件的主要功能是优化数据导入过程,通过批量操作减少与Elasticsearch服务器的交互次数,从而提高数据写入的速度和性能。 在升级到Elasticsearch7.x时,可能需要注意以下几点: 1. **API变化**:Elasticsearch...
Elasticsearch Head是一款基于Web的Elasticsearch集群管理工具,其主要功能是提供可视化的界面,...通过理解和熟练使用Elasticsearch Head,可以更好地管理和优化Elasticsearch集群,提升数据处理效率和系统的稳定性。
Elasticsearch提供了多种级别的一致性保证,如quorum、all等,确保在节点故障情况下仍能保证数据的安全写入。 综上所述,Elasticsearch是一个功能强大、灵活性高的搜索和分析引擎,其分布式架构和丰富的数据处理...
**Elasticsearch-Head:一个直观的Elasticsearch管理工具** Elasticsearch-Head 是一个基于Web的用户界面,专为Elasticsearch设计,用于帮助管理员和开发人员更直观地查看和操作Elasticsearch集群的索引。这个工具...
Elasticsearch 使用 Lucene 的段文件进行数据存储,这些段文件在内存中构建后写入磁盘。`Lucene` 相关的类和方法负责这个过程,确保了高效的数据读写。 通过深入学习和理解 Elasticsearch 5.3.2 的源码,开发者...
**ElasticSearch CRX Chrome 插件** 是一个专为谷歌浏览器(Chrome)设计的扩展程序,用于增强用户对Elasticsearch(ES)的交互体验。这个插件可以帮助开发者、数据分析师以及系统管理员更便捷地操作和管理Elastic...