Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion modules/ROOT/nav.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,6 @@
*** xref:manage:kubernetes/k-configure-helm-chart.adoc[Customize the Helm Chart]
*** xref:manage:kubernetes/k-cluster-property-configuration.adoc[Cluster Properties]
*** xref:manage:kubernetes/k-manage-topics.adoc[Manage Topics]
*** xref:manage:kubernetes/k-cloud-topics.adoc[Cloud Topics]
*** xref:manage:kubernetes/k-manage-connectors.adoc[Manage Kafka Connect]
*** xref:manage:kubernetes/storage/index.adoc[Storage]
**** xref:manage:kubernetes/storage/k-volume-types.adoc[Volume Types]
Expand All @@ -117,6 +116,9 @@
***** xref:manage:kubernetes/storage/k-emptydir.adoc[emptyDir]
**** xref:manage:kubernetes/storage/k-resize-persistentvolumes.adoc[Expand PersistentVolumes]
**** xref:manage:kubernetes/storage/k-delete-persistentvolume.adoc[Delete PersistentVolumes]
*** xref:manage:kubernetes/cloud-topics/index.adoc[Cloud Topics]
**** xref:manage:kubernetes/cloud-topics/k-cloud-topics.adoc[Use Cloud Topics]
**** xref:manage:kubernetes/cloud-topics/k-cloud-topics-whole-cluster-restore.adoc[Whole Cluster Restore for Cloud Topics]
*** xref:manage:kubernetes/tiered-storage/index.adoc[Tiered Storage]
**** xref:manage:kubernetes/tiered-storage/k-tiered-storage.adoc[Use Tiered Storage]
**** xref:manage:kubernetes/tiered-storage/k-fast-commission-decommission.adoc[]
Expand Down
2 changes: 1 addition & 1 deletion modules/get-started/pages/release-notes/operator.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ When you enable Schema Registry authentication, you can control which users and

The Redpanda custom resource supports Cloud Topics in Kubernetes deployments. You can configure topics to use cloud storage as the primary backing store by setting the appropriate storage mode properties.

Cloud Topics in Kubernetes provide the same cost savings and architectural benefits as self-managed deployments. You configure them declaratively through the Redpanda custom resource. For setup instructions, see xref:manage:kubernetes/k-cloud-topics.adoc[Cloud Topics for Kubernetes].
Cloud Topics in Kubernetes provide the same cost savings and architectural benefits as self-managed deployments. You configure them declaratively through the Redpanda custom resource. For setup instructions, see xref:manage:kubernetes/cloud-topics/k-cloud-topics.adoc[Cloud Topics for Kubernetes].

=== Group-based access control (GBAC)

Expand Down
32 changes: 32 additions & 0 deletions modules/manage/pages/kubernetes/cloud-topics/index.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
= Cloud Topics in Kubernetes
:description: Cloud Topics use object storage as the primary data tier to optimize for latency-tolerant, high-throughput workloads.
:page-layout: index
:page-categories: Management
:env-kubernetes: true

{description}

Because the data lives in object storage, Cloud Topics also support recovery after total cluster loss: a xref:manage:kubernetes/cloud-topics/k-cloud-topics-whole-cluster-restore.adoc[whole cluster restore] brings the topics back in cloud storage mode with their data.

== How Cloud Topics work

With standard Redpanda topics, data is replicated across brokers using Raft consensus and stored locally on each replica. Cloud Topics change this model: data is acknowledged only after it is uploaded to object storage, making object storage the source of truth for both replication and consumption.

include::develop:partial$cloud-topics-overview.adoc[tag=latency-explanation]

=== Storage modes

Redpanda supports multiple storage modes that you can set at the cluster or topic level using the `redpanda.storage.mode` property:

include::manage:partial$storage-modes-table.adoc[tag=storage-modes]

=== Ideal use cases

include::develop:partial$cloud-topics-use-cases.adoc[tag=use-cases]

=== Limitations

include::develop:partial$cloud-topics-limitations.adoc[tag=limitations]
include::develop:partial$cloud-topics-limitations.adoc[tag=latency-limitation]

== Suggested reading
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
= Restore Cloud Topics with Whole Cluster Restore
:description: Recover Cloud Topics onto a new Kubernetes cluster after total cluster loss, with topics returning in cloud storage mode and no manual data migration.
:page-topic-type: how-to
:page-categories: Management, High Availability, Disaster Recovery
:personas: platform_admin
:learning-objective-1: Deploy a target cluster that restores Cloud Topics from object storage on bootstrap
:learning-objective-2: Verify that restored topics retain cloud storage mode and their data
:learning-objective-3: Identify the recovery point for Cloud Topics data
:env-kubernetes: true

You can recover xref:manage:kubernetes/cloud-topics/k-cloud-topics.adoc[Cloud Topics] onto a new cluster after the loss of an entire Redpanda cluster. Because object storage is the source of truth for Cloud Topics, a xref:manage:kubernetes/tiered-storage/k-whole-cluster-restore.adoc[Whole Cluster Restore] brings the topics back in cloud storage mode, with their data and offsets, ready to serve producers and consumers again.

After reading this page, you will be able to:

* [ ] {learning-objective-1}
* [ ] {learning-objective-2}
* [ ] {learning-objective-3}
[NOTE]
====
include::shared:partial$enterprise-license.adoc[]
====

== How Whole Cluster Restore works with Cloud Topics

Cloud Topics acknowledge writes only after the data is uploaded to object storage, so the bucket already holds both the topic data and the cluster metadata that Whole Cluster Restore needs. When you bootstrap a new (target) cluster against the same bucket with restore enabled, Redpanda:

* Recreates the topics from the most recent cluster metadata upload.
* Restores Cloud Topics in cloud storage mode (`redpanda.storage.mode=cloud`). Topics do not fall back to Tiered Storage or local storage.
* Restores users, ACLs, schemas, consumer offsets, and cluster configuration, as described in xref:manage:kubernetes/tiered-storage/k-whole-cluster-restore.adoc[Whole Cluster Restore].

NOTE: Topics without per-topic archival to object storage are restored empty, with their definitions but no data. This does not apply to Cloud Topics (`redpanda.storage.mode=cloud`), whose data always resides in object storage and is fully restored.

Restored Cloud Topics are immediately writable. New records continue from the next offset after the restored high watermark.

=== Recovery point

Whole Cluster Restore recovers each Cloud Topic partition up to the point covered by the most recent topic metadata in object storage. Records that were acknowledged shortly before the cluster loss might not yet be reflected in that metadata and are not restored.

For planned scenarios, such as migrations or recovery drills, stop producers and wait for metadata uploads to complete before removing the source cluster. This results in a restore with no data loss. To make uploads more frequent, see xref:manage:kubernetes/tiered-storage/k-whole-cluster-restore.adoc#manage-source-metadata-uploads[Manage source metadata uploads].

== Prerequisites

You must have the following:

* Redpanda v26.1 or later on both the source and target clusters. Cloud Topics require v26.1 or later.
* xref:manage:kubernetes/cloud-topics/k-cloud-topics.adoc[Cloud Topics enabled] on the source cluster, with cluster metadata uploads enabled (`enable_cluster_metadata_upload_loop` is enabled by default).
* The object storage bucket or container used by the source cluster. The restore reads everything from this bucket, so it must survive the cluster loss.
* A valid Redpanda Enterprise license for the target cluster.

The limitations in xref:manage:kubernetes/tiered-storage/k-whole-cluster-restore.adoc#limitations[Whole Cluster Restore] also apply to clusters with Cloud Topics.
Comment thread
david-yu marked this conversation as resolved.

== Start a target cluster with restore enabled

Here we describe how to deploy a new, empty cluster configured with the same object storage settings as the failed source cluster, with Cloud Topics enabled, and with restore on bootstrap enabled.

CAUTION: Before you bootstrap the target cluster against the bucket, make sure that the failed source cluster is fully destroyed, including any persistent volumes. If brokers from the previous cluster are still running against the same bucket, the storage subsystems of the two clusters may interfere with each other.

[tabs]
======
Operator::
+
--
.`redpanda-cluster.yaml`
[,yaml]
----
apiVersion: cluster.redpanda.com/v1alpha2
kind: Redpanda
metadata:
name: redpanda
spec:
chartRef: {}
clusterSpec:
storage:
tiered:
<object-storage-settings>
config:
cluster:
cloud_topics_enabled: true
cloud_storage_attempt_cluster_restore_on_bootstrap: true
----
```bash
kubectl apply -f redpanda-cluster.yaml --namespace <namespace>
```
--
Helm::
+
--
[tabs]
====
--values::
+
.`cluster-restore.yaml`
[,yaml]
----
storage:
tiered:
<object-storage-settings>
config:
cluster:
cloud_topics_enabled: true
cloud_storage_attempt_cluster_restore_on_bootstrap: true
----
+
```bash
helm upgrade --install redpanda redpanda/redpanda --namespace <namespace> --create-namespace \
--values cluster-restore.yaml
```

