CREATE CLUSTER
View as MarkdownCREATE CLUSTER creates a new cluster.
Syntax
CREATE CLUSTER <cluster_name> (
SIZE = <text>
[, REPLICATION FACTOR = <int>]
[, MANAGED = <bool>]
[, AUTO SCALING STRATEGY = (
ON HYDRATION (
HYDRATION SIZE = <text>
[, LINGER DURATION = <interval>]
)
)]
);
| Syntax element | Description | ||||||
|---|---|---|---|---|---|---|---|
<cluster_name>
|
A name for the cluster. | ||||||
SIZE
|
The size of the resource allocations for the cluster. For valid size values, see Available sizes. |
||||||
REPLICATION FACTOR
|
Optional. The number of replicas to provision for the cluster. See Replication factor for details. Default: |
||||||
MANAGED
|
Optional. Whether to automatically manage the cluster’s replicas based on the configured size and replication factor. Specify
💡 Tip: When getting started with Materialize, we recommend starting with managed
clusters.
Default: |
||||||
AUTO SCALING STRATEGY
|
Optional. While the cluster has un-hydrated objects, provisions an extra burst replica at a larger size to speed up hydration. The steady-size replicas will continue to run, and hydrate in parallel. Once a steady-size replica hydrates and catches up with the burst, the burst replica is retired. This helps optimize costs while speeding up hydration. Only available on managed clusters. Specify a single
|
Details
Initial state
Each Materialize region initially contains a pre-installed cluster
named quickstart with a size of 25cc and a replication factor of 1. You
can drop or alter this cluster to suit your needs.
Choosing a cluster
When performing an operation that requires a cluster, you must specify which cluster you want to use. Not explicitly naming a cluster uses your session’s active cluster.
To show your session’s active cluster, use the SHOW command:
SHOW cluster;
To switch your session’s active cluster, use the SET command:
SET cluster = other_cluster;
Resource isolation
Clusters provide resource isolation. Each cluster provisions a dedicated pool of CPU, memory, and, optionally, scratch disk space.
All workloads on a given cluster will compete for access to these compute resources. However, workloads on different clusters are strictly isolated from one another. A given workload has access only to the CPU, memory, and scratch disk of the cluster that it is running on.
Clusters are commonly used to isolate different classes of workloads. For
example, you could place your development workloads in a cluster named
dev and your production workloads in a cluster named prod.
Available sizes
The SIZE option determines the amount of compute resources available to the
cluster.
Materialize offers the following cc cluster sizes:
25cc50cc100cc200cc300cc400cc600cc800cc1200cc1600cc3200cc6400cc128C256C512C
The resource allocations are proportional to the number in the size name. For
example, a cluster of size 600cc has 2x as much CPU, memory, and disk as a
cluster of size 300cc, and 1.5x as much CPU, memory, and disk as a cluster of
size 400cc. To determine the specific resource allocations for a size,
query the mz_cluster_replica_sizes table.
mz_cluster_replica_sizes table may change at any
time. You should not rely on them for any kind of capacity planning.
Clusters of larger sizes can process data faster and handle larger data volumes.
| Cluster size | Compute Credits/Hour | Total Capacity | Notes |
|---|---|---|---|
| M.1-nano | 0.75 | 26 GiB | |
| M.1-micro | 1.5 | 53 GiB | |
| M.1-xsmall | 3 | 106 GiB | |
| M.1-small | 6 | 212 GiB | |
| M.1-medium | 9 | 318 GiB | |
| M.1-large | 12 | 424 GiB | |
| M.1-1.5xlarge | 18 | 636 GiB | |
| M.1-2xlarge | 24 | 849 GiB | |
| M.1-3xlarge | 36 | 1273 GiB | |
| M.1-4xlarge | 48 | 1645 GiB | |
| M.1-8xlarge | 96 | 3290 GiB | |
| M.1-16xlarge | 192 | 6580 GiB | Available upon request |
| M.1-32xlarge | 384 | 13160 GiB | Available upon request |
| M.1-64xlarge | 768 | 26320 GiB | Available upon request |
| M.1-128xlarge | 1536 | 52640 GiB | Available upon request |
Materialize also offers some legacy t-shirt cluster sizes for upsert sources.
In most cases, you should not use legacy t-shirt sizes. We recommend using cc sizes for all new clusters, and recommend migrating existing legacy-sized clusters to cc sizes.
The legacy size information is provided for completeness.
When legacy sizes are enabled for a region, the following sizes are available:
3xsmall2xsmallxsmallsmallmediumlargexlarge2xlarge3xlarge4xlarge5xlarge6xlarge
See also:
Cluster resizing
You can change the size of a cluster to respond to changes in your workload
using ALTER CLUSTER.
As of v26.35, resizing is graceful and incurs no downtime: Materialize provisions new replicas at the target size, waits for them to hydrate, then retires the old ones. See Monitoring a resize.
In versions before v26.35, resizing could incur downtime, and zero-downtime
resizing required the WAIT UNTIL READY option.
See the reference documentation for ALTER CLUSTER for more details
on cluster resizing.
Autoscaling
When you create an index, materialized view, or Kafka upsert source, or when a cluster restarts, the cluster must hydrate the affected objects before they can serve results. Hydration reads the input data and rebuilds in-memory state, and its speed scales with the cluster size.
The AUTO SCALING STRATEGY (ON HYDRATION) option lets a cluster automatically
provision an extra burst replica at the configured HYDRATION SIZE while it has
un-hydrated objects. This speeds up hydration without manually scaling the
cluster up before hydration and back down afterward. The steady-size replicas
continue hydrating in parallel, and once one of them catches up with the burst,
the burst replica lingers for the LINGER DURATION and is then removed. The
burst replica is an ordinary cluster replica, billed only for the time it is
provisioned. See Usage & billing for details.
AUTO SCALING STRATEGY (ON HYDRATION) is particularly useful for blue/green
deployments, where a new cluster must hydrate before the
cutover. It is only available on managed clusters, and cannot be combined
with a cluster SCHEDULE other than the default MANUAL.
For example, the following cluster can provision a burst replica of size 800cc:
CREATE CLUSTER fast_start (
SIZE = '100cc',
AUTO SCALING STRATEGY = (
ON HYDRATION (
HYDRATION SIZE = '800cc',
LINGER DURATION = '15s'
)
)
);
You can specify the following options:
| Option | Description |
|---|---|
HYDRATION SIZE |
The size of the burst replica provisioned while the cluster has un-hydrated objects. Must differ from the cluster’s steady SIZE. Choose a larger size to speed up hydration. |
LINGER DURATION |
Optional. How long the burst replica lingers after a steady-size replica catches up, before it is removed. Default: 0s. |
Provisioning the burst replica requires enough compute capacity to run it. In Materialize Self-Managed, this means your Kubernetes cluster must have enough spare resources (for example, available nodes) to schedule the burst replica.
The burst is best-effort and never blocks the cluster: if the burst replica cannot be provisioned, the steady-size replicas still come up and hydrate as usual, as long as there are enough resources for them.
To remove the autoscaling strategy from a cluster, use ALTER CLUSTER ... RESET (AUTO SCALING STRATEGY) or set an empty strategy with AUTO SCALING STRATEGY = ().
You can inspect the configured strategy and any in-flight burst in the
mz_internal.mz_cluster_auto_scaling_strategies
catalog view.
Replication factor
The REPLICATION FACTOR option determines the number of replicas provisioned
for the cluster. Each replica of the cluster provisions a new pool of compute
resources to perform exactly the same computations on exactly the same data.
Provisioning more than one replica improves fault tolerance. Clusters with multiple replicas can tolerate failures of the underlying hardware that cause a replica to become unreachable. As long as one replica of the cluster remains available, the cluster can continue to maintain dataflows and serve queries.
Materialize makes the following guarantees when provisioning replicas:
- Replicas of a given cluster are never provisioned on the same underlying hardware.
- Replicas of a given cluster are spread as evenly as possible across the underlying cloud provider’s availability zones.
Materialize automatically assigns names to replicas like r1, r2, etc. You
can view information about individual replicas in the console and the system
catalog, but you cannot directly modify individual replicas.
You can pause a cluster’s work by specifying a replication factor of 0. Doing
so removes all replicas of the cluster. Any indexes, materialized views,
sources, and sinks on the cluster will cease to make progress, and any queries
directed to the cluster will block. You can later resume the cluster’s work by
using ALTER CLUSTER to set a nonzero replication factor.
A common misconception is that increasing a cluster’s replication factor will increase its capacity for work. This is not the case. Increasing the replication factor increases the fault tolerance of the cluster, not its capacity for work. Replicas are exact copies of one another: each replica must do exactly the same work (i.e., maintain the same dataflows and process the same queries) as all the other replicas of the cluster.
To increase a cluster’s capacity, you should instead increase the cluster’s size.
Credit usage
Each replica of the cluster consumes credits at a rate determined by the cluster’s size:
| Size | Legacy t-shirt size | Credits per replica per hour |
|---|---|---|
25cc |
3xsmall |
0.25 |
50cc |
2xsmall |
0.5 |
100cc |
xsmall |
1 |
200cc |
small |
2 |
300cc |
 | 3 |
