Anything specific I should look out or? I see the refresh and index as well as the bulk pools:
{
  "thread_pool": {
    "bulk": {
      "threads": 10,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 10,
      "completed": 29826938
    },
    "fetch_shard_started": {
      "threads": 0,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 0,
      "completed": 0
    },
    "fetch_shard_store": {
      "threads": 0,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 0,
      "completed": 0
    },
    "flush": {
      "threads": 1,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 5,
      "completed": 453
    },
    "force_merge": {
      "threads": 1,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 1,
      "completed": 13
    },
    "generic": {
      "threads": 4,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 4,
      "completed": 726806
    },
    "get": {
      "threads": 10,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 10,
      "completed": 304772
    },
    "index": {
      "threads": 10,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 10,
      "completed": 15074
    },
    "listener": {
      "threads": 5,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 5,
      "completed": 147613
    },
    "management": {
      "threads": 5,
      "queue": 0,
      "active": 1,
      "rejected": 0,
      "largest": 5,
      "completed": 6501816
    },
    "refresh": {
      "threads": 5,
      "queue": 0,
      "active": 1,
      "rejected": 0,
      "largest": 5,
      "completed": 30810420
    },
    "search": {
      "threads": 16,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 16,
      "completed": 30804051
    },
    "snapshot": {
      "threads": 0,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 0,
      "completed": 0
    },
    "warmer": {
      "threads": 5,
      "queue": 0,
      "active": 2,
      "rejected": 0,
      "largest": 5,
      "completed": 63761738
    },
    "watcher": {
      "threads": 0,
      "queue": 0,
      "active": 0,
      "rejected": 0,
      "largest": 0,
      "completed": 0
    }
  }
}
This snapshot is from right now and I guess there isn't much going on.
Would there be a benefit not using _bulk all the time?
The implementation can always index multiple documents (of the same type, in my case) at once and indexing a single document isn't a special case => just a _bulk with one document. However: the majority of  indexing requests deal with only a single document.
Looking at the node stats, this is easily reflected in the completed of bulk vs. index pool. TBH I'm surprised there are even ~15k index.completed because there's no code we've which performs such operations but maybe that's just something else (Kibana?).
OTOH, when I read up your link about the pools, index and bulk have the same default configuration characteristics so this may be a dead end anyway.
Thanks, I actually did that already in the meantime. Since yesterday I completely removed all refresh=wait_for and bumped the refresh_interval to 1s.
In certain areas, user interaction do now directly cause index requests with refresh=true. Since users are hard to control, this could be anything from 0 to 100 concurrently.
I expected this to to not go smooth, but I couldn't detect any real problems so far. CPU load is still stable (but more fluctuating; change was deployed around 14pm in that chart):
Should I be more careful with too many concurrent index operations performing refresh=true?
Thank you very much so far!