Elasticsearch 8.X Rollup 功能詳解及避坑指南
來源:銘毅天下Elasticsearch
摘要:本文將詳細介紹 Elasticsearch Rollup 功能,包括其產生背景、應用場景、應用例項以及實戰中的注意事項。透過本文,你將對 Elasticsearch Rollup 功能有一個全面的瞭解,從而提高你的資料處理能力。
一、Elasticsearch Rollup 產生背景
1.1 認知前提
Elasticsearch 是一個分散式的搜尋和分析引擎,能夠處理大量的資料並提供實時查詢功能。
Elasticsearch 傳統的聚合操作都是實時聚合,就是執行聚合的那一刻,實時根據檢索+聚合語句進行聚合操作。
傳統的聚合,當文件資料量非常大時進行多重聚合、巢狀聚合的效能會受到很大影響。因為聚合操作需要搜尋整個索引,並處理大量資料,這會導致查詢變慢,甚至可能使 Elasticsearch 叢集崩潰。
1.2 那麼能不能離線聚合呢?
為了解決這個問題,Elasticsearch Rollup 提供了一種有效的方式來處理大規模資料。
Rollup 允許使用者在實時執行時間之外預先定義聚合任務,這些任務將執行後的聚合結果資料寫入到新建立的特定索引中。在這個新的索引中,資料已經被預先聚合,這使得查詢和分析操作更加快速和高效。
在早期的產品開發中,我們還真構思過離線非實時聚合功能,由於當時ES (5.X版本)尚未釋出 Rollup 功能,只能寫定時任務實現。
1.3 一句話小結
Elasticsearch Rollup是為了解決Elasticsearch在處理海量資料時效能和資源消耗的問題而產生的,Rollup 功能允許將原始資料聚合為更小的、摘要形式的資料,從而減少儲存空間和計算資源的消耗。Rollup 提供了不降低查詢速度的情況下處理海量資料的解決方案。
二、Elasticsearch Rollup 最早釋出版本
自 Elasticsearch 6.3 版本釋出以來,Rollup 已經成為 Elasticsearch 的核心功能之一。在隨後的版本中,Elasticsearch不斷增強和完善了 Rollup 的功能,如支援更多的聚合函式、更靈活的 Rollup 配置選項等。
Rollup 是一種輕量級的聚合工具,可以將原始資料聚合成摘要資料,並將其儲存在新的 Rollup 索引中。這個過程類似於資料倉儲的聚合操作,可以大大減少 Elasticsearch 在處理大量資料時的資源消耗,提高查詢速度和響應時間。
三、Elasticsearch Rollup 功能應用場景
Elasticsearch 的 rollup 功能可以將原始資料按照一定的規則進行聚合,生成預先計算的摘要資料(即 rollup 資料)。這種摘要資料可以用於各種場景,例如:
場景1:大量歷史資料的儲存與查詢。
當資料量龐大且增長迅速時,透過 Rollup 功能可以降低儲存成本和查詢延遲。
場景2:時間序列資料分析。
Rollup 功能特別適用於時間序列資料,可以將資料聚合成不同的時間粒度,方便進行各種時間範圍的分析。
場景3:資料歸檔。
透過 Rollup 功能,可以將不再需要實時查詢的資料歸檔,從而降低儲存和計算資源的消耗。
在電商場景下,可以使用Rollup API來進行如下操作:
電商場景1:統計銷售資料
電商網站可以使用Rollup API來聚合銷售資料,如訂單量、銷售額、商品銷售量等,以便於分析和報告。
電商場景2:聚合使用者資料
透過Rollup API可以統計使用者行為資料,如使用者瀏覽商品數量、購買行為、退貨情況等,以便於進行使用者畫像、使用者行為分析等。
電商場景3:聚合庫存資料
透過Rollup API可以聚合庫存資料,如庫存量、商品入庫量、出庫量等,以便於管理庫存、最佳化進銷存等。
電商場景4:聚合搜尋資料
透過Rollup API可以聚合搜尋資料,如使用者搜尋關鍵字、搜尋次數等,以便於進行搜尋引擎最佳化、推薦演算法最佳化等。
四、Elasticsearch Rollup 應用舉例
4.1 步驟1:建立 Rollup 任務
PUT _rollup/job/ecommerce_rollup
{
"index_pattern": "kibana_sample_data_ecommerce",
"rollup_index": "kibana_sample_data_ecommerce_rollup",
"cron": "* */2 * * * ?",
"page_size": 1000,
"groups": {
"date_histogram": {
"field": "order_date",
"fixed_interval": "1d",
"delay": "1m",
"time_zone": "UTC"
},
"terms": {
"fields": [
"products.product_name.keyword"
]
}
},
"metrics": [
{
"field": "taxless_total_price",
"metrics": [
"min",
"max",
"sum"
]
},
{
"field": "products.price",
"metrics": [
"sum"
]
},
{
"field": "products.quantity",
"metrics": [
"sum"
]
}
]
}
以下是核心引數的簡明扼要解釋:
index_pattern:指定要對哪個原始資料索引進行彙總。 rollup_index:儲存彙總資料的新索引名稱。 cron:定義 Rollup 作業執行的時間表,本例中表示每兩小時執行一次。 page_size:定義每次處理的文件數量,用於控制記憶體佔用和批處理速度。 groups:定義聚合和分組設定。 date_histogram:基於時間欄位的固定間隔分組設定。 field:要進行時間分組的欄位。 fixed_interval:時間分組的固定間隔,本例中為 1 天。 delay:允許一定的延遲以處理潛在的延遲資料,本例中為 1 分鐘。 time_zone:時間欄位的時區。 terms:基於詞條的分組設定。 -fields:要進行詞條分組的欄位列表。 metrics:定義要計算的度量。 field:要進行度量計算的欄位。 metrics:應用於該欄位的聚合操作列表,如最小值(min)、最大值(max)和求和(sum)等。
建立完畢後,Kibana 呈現如下圖所示,我想說明的是,建立了不代表啟動了,所以上面的 status 是 stopped 狀態。
需要我們們手動啟動才可以。
4.2 啟動 Rollup job。
POST _rollup/job/ecommerce_rollup/_start
4.3 查詢 Rollup 檢索和聚合資料
GET kibana_sample_data_ecommerce_rollup/_search
{
"size":0,
"aggs": {
"max_aggs": {
"max": {
"field": "taxless_total_price.max.value"
}
},
"sum_aggs":{
"sum": {
"field": "products.price.sum.value"
}
}
}
}
上述聚合的結果如下圖所示。
ps:關於聚合欄位的寫法,建議先query 查一下,我第一次寫的時候,還不大適應這麼長的“連環”欄位名。
五、Elasticsearch rollup 常見API
常用的 Rollup API包括:
job 層面
PUT /_rollup/job/<job_id>:建立一個 rollup 作業
GET /_rollup/job:列出所有 rollup 作業
GET /_rollup/job/<job_id>:獲取 rollup 作業詳情
POST /_rollup/job/<job_id>/_start:啟動一個 rollup 作業
POST /_rollup/job/<job_id>/_stop:停止一個 rollup 作業
DELETE /_rollup/job/<job_id>:刪除一個 rollup 作業
data 層面
GET /_rollup/data/<index_pattern>/_rollup_caps:獲取 Rollup 功能資訊
GET /<index_name>/_rollup/data/:獲取 Rollup 索引功能資訊
index_name 層面
GET /<index_name>/_rollup_search:搜尋 rollup 資料
六、Elasticsearch rollup 實戰避坑
避免過度聚合。
在建立 Rollup 任務時,要確保聚合的粒度適中,以免丟失過多的原始資料資訊。選擇合適的
聚合欄位和時間間隔,以滿足業務需求。
留意資料延遲。
Rollup 任務通常會配置一定的延遲時間,以防止正在寫入的資料被立即聚合。因此,在查詢 Rollup 資料時,請注意可能存在的資料延遲。
指標型別相容性。
在 Rollup 任務中,不同型別的指標(如 count、sum、avg、max、min 等)可以應用於相應的欄位。在查詢 Rollup 資料時,務必確保使用相容的指標型別。注意許可權控制。
建立和管理 Rollup 任務需要特定的許可權。
請確保您的使用者具有足夠的許可權來建立、修改、刪除和執行 Rollup 任務。
監控 Rollup 任務。
建立 Rollup 任務後,需要定期監控其執行狀態,確保資料正常聚合。可以使用 Elasticsearch 監控功能來檢視任務的執行狀況。
七、總結
Elasticsearch Rollup 功能為大資料處理提供了有效的解決方案,降低了儲存和計算資源的消耗。
本文詳細介紹了 Rollup 功能的產生背景、應用場景、應用例項以及實戰中的注意事項。希望本文能幫助你更好地理解和使用 Elasticsearch Rollup 功能,為你的資料處理帶來更多便利。
ps:本文內容基於Elasticsearch 8.6 驗證,樣例資料來自Kibana自帶的sample資料。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027827/viewspace-2941792/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 圖文詳解丨iOS App上架全流程及稽核避坑指南iOSAPP
- Docker安裝flink及避坑指南Docker
- 上雲避坑指南
- .NET AsyncLocal 避坑指南
- Redis開發運維的陷阱及避坑指南Redis運維
- 坑爹的Python陷阱(避坑指南)Python
- Redis 安裝避坑指南Redis
- eBPF編寫避坑指南eBPF
- React Hooks使用避坑指南ReactHook
- java 執行shell命令及日誌收集避坑指南Java
- Linux下Python3.6的安裝及避坑指南LinuxPython
- ElasticSearch這些坑記得避開Elasticsearch
- MySQL 之 LEFT JOIN 避坑指南MySql
- Shell 指令碼避坑指南(一)指令碼
- Flutter beta3 避坑指南1Flutter
- TensorFlow-GPU安裝避坑指南GPU
- Mac 安裝 Hadoop 教程【避坑指南】MacHadoop
- 微信支付開發避坑指南
- H2 資料庫避坑指南資料庫
- JavaScript作用域面試題避坑指南JavaScript面試題
- 程式設計師避坑指南36條程式設計師
- MongoDB 最佳實踐和場景避坑指南MongoDB
- 微服務進階之路 容器落地避坑指南微服務
- Canal v1.1.4版本避坑指南
- 從單體邁向 Serverless 的避坑指南Server
- 海外電商支付閘道器避坑指南
- Windows 11 預覽版安裝避坑指南Windows
- 避坑指南:關於SPDK問題分析過程
- Apple Search Ads避坑指南:核心問題解析答疑APP
- 個人資訊保安避坑指南“宅家篇”
- Redis避坑指南:為什麼要有分散式鎖?Redis分散式
- Vim安裝使用以及一些避坑指南
- 避坑指南之財務共享中心的服務管理
- 外出遊玩最全個人資訊保安避坑“指南”
- Flask-caching 的快取與刪除 —— 避坑指南Flask快取
- 微服務轉型的三大誤區,避坑指南→微服務
- 遊戲人避坑指南——怎樣才能減少踩坑的頻率?遊戲
- 【swagger】C# 中 swagger 的使用及避坑SwaggerC#