--set::
+
```bash
helm upgrade --install redpanda redpanda/redpanda --namespace <namespace> --create-namespace \
--set storage.tiered.<object-storage-settings> \
--set config.cluster.cloud_topics_enabled=true \
--set config.cluster.cloud_storage_attempt_cluster_restore_on_bootstrap=true
```
====
--
======

* `storage.tiered`: Configure the target cluster with the same object storage settings as the failed source cluster, including the same bucket or container.
* `config.cluster.cloud_topics_enabled`: Enable Cloud Topics on the target cluster so that restored topics can be served in cloud storage mode.
* `config.cluster.cloud_storage_attempt_cluster_restore_on_bootstrap`: Run the restore automatically when the new cluster bootstraps. No manual restore command is required.

The restore runs while the cluster starts. Cluster size does not need to match the source cluster, but the target cluster must be empty of user-managed data.

== Verify that the restore is complete

. Run the following command until it returns `inactive`:
+
[,bash]
----
rpk cluster storage restore status
----

. Check if a rolling restart is required:
+
[,bash]
----
rpk cluster config status
----
+
Example output when a restart is required:
+
[,bash]
----
NODE CONFIG-VERSION NEEDS-RESTART INVALID UNKNOWN
1 4 true [] []
----

. If a restart is required, perform a xref:manage:kubernetes/k-rolling-restart.adoc[rolling restart].

. After the restore completes, set `cloud_storage_attempt_cluster_restore_on_bootstrap` back to `false` so that future bootstraps of the same deployment do not attempt another restore. Update the value in your Redpanda resource or Helm values, then perform a rolling restart if `rpk cluster config status` reports one is needed.

== Verify restored Cloud Topics

. Confirm that the topic is restored in cloud storage mode:
+
[,bash]
----
rpk topic describe <topic-name> -c
----
+
The output includes `redpanda.storage.mode` with the value `cloud`:
+
----
redpanda.storage.mode cloud DYNAMIC_TOPIC_CONFIG
----
Comment thread
coderabbitai[bot] marked this conversation as resolved.
+
If the topic inherited cloud storage mode from the cluster default (`default_redpanda_storage_mode`), the source column shows `DEFAULT_CONFIG` instead of `DYNAMIC_TOPIC_CONFIG`.

. Confirm that the partitions contain the restored data:
+
[,bash]
----
rpk topic describe <topic-name> -p
----
+
The high watermark of each partition reflects the restored records.

. Confirm that the topic accepts new records:
+
[,bash]
----
echo "restore-probe" | rpk topic produce <topic-name>
----
+
The record is produced at the next offset after the restored high watermark.

When verification succeeds, redirect your application workload to the new cluster. Make sure to update your application code to use the new addresses of your brokers.

== Next steps

* xref:manage:kubernetes/cloud-topics/k-cloud-topics.adoc[]
* xref:manage:kubernetes/tiered-storage/k-whole-cluster-restore.adoc[]

== Suggested reading

* xref:manage:kubernetes/tiered-storage/k-topic-recovery.adoc[Topic recovery], to restore only a subset of topic data
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
:learning-objective-2: Enable and create Cloud Topics using the Redpanda Operator or Helm
:learning-objective-3: Verify topic storage mode configuration
:env-kubernetes: true
:page-aliases: manage:kubernetes/k-cloud-topics.adoc

include::develop:partial$cloud-topics-overview.adoc[tag=intro]

Expand All @@ -15,26 +16,7 @@ After reading this page, you will be able to:
* [ ] {learning-objective-2}
* [ ] {learning-objective-3}

== How Cloud Topics work

With standard Redpanda topics, data is replicated across brokers using Raft consensus and stored locally on each replica. Cloud Topics change this model: data is acknowledged only after it is uploaded to object storage, making object storage the source of truth for both replication and consumption.

include::develop:partial$cloud-topics-overview.adoc[tag=latency-explanation]

=== Storage modes

Redpanda supports multiple storage modes that you can set at the cluster or topic level using the `redpanda.storage.mode` property:

include::manage:partial$storage-modes-table.adoc[tag=storage-modes]

=== Ideal use cases

include::develop:partial$cloud-topics-use-cases.adoc[tag=use-cases]

=== Limitations

