📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

thread_pool.flush.core 配置项用于控制索引刷新线程池的核心线程数

Flush 线程池用于执行索引刷新操作,将内存中的索引数据写入磁盘,确保持久化。

配置项属性 #

  • 配置路径: thread_pool.flush.core
  • 数据类型: Integer(整数)
  • 默认值: 1
  • 是否可选: 是
  • 作用域: NodeScope(节点级别)
  • 动态更新: 是(可以动态更新,无需重启)

配置项详解 #

工作机制 #

Flush 线程池架构

线程池类型: SCALING (可伸缩)

┌─────────────────────────────────────┐
│  Flush 线程池                        │
├─────────────────────────────────────┤
│  核心线程: core (默认 1)             │
│  弹性线程: max - core                │
│  最大线程: (CPU核心数 + 1) / 2, 最大5│
└─────────────────────────────────────┘


使用场景:

1. 显式刷新
   ├── 调用 _refresh API
   ├── 请求立即刷新
   └-- 数据可搜索


2. 定时刷新
   ├── refresh_interval 到期
   ├── 自动刷新索引
   └-- 保持数据近实时


3. TransLog 提交
   ├── 内存缓冲满
   ├── 持久化数据
   └-- 防止数据丢失


4. 索引关闭
   ├── 关闭索引前
   ├── 确保数据持久化
   └-- 安全关闭

max 计算规则 #

max 默认值计算

max = (CPU核心数 + 1) / 2,最大不超过 5


实际值:

CPU 核心: 1
├── (1 + 1) / 2 = 1
└-- max = 1


CPU 核心: 2
├── (2 + 1) / 2 = 1
└-- max = 1


CPU 核心: 4
├── (4 + 1) / 2 = 2
└-- max = 2


CPU 核心: 8
├── (8 + 1) / 2 = 4
└-- max = 4


CPU 核心: 16+
├── 计算值 >= 5
├── 限制: 最大 5
└-- max = 5

core 设置影响 #

core 值的影响分析

core = 1 (默认):
├── 资源占用: 最小 ✅
├── 刷新能力: 标准
├── I/O 压力: 适中
└-- 适用: 大多数场景 ✅


core = 2:
├── 资源占用: 较小
├── 刷新能力: 较高
├── I/O 压力: 较高
└-- 适用: 高写入场景


core > 2:
├── 资源占用: 中等
├── 刷新能力: 高
├-- I/O 压力: 高
└-- 谨慎使用 ⚠️

配置建议 #

默认配置(推荐) #

thread_pool:
  flush:
    core: 1  # 默认值

建议: 大多数场景使用默认值。

高写入场景 #

thread_pool:
  flush:
    core: 2

建议: 高吞吐量写入场景。

动态更新 #

PUT /_cluster/settings
{
  "transient": {
    "thread_pool.flush.core": 2
  }
}

代码示例 #

手动刷新索引 #

POST /my_index/_refresh

设置刷新间隔 #

PUT /my_index/_settings
{
  "index.refresh_interval": "30s"

相关配置 #

配置项作用默认值
flush.core核心线程数1
flush.max最大线程数(CPU+1)/2, 最大5
flush.keep_alive线程保活时间5m

注意事项 #

  1. 默认值: 默认值为 1,适用于大多数场景。

  2. 动态更新: 支持动态更新,无需重启。

  3. I/O 压力: 增加线程会增加磁盘 I/O 压力。

  4. 合理设置: 根据写入负载调整。

  5. 监控建议: 监控刷新时间和 I/O 使用率。