docs/deployment/cluster-sizing.md
In this guide, we discuss how to size your Quickwit cluster and nodes. As shown in the architecture section, a Quickwit cluster has 5 main components: the Indexers, Searchers, Control Plane, Metastore and, Janitor. Each component has different resource requirements and can be scaled independently. We will also discuss how to size the metastore PostgreSQL database.
:::note
This guide provides general guidelines. The actual resource requirements depend strongly on your workload. We recommend monitoring the resource usage and adjusting the cluster size accordingly.
:::
Here are some high-level guidelines to size your Indexer nodes:
:::note
To utilize all CPUs on Indexer nodes that have more than 4 cores, your indexing workload needs to be broken down into multiple indexing pipelines. This can be achieved by creating multiple indexes or by using a partitioned data source such as Kafka or the ingest API (v2).
:::
Search performance is highly dependent on the workload. For example, term queries are usually cheaper than aggregations. A good starting point for dimensioning Searcher nodes:
One strength of Quickwit is that its Searchers are stateless, which makes it easy to scale them up and down based on the workload. Scale the number of Searcher nodes based on:
The Control Plane, Metastore and, Janitor are lightweight components.
Control Plane: A cluster must have only one Control Plane. It needs a single core and 2GB of RAM. It doesn't require any disk.
Metastore: A cluster must have exactly one Metastore when using the file-backed metastore. When using the PostgreSQL metastore, you can run one or several Metastore pods for high availability (HA). The Metastore requires a single core and 2GB of RAM. For clusters handling hundreds of indexes, you may increase the size to 2 cores and 4GB of RAM. It doesn't write to disk (when using PostgreSQL, the database handles persistence).
Janitor: A cluster must have only one Janitor. In general, it requires 1 core and 2GB of RAM and doesn't use the disk. If you use the delete API, the Janitor should be dimensioned like an indexer.
For experimentations and small scale POCs, it is possible to deploy all the services on a single node (see tutorial). We recommend at least 2 cores and 8GB of RAM.
For most use cases, a PostgreSQL instance with 4GB of RAM and 1 core is sufficient: