0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Elasticsearch寫入優(yōu)化記錄,從3000到8000/s

Android編程精選 ? 來(lái)源:blog.csdn.net/wmj2004/article/ ? 作者:blog.csdn.net/wmj2004 ? 2022-04-11 10:55 ? 次閱讀

背景

  • 基于elasticsearch-5.6.0

  • 機(jī)器配置:3個(gè)阿里云ecs節(jié)點(diǎn),16G,4核,機(jī)械硬盤

優(yōu)化前,寫入速度平均3000條/s,一遇到壓測(cè),寫入速度驟降,甚至es直接頻率gc、oom等;優(yōu)化后,寫入速度平均8000條/s,遇到壓測(cè),能在壓測(cè)結(jié)束后30分鐘內(nèi)消化完數(shù)據(jù),各項(xiàng)指標(biāo)回歸正常。

生產(chǎn)配置

這里我先把自己優(yōu)化的結(jié)果貼出來(lái),后面有參數(shù)的詳解:

elasticsearch.yml中增加如下設(shè)置

indices.memory.index_buffer_size:20%
indices.memory.min_index_buffer_size:96mb

#Searchpool
thread_pool.search.size:5
thread_pool.search.queue_size:100
#這個(gè)參數(shù)慎用!強(qiáng)制修改cpu核數(shù),以突破寫線程數(shù)限制
#processors:16
#Bulkpool
#thread_pool.bulk.size:16
thread_pool.bulk.queue_size:300
#Indexpool
#thread_pool.index.size:16
thread_pool.index.queue_size:300

indices.fielddata.cache.size:40%

discovery.zen.fd.ping_timeout:120s
discovery.zen.fd.ping_retries:6
discovery.zen.fd.ping_interval:30s

索引優(yōu)化配置:

PUT/_template/elk
{
"order":6,
"template":"logstash-*",#這里配置模板匹配的Index名稱
"settings":{
"number_of_replicas":0,#副本數(shù)為0,需要查詢性能高可以設(shè)置為1
"number_of_shards":6,#分片數(shù)為6,副本為1時(shí)可以設(shè)置成5
"refresh_interval":"30s",
"index.translog.durability":"async",
"index.translog.sync_interval":"30s"

}
}

優(yōu)化參數(shù)詳解

精細(xì)設(shè)置全文域: string類型字段默認(rèn)會(huì)分詞,不僅會(huì)額外占用資源,而且會(huì)影響創(chuàng)建索引的速度。所以,把不需要分詞的字段設(shè)置為not_analyzed

禁用_all字段: 對(duì)于日志和apm數(shù)據(jù),目前沒(méi)有場(chǎng)景會(huì)使用到

副本數(shù)量設(shè)置為0: 因?yàn)槲覀兡壳叭罩緮?shù)據(jù)和apm數(shù)據(jù)在es只保留最近7天的量,全量日志保存在hadoop,可以根據(jù)需要通過(guò)spark讀回到es – 況且副本數(shù)量是可以隨時(shí)修改的,區(qū)別分片數(shù)量

使用es自動(dòng)生成id: es對(duì)于自動(dòng)生成的id有優(yōu)化,避免了版本查找。因?yàn)槠渖傻膇d是唯一的

設(shè)置index.refresh_interval: 索引刷新間隔,默認(rèn)為1s。因?yàn)椴恍枰绱烁叩膶?shí)時(shí)性,我們修改為30s – 擴(kuò)展學(xué)習(xí):刷新索引到底要做什么事情

設(shè)置段合并的線程數(shù)量:

curl-XPUT'your-es-host:9200/nginx_log-2018-03-20/_settings'-d'{
"index.merge.scheduler.max_thread_count":1
}'

段合并的計(jì)算量龐大,而且還要吃掉大量磁盤I/O。合并在后臺(tái)定期操作,因?yàn)樗麄兛赡芤荛L(zhǎng)時(shí)間才能完成,尤其是比較大的段

機(jī)械磁盤在并發(fā)I/O支持方面比較差,所以我們需要降低每個(gè)索引并發(fā)訪問(wèn)磁盤的線程數(shù)。這個(gè)設(shè)置允許max_thread_count + 2個(gè)線程同時(shí)進(jìn)行磁盤操作,也就是設(shè)置為1允許三個(gè)線程

擴(kuò)展學(xué)習(xí):什么是段(segment)?如何合并段?為什么要合并段?(what、how、why)

1.設(shè)置異步刷盤事務(wù)日志文件:

"index.translog.durability":"async",
"index.translog.sync_interval":"30s"

對(duì)于日志場(chǎng)景,能夠接受部分?jǐn)?shù)據(jù)丟失。同時(shí)有全量可靠日志存儲(chǔ)在hadoop,丟失了也可以從hadoop恢復(fù)回來(lái)

2.elasticsearch.yml中增加如下設(shè)置:

indices.memory.index_buffer_size:20%
indices.memory.min_index_buffer_size:96mb

已經(jīng)索引好的文檔會(huì)先存放在內(nèi)存緩存中,等待被寫到到段(segment)中。緩存滿的時(shí)候會(huì)觸發(fā)段刷盤(吃i/o和cpu的操作)。默認(rèn)最小緩存大小為48m,不太夠,最大為堆內(nèi)存的10%。對(duì)于大量寫入的場(chǎng)景也顯得有點(diǎn)小。

擴(kuò)展學(xué)習(xí):數(shù)據(jù)寫入流程是怎么樣的(具體到如何構(gòu)建索引)?

1.設(shè)置index、merge、bulk、search的線程數(shù)和隊(duì)列數(shù)。例如以下elasticsearch.yml設(shè)置:

#Searchpool
thread_pool.search.size:5
thread_pool.search.queue_size:100
#這個(gè)參數(shù)慎用!強(qiáng)制修改cpu核數(shù),以突破寫線程數(shù)限制
#processors:16
#Bulkpool
thread_pool.bulk.size:16
thread_pool.bulk.queue_size:300
#Indexpool
thread_pool.index.size:16
thread_pool.index.queue_size:300

2.設(shè)置filedata cache大小,例如以下elasticsearch.yml配置:

indices.fielddata.cache.size:15%

filedata cache的使用場(chǎng)景是一些聚合操作(包括排序),構(gòu)建filedata cache是個(gè)相對(duì)昂貴的操作。所以盡量能讓他保留在內(nèi)存中

然后日志場(chǎng)景聚合操作比較少,絕大多數(shù)也集中在半夜,所以限制了這個(gè)值的大小,默認(rèn)是不受限制的,很可能占用過(guò)多的堆內(nèi)存

擴(kuò)展學(xué)習(xí):什么是filedata?構(gòu)建流程是怎樣的?為什么要用filedata?(what、how、why)

1.設(shè)置節(jié)點(diǎn)之間的故障檢測(cè)配置,例如以下elasticsearch.yml配置:

discovery.zen.fd.ping_timeout:120s
discovery.zen.fd.ping_retries:6
discovery.zen.fd.ping_interval:30s

大數(shù)量寫入的場(chǎng)景,會(huì)占用大量的網(wǎng)絡(luò)帶寬,很可能使節(jié)點(diǎn)之間的心跳超時(shí)。并且默認(rèn)的心跳間隔也相對(duì)過(guò)于頻繁(1s檢測(cè)一次)

此項(xiàng)配置將大大緩解節(jié)點(diǎn)間的超時(shí)問(wèn)題

后記

這里僅僅是記錄對(duì)我們實(shí)際寫入有提升的一些配置項(xiàng),沒(méi)有針對(duì)個(gè)別配置項(xiàng)做深入研究。

擴(kuò)展學(xué)習(xí)后續(xù)填坑?;径甲裱╳hat、how、why)原則去學(xué)習(xí)。

-End-

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6715

    瀏覽量

    88314
  • Elasticsearch
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    2813

原文標(biāo)題:Elasticsearch 寫入優(yōu)化記錄,從3000到8000/s

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何向EEPROM寫入數(shù)字

    向EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲(chǔ)器)寫入數(shù)字是一個(gè)相對(duì)直接的過(guò)程,但涉及多個(gè)步驟和細(xì)節(jié)。以下是一個(gè)詳細(xì)的步驟說(shuō)明,旨在幫助您理解并成功向EEPROM
    的頭像 發(fā)表于 09-05 10:56 ?352次閱讀

    記錄到管理:?jiǎn)伪倍饭ぷ?b class='flag-5'>記錄儀如何優(yōu)化工作流程

    在這個(gè)快節(jié)奏的時(shí)代,每一分效率的提升都是企業(yè)競(jìng)爭(zhēng)力的關(guān)鍵。繁瑣的手工記錄到智能化的數(shù)據(jù)管理,技術(shù)的飛躍正悄然改變著我們的工作方式。頂堅(jiān)單北斗工作記錄儀如何成為優(yōu)化工作流程的得力助手,
    的頭像 發(fā)表于 08-30 11:09 ?153次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>記錄</b>到管理:?jiǎn)伪倍饭ぷ?b class='flag-5'>記錄</b>儀如何<b class='flag-5'>優(yōu)化</b>工作流程

    軟件系統(tǒng)的數(shù)據(jù)檢索設(shè)計(jì)

    refresh操作將mem buffer中的數(shù)據(jù)寫入新的segment并寫入os cache,然后打開本segment以供
    的頭像 發(fā)表于 08-22 14:08 ?128次閱讀
    軟件系統(tǒng)的數(shù)據(jù)檢索設(shè)計(jì)

    求助,關(guān)于AD8000 cir文件的導(dǎo)入問(wèn)題求解

    LT公司下載的AD8000.CIR文件里包含三個(gè)subject,導(dǎo)入宏,提示有多個(gè)子電路,選擇其中的AD8000,建立模型以后,仿真不正常,應(yīng)該是其他兩個(gè)子電路沒(méi)有導(dǎo)入 問(wèn)題。 請(qǐng)教各位,碰到這個(gè)問(wèn)題如何處理?
    發(fā)表于 08-07 07:12

    PLC云端,ZP3000系列網(wǎng)關(guān)助力工業(yè)數(shù)字化轉(zhuǎn)型

    ZP3000系列遠(yuǎn)程控制網(wǎng)關(guān)是一款專為滿足現(xiàn)代工業(yè)自動(dòng)化和遠(yuǎn)程監(jiān)控需求而設(shè)計(jì)且功能強(qiáng)大的通訊模塊。它的多接口設(shè)計(jì)和靈活配置能力,使得它能夠適應(yīng)多種復(fù)雜的工業(yè)通信和監(jiān)控場(chǎng)景。以下是關(guān)于ZP3000系列
    的頭像 發(fā)表于 07-30 14:23 ?448次閱讀
    <b class='flag-5'>從</b>PLC<b class='flag-5'>到</b>云端,ZP<b class='flag-5'>3000</b>系列網(wǎng)關(guān)助力工業(yè)數(shù)字化轉(zhuǎn)型

    KV-8000/7000/5000/3000/1000系列指令參考手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《KV-8000/7000/5000/3000/1000系列指令參考手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 06-25 14:15 ?0次下載

    紫光展銳UNISOC S8000用科技助力步步高學(xué)習(xí)機(jī)S8智慧教育

    近日,步步高推出全新學(xué)習(xí)機(jī)S8,內(nèi)置紫光展銳芯片平臺(tái)-UNISOC S8000,依托展銳芯片的強(qiáng)勁性能和步步高多年積累的教育資源優(yōu)勢(shì),步步高學(xué)習(xí)機(jī)S8讓青少年能更高效、更精準(zhǔn)地掌握知識(shí),養(yǎng)成學(xué)習(xí)
    的頭像 發(fā)表于 06-05 18:14 ?2207次閱讀

    怎樣才能使用范圍(0x8004-0xBFFC)進(jìn)行I2C寫入呢?

    我們?cè)鯓硬拍苁褂梅秶?x8004-0xBFFC)進(jìn)行 I2C 寫入呢? 我們可以直接將寫入的數(shù)據(jù)復(fù)制范圍 (0x8000-0xBFFC) 嗎?或者需要配置其他寄存器?
    發(fā)表于 01-23 08:13

    淺談代碼優(yōu)化與過(guò)度設(shè)計(jì)

    本文記錄了作者“代碼優(yōu)化“過(guò)度設(shè)計(jì)”的典型思考過(guò)程,這過(guò)程中涉及了很多Java的語(yǔ)法糖及設(shè)計(jì)模式的東西,很典型,能啟發(fā)思考,遂記錄下來(lái)
    的頭像 發(fā)表于 01-19 10:05 ?454次閱讀
    淺談代碼<b class='flag-5'>優(yōu)化</b>與過(guò)度設(shè)計(jì)

    源譯識(shí) | 譯文分享:Elasticsearch訴Amazon商標(biāo)侵權(quán)案

    【編者按】 ElasticSearch是歸屬Elastic公司的一個(gè)開源項(xiàng)目,提供分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。Amazon公司于2015年基于ElasticSearch推出了自己
    的頭像 發(fā)表于 11-06 19:10 ?596次閱讀

    Python 更新 Elasticsearch 的幾種方法

    今天總結(jié)一下通過(guò) Python 更新 Elasticsearch 數(shù)據(jù)的幾個(gè)方法 Elasticsearch 是一個(gè)實(shí)時(shí)的分布式搜索分析引擎,它能讓你以前所未有的速度和規(guī)模,去探索你的數(shù)據(jù)。它被用作
    的頭像 發(fā)表于 11-01 10:11 ?975次閱讀
    Python 更新 <b class='flag-5'>Elasticsearch</b> 的幾種方法

    SpringBoot 連接ElasticSearch的使用方式

    在上篇 ElasticSearch 文章中,我們?cè)敿?xì)的介紹了 ElasticSearch 的各種 api 使用。 實(shí)際的項(xiàng)目開發(fā)過(guò)程中,我們通?;谀承┲髁骺蚣芷脚_(tái)進(jìn)行技術(shù)開發(fā),比如
    的頭像 發(fā)表于 10-09 10:35 ?642次閱讀

    Python寫入日志文件完整代碼

    寫入日志文件 上面我們說(shuō)的是將日志打印到控制臺(tái)中,但是我們Python代碼寫完并且在運(yùn)行當(dāng)中后,我們就不可能這樣玩了,所以我們需要將日志保存到一個(gè)日志文件中 完整代碼如下: import
    的頭像 發(fā)表于 10-07 11:50 ?1100次閱讀
    Python<b class='flag-5'>寫入</b><b class='flag-5'>到</b>日志文件完整代碼

    Elasticsearch存在的各種漏洞問(wèn)題

    elasticsearch 8 之前使用的一個(gè)老系統(tǒng)使用了elasticsearch7.x版本,之后又反應(yīng)es版本存在各種漏洞 無(wú)奈只能做版本升級(jí)來(lái)解決問(wèn)題,計(jì)劃是將版本升級(jí)8.x,在網(wǎng)上了解了下
    的頭像 發(fā)表于 09-30 10:40 ?2984次閱讀
    <b class='flag-5'>Elasticsearch</b>存在的各種漏洞問(wèn)題

    一文詳解RedisJSON和其他框架的對(duì)比

    RedisJSON 的讀取、寫入和負(fù)載搜索延遲在更高的百分位數(shù)中遠(yuǎn)比 ElasticSearch 和 MongoDB 穩(wěn)定。當(dāng)增加寫入比率時(shí),RedisJSON 還能處理越來(lái)越高的整體吞吐量,而當(dāng)
    發(fā)表于 09-27 11:00 ?485次閱讀
    一文詳解RedisJSON和其他框架的對(duì)比