400cc |
medium |
4 |
600cc |
 | 6 |
800cc |
large |
8 |
1200cc |
 | 12 |
1600cc |
xlarge |
16 |
3200cc |
2xlarge |
32 |
6400cc |
3xlarge |
64 |
128C |
4xlarge |
128 |
256C |
5xlarge |
256 |
512C |
6xlarge |
512 |
Credit usage is measured at a one second granularity. For a given replica,
credit usage begins when a CREATE CLUSTER or ALTER CLUSTER statement
provisions the replica and ends when an ALTER CLUSTER or DROP CLUSTER
statement deprovisions the replica.
A cluster with a replication factor of zero uses no credits.
As an example, consider the following sequence of events:
| Time | Event |
|---|---|
| 2023-08-29 3:45:00 | CREATE CLUSTER c (SIZE '400cc', REPLICATION FACTOR 2) |
| 2023-08-29 3:45:45 | ALTER CLUSTER c SET (REPLICATION FACTOR 1) |
| 2023-08-29 3:47:15 | DROP CLUSTER c |
Cluster c will have consumed 0.4 credits in total:
- Replica
c.r1was provisioned from 3:45:00 to 3:47:15, consuming 0.3 credits. - Replica
c.r2was provisioned from 3:45:00 to 3:45:45, consuming 0.1 credits.
Known limitations
Clusters have several known limitations:
- When a cluster using legacy cc size of
3200ccor larger uses multiple replicas, those replicas are not guaranteed to be spread evenly across the underlying cloud provider’s availability zones.
Examples
Basic
Create a cluster with two 200cc replicas:
CREATE CLUSTER c1 (SIZE = '200cc', REPLICATION FACTOR = 2);
Empty
Create a cluster with no replicas:
CREATE CLUSTER c1 (SIZE '100cc', REPLICATION FACTOR = 0);
You can later add replicas to this cluster with ALTER CLUSTER.
Privileges
The privileges required to execute this statement are:
CREATECLUSTERprivileges on the system.