Skip to content

Conversation

@paulohtb6
Copy link
Collaborator

@paulohtb6 paulohtb6 commented Nov 18, 2025

Description

Explain what tasks are and their relationship in Shadowing.

Review deadline: 20th Nov

Page previews

Modified Documentation Pages:

Checks

  • New feature
  • Content gap
  • Support Follow-up
  • Small fix (typos, links, copyedits, etc)

@paulohtb6 paulohtb6 requested a review from a team as a code owner November 18, 2025 03:10
@netlify
Copy link

netlify bot commented Nov 18, 2025

Deploy Preview for redpanda-docs-preview ready!

Name Link
🔨 Latest commit 726f36f
🔍 Latest deploy log https://app.netlify.com/projects/redpanda-docs-preview/deploys/691e20d02dcac600085e6dfc
😎 Deploy Preview https://deploy-preview-1467--redpanda-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@paulohtb6 paulohtb6 changed the base branch from main to beta November 18, 2025 03:10
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 18, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

📝 Walkthrough

Walkthrough

This PR updates documentation for Redpanda version 25.3 beta release. Changes include: bumping Antora version metadata from 25.2 to 25.3 with prerelease flag, adding beta branch to GitHub Actions workflow triggers, restructuring navigation to emphasize disaster recovery features, and significantly expanding Shadowing documentation (a new cross-region replication feature for disaster recovery). Additionally, Console Linux deployment documentation is expanded with OS package installation steps, Admin API documentation is reorganized to include ConnectRPC endpoints available in v25.3+, Schema Registry mode documentation is enhanced with READONLY/READWRITE/IMPORT modes, Iceberg documentation transitions from AWS Glue to GCP BigLake integration, and comprehensive rpk shadow command reference pages are added. Multiple pages are reorganized or moved between module hierarchies with updated aliases and cross-references.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

  • Navigation restructuring: Verify the modules/ROOT/nav.adoc changes maintain logical hierarchy and that all new disaster recovery / Shadowing entries are properly organized
  • Cross-reference validation: Multiple pages moved between hierarchies and given new aliases; ensure all xref links in release notes, existing docs, and new pages resolve correctly and point to intended destinations
  • Shadowing documentation completeness: Review the new Shadowing feature docs (overview, setup, monitor, failover, failover-runbook) for internal consistency, command accuracy, and alignment with actual feature capabilities
  • Metadata consistency: Verify page-aliases in multiple files (high-availability.adoc, remote-read-replicas.adoc) and antora.yml version/prerelease settings align with documentation structure changes
  • Release notes restructuring: The modules/get-started/pages/release-notes/redpanda.adoc undergoes substantial reorganization; validate section renames, content replacements (AWS Glue → BigLake, legacy SASL → Shadowing), and API documentation updates are accurate
  • Admin API documentation split: Confirm Admin API reference pages correctly distinguish between legacy REST endpoints and new ConnectRPC endpoints, with proper version gating

Possibly related PRs

  • Refine properties list #1451 — Applies identical code-level changes to .github/workflows/build.yml (adding beta branch) and matching Antora metadata/docs structural updates
  • dr: adds shadowing docs #1381 — Adds and modifies the same Shadowing documentation pages (index, failover runbooks, navigation entries)
  • Fix version #1438 — Modifies antora.yml and local-antora-playbook.yml with overlapping version/branch settings and navigation restructuring

Suggested reviewers

  • mattschumpert
  • Feediver1
  • micheleRP

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description lacks critical details: it provides no Jira ticket link (shows placeholder), no page previews, no checked category, and minimal context beyond the objective statement. Complete the description by adding the actual Jira ticket URL, providing page preview links from the Netlify bot, and checking the appropriate change category (likely 'Content gap' or 'New feature').
Title check ❓ Inconclusive The title 'Shadow tasks' is vague and does not clearly convey the main change. It uses a non-descriptive term that lacks context about what content was added or modified. Make the title more descriptive by specifying the type of content or change, such as 'Add documentation for Shadowing tasks' or 'Explain Shadowing task relationships and roles'.
✅ Passed checks (1 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

Tip

📝 Customizable high-level summaries are now available in beta!

You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.

  • Provide your own instructions using the high_level_summary_instructions setting.
  • Format the summary however you like (bullet lists, tables, multi-section layouts, contributor stats, etc.).
  • Use high_level_summary_in_walkthrough to move the summary from the description to the walkthrough section.

Example instruction:

"Divide the high-level summary into five sections:

  1. 📝 Description — Summarize the main change in 50–60 words, explaining what was done.
  2. 📓 References — List relevant issues, discussions, documentation, or related PRs.
  3. 📦 Dependencies & Requirements — Mention any new/updated dependencies, environment variable changes, or configuration updates.
  4. 📊 Contributor Summary — Include a Markdown table showing contributions:
    | Contributor | Lines Added | Lines Removed | Files Changed |
  5. ✔️ Additional Notes — Add any extra reviewer context.
    Keep each section concise (under 200 words) and use bullet or numbered lists for clarity."

Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@paulohtb6
Copy link
Collaborator Author

Assumes #1466 has been merged

Consider this commit as part of this PR 0a35082

@paulohtb6 paulohtb6 changed the base branch from beta to rpk-shadow November 18, 2025 03:11
Comment on lines +75 to +83
The **Consumer Group Shadowing task** replicates consumer group offsets and membership information from the source cluster. This ensures that consumer applications can resume processing from the correct position after failover.

The task is controlled by the `consumer_offset_sync_options` configuration section, which includes:

* **Group filters**: Determines which consumer groups have their offsets replicated
* **Sync interval**: How frequently to synchronize consumer group offsets
* **Offset clamping**: Automatically adjusts replicated offsets to valid ranges on the shadow cluster

This task runs on brokers that host the `__consumer_offsets` topic and continuously tracks consumer group coordinators to optimize offset synchronization.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if this is too in the weeds but it may be helpful to point out a couple of things:

  • This only replicated committed offsets for active Shadow Topics. So if "group-a" contains "topic-1", "topic-2", and "topic-3", and "topic-1" is an active Shadow Topic and "topic-2" is a failed over Shadow Topic and "topic-3" isn't being Shadowed at all, then only committed offsets for "topic-1" in "group-a" will be replicated
  • We clamp offsets upon commit on the Shadow Cluster - if the committed offset on the source cluster is above the HWM of the shadow partition, we clamp the offset to the HWM before we commit them to the Shadow Cluster.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that's fine. Your example is great, so I'll steal that 🚀

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let me know if that works
ab5a8c5

Comment on lines 92 to 94
* **ACL filters**: Determines which security policies replicate
* **Sync interval**: How frequently to synchronize security settings
* **Resource matching**: Controls which ACL resources (topics, groups, cluster) are included
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Resource matching is part of the ACL filters

=== ACL filtering

By default all ACLs are replicated. This is recommended in order to ensure that your shadow cluster has the same permissions as your source cluster. ACL filters should be used with care:
By default all ACLs are replicated by the <<security-migrator-task,Security Migrator task>>. This is recommended in order to ensure that your shadow cluster has the same permissions as your source cluster. ACL filters should be used with care:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's not accurate. There are no ACL filters by default so no ACLs are synced OOTB

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe you're basing this off of the example config that rpk produces?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I also thought this was the case. Based on the DR use case we wanted all ACLs synced by default.

=== Consumer group filtering and behavior

Consumer group filters determine which consumer groups have their offsets replicated to the shadow cluster. By default, all consumer groups are replicated unless you specify filters.
Consumer group filters determine which consumer groups have their offsets replicated to the shadow cluster by the <<consumer-group-shadowing-task,Consumer Group Shadowing task>>. By default, all consumer groups are replicated unless you specify filters.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unless you're referring to the example that rpk produces, by default nothing is replicated.

=== Starting offset for new shadow topics

When a shadow topic is created for the first time, you can control where replication begins on the source topic. This setting only applies to empty shadow partitions and is crucial for disaster recovery planning.
When the <<source-topic-sync-task,Source Topic Sync task>> creates a shadow topic for the first time, you can control where replication begins on the source topic. This setting only applies to empty shadow partitions and is crucial for disaster recovery planning.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

May be worthwhile to mention that changing this config does not effect any current Shadow Topic but will effect any new Shadow Topics that get created.

Copy link
Contributor

@Feediver1 Feediver1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm--some minor suggestions

Comment on lines +132 to +134
* **SRC_LSO**: Source partition Last Stable Offset
* **SRC_HWM**: Source partition High Watermark
* **DST_HWM**: Shadow (destination) partition High Watermark
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* **SRC_LSO**: Source partition Last Stable Offset
* **SRC_HWM**: Source partition High Watermark
* **DST_HWM**: Shadow (destination) partition High Watermark
* **SRC_LSO**: Source partition last stable offset
* **SRC_HWM**: Source partition high watermark
* **DST_HWM**: Shadow (destination) partition high watermark

|`redpanda_shadow_link_shadow_lag`
|Gauge
|The lag of the shadow partition against the source partition, calculated as source partition LSO minus shadow partition HWM. Monitor by `shadow_link_name`, `topic`, and `partition` to understand replication lag for each partition.
|The lag of the shadow partition against the source partition, calculated as source partition LSO (Last Stable Offset) minus shadow partition HWM (High Watermark). Monitor by `shadow_link_name`, `topic`, and `partition` to understand replication lag for each partition.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
|The lag of the shadow partition against the source partition, calculated as source partition LSO (Last Stable Offset) minus shadow partition HWM (High Watermark). Monitor by `shadow_link_name`, `topic`, and `partition` to understand replication lag for each partition.
|The lag of the shadow partition against the source partition, calculated as source partition LSO (last stable offset) minus shadow partition HWM (high watermark). To understand the replication lag for each partition, monitor `shadow_link_name`, `topic`, and `partition`.

Comment on lines 121 to 124
* **Link unavailability**: When tasks show `LINK_UNAVAILABLE` indicating source cluster connectivity issues

For more information about shadow link tasks and their states, see xref:setup.adoc#shadow-link-tasks[].
* **Throughput drops**: When bytes/records fetched drops significantly
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* **Link unavailability**: When tasks show `LINK_UNAVAILABLE` indicating source cluster connectivity issues
For more information about shadow link tasks and their states, see xref:setup.adoc#shadow-link-tasks[].
* **Throughput drops**: When bytes/records fetched drops significantly
* **Link unavailability**: When tasks show `LINK_UNAVAILABLE` indicating source cluster connectivity issues
+
For more information about shadow link tasks and their states, see xref:setup.adoc#shadow-link-tasks[].
* **Throughput drops**: When bytes/records fetched drops significantly

And please check this link: it needs the full path!

* **Individual topic states**: Current state of each replicated topic (`ACTIVE`, `FAULTED`, `FAILING_OVER`, `FAILED_OVER`)
* **Task status**: Health of replication tasks across brokers (`ACTIVE`, `FAULTED`, `NOT_RUNNING`, `LINK_UNAVAILABLE`)
* **Lag information**: Replication lag per partition showing source vs shadow watermarks
* **Task status**: Health of replication tasks across brokers (`ACTIVE`, `FAULTED`, `NOT_RUNNING`, `LINK_UNAVAILABLE`). For details about shadow link tasks, see xref:setup.adoc#shadow-link-tasks[].
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please check this link: it needs the full path


By default, all ACLs replicate to ensure your shadow cluster maintains the same security posture as your source cluster.

=== Task Status and Monitoring
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
=== Task Status and Monitoring
=== Task status and monitoring

Comment on lines 176 to 178
1. **Exclude filters win**: If any EXCLUDE filter matches a resource, it is excluded regardless of INCLUDE filters
2. **Order matters for INCLUDE filters**: Among INCLUDE filters, the first match determines the result
3. **Default behavior**: Items that don't match any filter are excluded from replication
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
1. **Exclude filters win**: If any EXCLUDE filter matches a resource, it is excluded regardless of INCLUDE filters.
2. **Order matters for INCLUDE filters**: Among INCLUDE filters, the first match determines the result.
3. **Default behavior**: Items that don't match any filter are excluded from replication.

name: "test-consumer-group" # Exclude specific test groups
----

**Important consumer group considerations:**
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
**Important consumer group considerations**

Comment on lines 17 to 18
====
This is an emergency procedure. For planned failover testing or day-to-day shadow link management, see xref:./failover.adoc[]. Ensure you have completed the disaster readiness checklist in xref:./overview.adoc#disaster-readiness-checklist[] before an emergency occurs.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@paulohtb6 This link doesn't render. Please change it to full path

* Topics should be in `ACTIVE` state (not `FAULTED`).
* Replication lag should be reasonable for your RPO requirements.

**Understanding replication lag:**
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
**Understanding replication lag**


[IMPORTANT]
====
Note the replication lag to estimate potential data loss during failover. The `Tasks` section shows the health of shadow link replication tasks. For details about what each task does, see xref:setup.adoc#shadow-link-tasks[].
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@paulohtb6 this link isn't rendering

@micheleRP
Copy link
Contributor

micheleRP commented Nov 18, 2025

@micheleRP
Copy link
Contributor

Also in overview, please change description to: Learn how to use Shadowing with cross-region replication for disaster recovery.

@micheleRP
Copy link
Contributor

This intro should include Console (along with rpk and API)

@micheleRP
Copy link
Contributor

also in overview, please edit line to: Shadow link names, configuration details, and networking documented
and please change "complements" to "compliments"


[TIP]
====
Use xref:get-started:config-rpk-profile.adoc[`rpk profile`] to save your cluster connection details and credentials for both source and shadow clusters, allowing you to easily switch between the two configurations.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Use xref:get-started:config-rpk-profile.adoc[`rpk profile`] to save your cluster connection details and credentials for both source and shadow clusters. This allows you to easily switch between the two configurations.

Comment on lines 441 to 450
If you need to modify a shadow link configuration after creation, use the update command:

[,bash]
----
rpk shadow update <shadow-link-name>
----

For detailed command options, see xref:reference:rpk/rpk-shadow/rpk-shadow-update.adoc[`rpk shadow update`].

This opens your default editor to modify the shadow link configuration. Only changed fields are updated on the server. The shadow link name cannot be changed - you must delete and recreate the link to rename it.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
To modify a shadow link configuration after creation, run:
[,bash]
----
rpk shadow update <shadow-link-name>
----
This opens your default editor to modify the shadow link configuration. Only changed fields are updated on the server. The shadow link name cannot be changed: you must delete and re-create the link to rename it.
For detailed command options, see xref:reference:rpk/rpk-shadow/rpk-shadow-update.adoc[`rpk shadow update`].```


Configure network connectivity between your source and shadow clusters to enable shadow link replication. The shadow cluster initiates connections to the source cluster using a pull-based architecture.

For additional details about networking, see <<network-and-authentication>>.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
See also: <<network-and-authentication>>

The starting offset only affects **new shadow topics**. Once a shadow topic exists and has data, changing this setting has no effect on that topic's replication.
====

=== Generate a sample configuration
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@paulohtb6 should this heading include "for rpk" (since they don't need to do this if they're configuring via Console, right)? Or else add a note that says that this config file is not required if you configure via Console?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually, maybe at the top of this section, at Set filters, you could add a note explaining that rpk sets up these filters with a configuration file, but in Console you're guided through forms to set the configuration

Copy link
Contributor

@micheleRP micheleRP Nov 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and even better, explain this at the very top, in Set up Shadowing/Configure filters

* **Configure filters**: Define which topics, consumer groups, and ACLs should replicate by creating include/exclude patterns that match your disaster recovery requirements. See <<set-filters>>.
* **Create a shadow link**: Establish the connection between clusters using `rpk`, the Admin API, or Redpanda Console with authentication and network settings. See <<create-a-shadow-link>>.

== Shadow Link Tasks
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this Tasks sections come after the Filters? In console, they set filters & create the shadow link & then see the tasks

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

++ Filter configuration should come before task explanation. You can set up Shadowing without knowing anything about the tasks, the same is not true for filters. Plus just above we have "Configure Filters"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also move the rpk command for generating a sample config up towards the top. It's a helpful guide for the rest of the configuration.

Copy link
Contributor

@treevon treevon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. I think we should reorder the configure shadowing page to have the rpk shadow config generate command up top and filters before tasks. Other issue, noted by Michelle, is that the task reference links are not rendering.

* **Configure filters**: Define which topics, consumer groups, and ACLs should replicate by creating include/exclude patterns that match your disaster recovery requirements. See <<set-filters>>.
* **Create a shadow link**: Establish the connection between clusters using `rpk`, the Admin API, or Redpanda Console with authentication and network settings. See <<create-a-shadow-link>>.

== Shadow Link Tasks
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

++ Filter configuration should come before task explanation. You can set up Shadowing without knowing anything about the tasks, the same is not true for filters. Plus just above we have "Configure Filters"

* **Configure filters**: Define which topics, consumer groups, and ACLs should replicate by creating include/exclude patterns that match your disaster recovery requirements. See <<set-filters>>.
* **Create a shadow link**: Establish the connection between clusters using `rpk`, the Admin API, or Redpanda Console with authentication and network settings. See <<create-a-shadow-link>>.

== Shadow Link Tasks
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also move the rpk command for generating a sample config up towards the top. It's a helpful guide for the rest of the configuration.

Base automatically changed from rpk-shadow to beta November 19, 2025 01:54
@paulohtb6 paulohtb6 merged commit a409886 into beta Nov 19, 2025
4 of 5 checks passed
@paulohtb6 paulohtb6 deleted the shadow-tasks branch November 19, 2025 19:56
paulohtb6 added a commit that referenced this pull request Nov 19, 2025
Co-authored-by: Joyce Fee <102751339+Feediver1@users.noreply.github.com>
@coderabbitai coderabbitai bot mentioned this pull request Nov 19, 2025
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants