天天看點

ES送出操作與原理ES送出

根據官方文檔+看源碼+實驗總結出來的ES各種送出的作用與原理(對應版本7.2.0).

我本地是用xmind做的, 附上xmind的截圖.

ES送出操作與原理ES送出

ES送出.png

文字版如下:

ES送出

觸發方式

給索引設定

  • PUT /my-index-000001/_settings

    {

    "index" : {

    "refresh_interval" : "1s"

    }

    }

給文檔增删改請求設定

  • PUT /test/_doc/1?refresh

    {"test": "test"}

手動觸發

  • POST /my-index-000001/_refresh

效果

refresh

  • tlog不截斷
  • 文檔可見
  • 不會觸發段合并
  • 不調用fsync, 不保證持久化
  • 注意: 預設1s觸發一次, 但有個特殊設定, 隻有30s内接收到至少一個搜尋請求的時候, 索引的refresh才會按照設定時間頻率觸發, 也就是說沒有搜尋請求的索引的refresh不會自動觸發.

flush

  • tlog截斷
  • 文檔不可見
  • 可能觸發段合并
  • 調用fsync, 保證持久化
  • 沒有類似于Solr的openSearcher=true選項, 不能讓文檔可見.

原理

refresh

  • 觸發lucene的reopen, 把in-memory buffer轉化為in-memory segment.

flush

  • 觸發lucene的commit, 将in-memory buffer送出到新的段, 與已有的in-memory segments一起送出到硬碟.

lucene

  • flush
- 1. 把記憶體段寫到硬碟
- 2. 不調用fsync
- 3. 不更新segment_N檔案           

複制

  • commit
- 1. 把記憶體段寫到硬碟
- 2. 調用fsync
- 3. 更新segment_N檔案           

複制

建議

硬送出頻率

  • 參考tlog的硬碟大小, 使tlog的大小合理, 否則可能會使重新開機時間過長

軟送出頻率

  • 在滿足業務需求的情況下盡可能長一些

不要使用kill -9

  • 正确的步驟
- 停止索引程式
- 手動硬送出或等待自動送出觸發
- 停止ES服務           

複制

T-log

作用

  • 異常恢複
  • RealTime Get By ID

每個shard對應一個t-log