include::develop:partial$cloud-topics-limitations.adoc[tag=limitations]
include::develop:partial$cloud-topics-limitations.adoc[tag=latency-limitation]
For an overview of how Cloud Topics work, including storage modes, use cases, and limitations, see xref:manage:kubernetes/cloud-topics/index.adoc[Cloud Topics in Kubernetes].

== Prerequisites

Expand Down Expand Up @@ -483,5 +465,6 @@ The `source` field indicates whether the value was inherited from the cluster de

== Suggested reading

- xref:manage:kubernetes/cloud-topics/k-cloud-topics-whole-cluster-restore.adoc[Restore Cloud Topics with Whole Cluster Restore]
- xref:manage:kubernetes/tiered-storage/k-tiered-storage.adoc[Use Tiered Storage on Kubernetes]
- xref:manage:kubernetes/k-manage-topics.adoc[Manage Topics with the Redpanda Operator]
14 changes: 0 additions & 14 deletions modules/manage/partials/tiered-storage.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,6 @@ Replace the following placeholders:
+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]

include::manage:partial$kubernetes/extraclusterconfig.adoc[]

===== **Configure access with access keys**

. In AWS, grant an IAM user the following permissions to read and create objects in your buckets:
Expand Down Expand Up @@ -261,8 +259,6 @@ Replace the following placeholders:
+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]

include::manage:partial$kubernetes/extraclusterconfig.adoc[]

include::manage:partial$tiered-storage/aws-kms-key.adoc[leveloffset=+4]

==== Google Cloud Storage
Expand Down Expand Up @@ -348,8 +344,6 @@ Replace the following placeholders:
+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]

include::manage:partial$kubernetes/extraclusterconfig.adoc[]

===== **Configure access with access keys**

To configure access to Google Cloud Storage with access keys instead of an IAM role:
Expand Down Expand Up @@ -469,8 +463,6 @@ Replace the following placeholders:
+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]

include::manage:partial$kubernetes/extraclusterconfig.adoc[]

include::manage:partial$tiered-storage/gcp-kms-key.adoc[leveloffset=+4]

==== Microsoft ABS/ADLS
Expand Down Expand Up @@ -579,8 +571,6 @@ include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]

The `serviceAccount` annotations and the `statefulset` Pod labels are essential for the Azure webhook to inject the necessary Azure-specific environment variables and the projected service account token volume into the pods. For more information, visit https://learn.microsoft.com/en-us/azure/aks/workload-identity-overview?tabs=dotnet[Microsoft Entra Workload ID with Azure Kubernetes Service (AKS)^].

include::manage:partial$kubernetes/extraclusterconfig.adoc[]

===== **Configure access with account access keys**

. Get an account access key for the Azure container that Redpanda will run on. For information on how to view your account access keys, see the https://learn.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json&tabs=azure-portal#view-account-access-keys[Azure documentation^].
Expand Down Expand Up @@ -682,8 +672,6 @@ Replace the following placeholders:
+
include::manage:partial$kubernetes/reset-object-storage-properties.adoc[]

include::manage:partial$kubernetes/extraclusterconfig.adoc[]

- For information about how to grant access from an internet IP range (if you need to open additional routes/ports between your broker nodes and Azure Blob Storage; for example, in a hybrid cloud deployment), see the https://learn.microsoft.com/en-us/azure/storage/common/storage-network-security?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json&tabs=azure-portal#grant-access-from-an-internet-ip-range[Microsoft documentation^].

- For more information about Shared Key authentication, see the https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key[Microsoft documentation^].
Expand Down Expand Up @@ -1100,8 +1088,6 @@ A constant stream of data is necessary to build up the log segments and roll the
To see new log segments faster, you can edit the `segment.bytes` topic-level property. Or, you can edit the xref:reference:properties/object-storage-properties.adoc#cloud_storage_segment_max_upload_interval_sec[`cloud_storage_segment_max_upload_interval_sec`] property, which sets the frequency with which new segments are generated in Tiered Storage, even if the local segment has not exceeded the `segment.bytes` size or the `segment.ms` age.
====

NOTE: Starting in version 22.3, when you delete a topic in Redpanda, the data is also deleted in object storage. See <<Enable Tiered Storage for specific topics>>.

=== Idle timeout

You can configure Redpanda to start a remote write periodically. This is useful if the ingestion rate is low and the segments are kept open for long periods of time. You specify a number of seconds for the timeout, and if that time has passed since the previous write and the partition has new data, Redpanda starts a new write. This limits data loss in the event of catastrophic failure and adds a guarantee that you only lose the specified number of seconds of data.
Expand Down
Loading
Loading