Elasticsearch 線上實戰問題及解決方案探討
來源:銘毅天下Elasticsearch
1、reindex相關問題
1.1 問題描述
我有 1tb
的一個大索引若干,要遷移到另外一個新叢集去,有沒有好辦法?reindex好像會中斷......
reindex 是不是就算設定了頻率也會莫名的中斷,而且沒地方查到錯誤?1000多萬
的資料,大概80G
用reindex
有時候都會莫名的斷。
有時候是全的,有時候不全。
1.2 問題認知
對於大型索引的遷移問題,遷移 1TB 大小的索引,尤其是在保持服務不中斷的情況下,是一項挑戰。
Reindex 操作本質上是 Elasticsearch 提供的高階複製,它會從源索引讀取文件並寫入目標索引。對於大型索引,這可能成為一個瓶頸,因為它需要大量的IO和網路頻寬。
反饋和問到最多的問題就是:Reindex 支不支援斷點續傳?
其實,Reindex確實不提供原生的斷點續傳功能。如果過程中斷,則需要重新開始或者手動管理已經完成的部分。
1.3 解決方案
1.3.1 資料規模和資料量不大,推薦使用 reindex。
注意事項如下:
1、叢集足夠健康。確保叢集健康狀況良好,沒有過載或者資源爭奪情況。
2、用好 slice,提高並行效能。
使用_reindex API時,透過設定 scroll 和 batch_size 引數來管理記憶體使用和單批次的文件數量。使用 slice 功能來並行化reindex任務。
3、避免中斷策略
在Elasticsearch配置中調整連線和超時設定,例如
reindex.remote.connect_timeout
reindex.remote.read_timeout
4、自己維護校驗機制。
遷移完成後,使用校驗和或者文件計數來確認資料完整性。
之前實戰專案中,可以定時指令碼統計一下寫入新索引的資料量,以校驗源和目的端資料的一致性。
1.3.2 資料規模和資料量巨大,推薦使用快照或者 logstash 等工具。
1、快照和恢復機制 建立一個源索引的快照,並將其恢復到新叢集。這通常比 reindex 操作更加可靠。
2、logstash 同步 支援兩種類似斷點續傳機制,一是:基於自增ID同步,另一是:基於自增時間同步。
3、canal 同步 如果源頭是 MySQL、Oracle 等關係型資料庫,推薦使用阿里開源的 canal 工具同步。
2、 如何記錄es的所有請求日誌?
2.1 問題認知
這是經常被問到的問題,預設情況下 Elasticsearch 輸出核心是 error 日誌,以方便我們窺探叢集哪裡出了問題。
但,有些業務場景,需要全量日誌,包含但不限於檢索日誌細節等。
這時候,預設機制便不再生效。
2.2 問題解決
開啟 slowlog,便可以檢視全量日誌。
PUT packets-2022-12-14/_settings
{
"index.indexing.slowlog.threshold.index.debug": "0s",
"index.search.slowlog.threshold.fetch.debug": "0s",
"index.search.slowlog.threshold.query.debug": "0s"
}
更多推薦:Elasticsearch 日誌能否把全部請求列印出來?
3、指令碼的使用問題
3.1 問題描述
我想請問下我用kibana中的無痛指令碼編寫建立新的欄位時想要建立一個list資料表,輸入下面這段程式碼,但是平臺卻顯示無法識別new ArrayList是什麼原因呢?
List(String)mylist= new ArrayList<>()
3.2 問題認知
Elasticsearch painless 指令碼功能的確非常強大,但非必要不要使用。原因在於後期的效能問題。
3.3 問題解決
1、首先,寫入的時候充分建模。
能前置寫入的時候處理的話,儘量前置處理。藉助寫入語言:Java、Python 等處理完畢後再寫入。
2、其次,寫入前藉助 Ingest pipeline 預處理。
Ingest pipeline 是寫入前預處理的鋒利的“瑞士軍刀”,功能也非常強大,5.X版本就已經推出,可以大膽的用起來。
寫入的時候處理,可能會寫入變慢,總比:檢索響應慢更容易讓客戶接受。
與之並駕齊驅的還可以藉助 :logstash filter 環節實現預處理過濾功能。
3、再次,檢索的時候使用:runtime_field 動態欄位實現。
這是迫不得已的下策,需要結合場景選用。
此方案也比自己寫指令碼來得更為實際。
4、叢集相關問題
4.1 問題描述
請問大佬,叢集擴容,新加入的節點需要把原叢集機器中的data目錄複製到新加入的節點中嗎?還是新節點直接空data目錄加入即可?再就是,linux和windows 的 ES可以互相加入彼此的叢集中嗎?謝謝
4.2 問題認知
凡是涉及到直接複製data目錄的多半都是官方不推薦的冒險方案,非特殊情況都不建議這麼做。
4.3 解決方案
其一:瞭解副本的原理、路由機制原理,可以知道,新寫入的資料會根據路由落到某個節點的某個分片,然後,複製到其他的副本分片中去。這樣手動遷移data的必要性和可能性都不存在了。
其二:當然可以,windows 和 linux 本就是平臺的不同,但都可以作為節點的宿主機。Elasticsearch 本來就是 java 開發的,支援跨平臺。
5、自定義詞典問題
5.1 問題描述
中文分詞欄位,如何實現不同欄位使用不同的自定義詞典?
5.2 問題認知
這是一種小眾業務場景問題。
一般我們們企業級應用更多的是一類業務敲定一個分詞器,往往在分詞器的細粒度等問題做文章。比如:如何動態擴充套件詞庫?如何豐富已有詞庫?
5.3 解決方案
如果非要不同欄位不同字典,其實最直接方案,可以匯入多個分詞外掛。
比如:引入 IK 分詞外掛同時引入結巴分詞外掛。這樣就可以很好得解決。
但,我驗證了一下,僅 IK 擴充套件支援兩套分詞詞典,貌似不改變原始碼不具備可行性。
推薦一個支援多詞庫的原始碼修改過的 IK 解決方案。
“改造前,所有索引使用一個詞庫,沒辦法針對不同索引新增不同詞庫, 改造後,詞庫的載入由索引中自定義的analyzer配置時,設定的詞庫而決定 從而實現了,不同業務的索引使用不同的詞庫。”
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027827/viewspace-2997336/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ElasticSearch實戰系列十一: ElasticSearch錯誤問題解決方案Elasticsearch
- 探尋 JavaScript 精度問題以及解決方案JavaScript
- CrashSight 接入上報常見問題及解決方案
- 跨域問題及解決方案跨域
- 請多討論問題,而不是解決方案 - frankel
- WordPress:常見問題及解決方案
- 基於CodeMirror開發線上編輯器時遇到的問題及解決方案
- 線上直播原始碼開發IOS端問題解決方案原始碼iOS
- ElasticSearch(八)Elasticsearch-head 連線不上Elasticsearch的原因和解決方案Elasticsearch
- 快取三大問題及解決方案快取
- Kafka常見的問題及解決方案Kafka
- 快取常見問題及解決方案快取
- matplotlib中文報錯問題及解決方案
- python建立elasticsearch索引的探討PythonElasticsearch索引
- 實戰 | Hive 資料傾斜問題定位排查及解決Hive
- 構建Potatso問題集錦及解決方案
- TCP 粘包 - 拆包問題及解決方案TCP
- JS中toFixed()方法的問題及解決方案JS
- redis快取相關問題及解決方案Redis快取
- laravel線上環境表單驗證重定向問題解決方案Laravel
- 土製Excel匯入匯出及相關問題探討Excel
- 記憶體吞金獸(Elasticsearch)的那些事兒 -- 常見問題痛點及解決方案記憶體Elasticsearch
- Springboot 加密方案探討Spring Boot加密
- 討論TableLayoutPanel載入緩慢和閃爍問題解決方案
- Java線上問題排查神器Arthas實戰分析Java
- Android應用安全常見問題及解決方案Android
- Web 學習之跨域問題及解決方案Web跨域
- 多執行緒的安全問題及解決方案執行緒
- 【FAQ】推送服務常見問題及解決方案
- 物聯網路卡常見問題及解決方案
- Netty URL路由方案探討Netty路由
- 容器安全公開課 | 揭秘容器黑產,探討容器安全解決方案
- F5解決方案如何?結合創新例項來探討
- 探討系統中?錢的精度問題
- 關於 Xmind 用例線上管理的探討
- 跨域問題,解決方案 – CORS方案跨域CORS
- 代理伺服器的連線問題及解決伺服器
- 工作中碰到的Java問題整理及解決方案Java