Skip to content

[26.2] Iceberg support for decoded message keys and headers#1804

Open
kbatuigas wants to merge 10 commits into
betafrom
DOC-2194-document-feature-iceberg-support-decoded-message
Open

[26.2] Iceberg support for decoded message keys and headers#1804
kbatuigas wants to merge 10 commits into
betafrom
DOC-2194-document-feature-iceberg-support-decoded-message

Conversation

@kbatuigas

@kbatuigas kbatuigas commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Description

This pull request updates the documentation to introduce and clarify new capabilities for the redpanda.iceberg.mode topic property, allowing users to independently configure how record keys, values, and headers are translated into Iceberg tables. It also improves guidance and references for configuring these options and updates related descriptions and links.

Iceberg integration enhancements:

  • Added documentation and release notes for the new section-based syntax of redpanda.iceberg.mode, enabling independent configuration of key, value, and header translation, including schema-decoding and UTF-8 string options.
  • Updated the property description in property-overrides.json to explain the new configuration options and reference the improved documentation.

Documentation improvements:

  • Added learning objectives and personas to the Iceberg schema specification guide, making it clearer what users will achieve by reading the page. [1] [2]
  • Updated links and related topics to point to the new, more comprehensive Iceberg schema configuration guide. [1] [2]

Resolves https://redpandadata.atlassian.net/browse/2194
Review deadline: 23 July

Page previews

Checks

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

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

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.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 768105f1-7ff1-4774-a268-be81a6f9b01a

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

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch DOC-2194-document-feature-iceberg-support-decoded-message

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

@netlify

netlify Bot commented Jul 16, 2026

Copy link
Copy Markdown

Deploy Preview for redpanda-docs-preview ready!

Name Link
🔨 Latest commit 0dcd99b
🔍 Latest deploy log https://app.netlify.com/projects/redpanda-docs-preview/deploys/6a62970d62396b00082fe30f
😎 Deploy Preview https://deploy-preview-1804--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.

@kbatuigas
kbatuigas force-pushed the DOC-2194-document-feature-iceberg-support-decoded-message branch from d77121c to 0127264 Compare July 16, 2026 19:39
@kbatuigas
kbatuigas force-pushed the DOC-2194-document-feature-iceberg-support-decoded-message branch from 0127264 to f2690c7 Compare July 21, 2026 23:15

== Configure key, value, and header translation

For Redpanda clusters version 26.2 and later, in addition to the <<supported-iceberg-modes,supported modes>>, `redpanda.iceberg.mode` also accepts a section-based syntax that lets you independently configure how Redpanda translates the record key, value, and headers into the Iceberg table. The `key_value`, `value_schema_id_prefix`, and `value_schema_latest` modes are shorthand for common combinations of these sections.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@wdberkeley could you help confirm that this will also be live for the next Cloud release and that we don't need to conditionalize it for self-managed only? (Not sure which Cloud SME to tag)


|===

By default (`layout=flat`), Redpanda places each decoded value field as a top-level column in the generated table, alongside the `redpanda` system struct. If a decoded value field is named `redpanda`, Redpanda moves it into the `redpanda` system struct as a `data` field, to avoid colliding with the record metadata column of the same name.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@wdberkeley I think there is a discrepancy here with the TOI, could you please confirm the behavior for the system struct?

@kbatuigas
kbatuigas marked this pull request as ready for review July 21, 2026 23:36
@kbatuigas
kbatuigas requested a review from a team as a code owner July 21, 2026 23:36
@kbatuigas
kbatuigas requested a review from wdberkeley July 21, 2026 23:37
@kbatuigas
kbatuigas requested a review from mattschumpert July 23, 2026 18:30

== Iceberg: Decoded message keys and headers

You can now independently control how Redpanda translates a record's key, value, and headers into the Iceberg table using the `redpanda.iceberg.mode` topic property. A new section-based syntax lets you schema-decode message keys (the same way as values), store keys or values as UTF-8 strings, and decode header values from raw bytes to strings.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

'lets you decode both keys and values based on a well known schema in the Schema Registry, store keys ....'

=== value_schema_id_prefix

Creates an Iceberg table whose structure matches the Redpanda schema for the topic, with columns corresponding to each field. You must register a schema in the xref:manage:schema-reg/schema-reg-overview.adoc[Schema Registry] and producers must write to the topic using the Schema Registry wire format.
Creates an Iceberg table whose structure matches the Redpanda schema for the topic, with columns corresponding to each field. You must register a schema in xref:manage:schema-reg/schema-reg-overview.adoc[Schema Registry] and producers must write to the topic using the Schema Registry wire format.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Does the 'wire format' still denote unambigously the byte prefix now that Confluent introduced the new approach @wdberkeley?


[IMPORTANT]
====
Configuring anything beyond `key:mode=binary` and `headers:value_type=binary` requires every broker in the cluster to be running Redpanda version 26.2 or later. Until all brokers are upgraded, Redpanda rejects these configurations with an error.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I feel like we could put this further down. gets in the way a bit

| `binary`
a| `string` stores the field as a UTF-8 string, replacing invalid bytes with the Unicode replacement character (`U+FFFD`).

See <<key-type-by-key-mode,Resulting `redpanda.key` type by `key` mode>> and <<value-type-by-value-mode,Resulting value field type by `value` mode>> for the resulting column types in the generated table.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Huh? This is confusing.

I think we're burying the lead here @kbatuigas .

Let's describe the power of the new section structure first and how it works, including the examples for key,value and header, and the 'layout' optiojs, before mentioning the equivalent resulting values using the 'mode' shorthands. This is really reference material that should be at the bottom , or maybe just above the 'validation rules'.

----

NOTE: If a section-based configuration is equivalent to one of the modes described in <<supported-iceberg-modes,Supported Iceberg modes>>, `rpk topic describe` displays it using that mode's name instead of the section syntax.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@kbatuigas I wonder if we still need this warning in 26.2 docs taking up major real estate given it happened in 25.3.

@wdberkeley wdberkeley left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Looks good. Thanks for doing this... it's a lot of work, there's a lot of new stuff.

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.

3 participants