compactionScheduler.config.custom section of the PulsarBroker YAML.
Multi-Catalog Architecture
StreamNative supports configuring multiple catalogs simultaneously. Different namespaces or topics can route data to different catalogs.Configuration Pattern
- Iceberg catalogs:
iceberg.catalog.<catalog-name>.<property> - Delta catalogs:
delta.catalog.<catalog-name>.<property>
Default Catalog
Set the default catalog used when no topic or namespace override is specified:Catalog Resolution Priority
The catalog used for a topic is resolved in this order:Iceberg Catalogs
Unity Catalog (Managed Iceberg Table)
| Property | Description |
|---|---|
catalog-backend | UNITYCATALOG |
type | rest |
uri | Databricks workspace URL |
warehouse | Catalog name created in Databricks |
credential | Databricks access token |
oauth2-server-uri | Databricks oauth2 service uri |
scope | all-apis |
security | OAUTH2 |
vended-credentials-enabled | true |
token-refresh-enabled | true |
Snowflake Horizon Catalog
| Property | Description |
|---|---|
catalog-backend | HORIZON |
uri | Snowflake Horizon REST API endpoint |
credential | PAT token |
scope | Snowflake role scope (e.g., session:role:PUBLIC) |
warehouse | Snowflake database name |
header.X-Iceberg-Access-Delegation | vended-credentials (required) |
token-refresh-enabled | true (recommended) |
Snowflake Open Catalog (Polaris)
| Property | Description |
|---|---|
catalog-backend | POLARIS |
credential | Client ID and secret in <id>:<secret> format |
warehouse | Polaris catalog name |
header.X-Iceberg-Access-Delegation | vended-credentials |
scope | PRINCIPAL_ROLE:ALL |
token-refresh-enabled | true |
AWS S3Table
| Property | Description |
|---|---|
catalog-backend | S3TABLE |
rest.sigv4-enabled | true (required for AWS SigV4 auth) |
rest.signing-name | s3tables |
rest.signing-region | AWS region of the S3Table bucket |
uri | S3Tables REST endpoint (varies by region) |
warehouse | S3Table bucket ARN |
rest-metrics-reporting-enabled | false (S3Table does not support metric reporting) |
Important: The Ursa cluster must run in the same region as the S3Table bucket.
Google BigLake
| Property | Description |
|---|---|
catalog-backend | BIGLAKE |
warehouse | GCS bucket path from BigLake catalog properties |
header.x-goog-user-project | GCP project ID from BigLake catalog properties |
rest.auth.type | org.apache.iceberg.gcp.auth.GoogleAuthManager (fixed) |
io-impl | org.apache.iceberg.gcp.gcs.GCSFileIO (fixed) |
header.X-Iceberg-Access-Delegation | vended-credentials (fixed) |
Delta Lake Catalogs
Unity Catalog (Delta)
Authentication Options
Token-based (recommended):BYOL (Bring Your Own Lakehouse)
Enable managed commit support for Unity Catalog:Without Catalog (Direct Bucket)
If you do not need an external catalog service, data can be written directly to the object storage bucket.Required permissions: When no external catalog is used, the compaction-scheduler pod’s IAM role (AWS), service account (GCP), or workload identity (Azure) must have read, write, create, and list permissions on the target bucket. Without an external catalog, the compaction service interacts with object storage directly to create namespaces, write metadata, list existing files, and read prior snapshots. Examples of the required permissions per cloud:
Cloud Permissions AWS S3 s3:GetObject,s3:PutObject,s3:DeleteObject,s3:ListBucket,s3:GetBucketLocationon the warehouse bucket and prefixGCS storage.buckets.get,storage.objects.get,storage.objects.list,storage.objects.create,storage.objects.delete(or theStorage Object Adminrole)Azure Blob / ADLS Storage Blob Data Contributoron the container
Iceberg (Hadoop Catalog)
The default Hadoop catalog writes Iceberg metadata and data files directly to the configured storage path. No external catalog service is required.Delta (No Unity Catalog)
Delta tables are written directly to the configured storage path without Unity Catalog integration.Multi-Catalog Example
Configure two catalogs (one Polaris, one S3Table) and set a default:Limitations
- A namespace or topic can reference only one catalog at a time
- You can assign different catalogs to different topics or namespaces
- You cannot assign multiple catalogs to a single topic or namespace
Next Steps
- Enable Lakehouse Integration — Enable SDT at cluster, namespace, or topic level