On This Page

Home / Stream/ Integrations/ Destinations/Databricks Zerobus Destination

Databricks Zerobus Destination

The Databricks Zerobus Destination writes JSON events directly into a Databricks Unity Catalog Delta table through Zerobus Ingest. Cribl Stream sends records over gRPC, and Databricks manages Delta file layout and durability, so this Destination does not stage files in object storage.

This Destination is separate from the file-based Databricks Destination, which writes to Unity Catalog volumes. Configure one Databricks Zerobus Destination per target table.

Type: Streaming | TLS Support: Yes | PQ Support: Yes

Prerequisites

Before you configure the Destination, complete the following in Databricks. For the current Databricks procedure, see Use Zerobus Ingest.

  • Create or identify the target table. The table must already exist. Zerobus Ingest does not create or evolve the table schema. Event field names and types must match the table columns.
  • Note your Workspace URL and Workspace ID. The Workspace URL is the HTTPS address of your Databricks Workspace. See how to find your Workspace ID.
  • Note the Zerobus Ingest hostname. Enter only the hostname, with no scheme, port, or path. On AWS, the hostname looks like 2281745829657864.zerobus.us-west-2.cloud.databricks.com. On Azure, the domain is .azuredatabricks.net instead of .cloud.databricks.com.
  • Create a service principal and generate a client ID and client secret. See Authorize service principal access to Databricks with OAuth.
  • Grant Unity Catalog privileges on the catalog, schema, and table. See Use Zerobus Ingest in the Databricks documentation.

Cribl Stream Worker Nodes need outbound HTTPS access to the Workspace URL (for OAuth) and outbound gRPC/TLS access to the Zerobus hostname (typically port 443).

Configure a Databricks Zerobus Destination

In Cribl Stream, set up a Databricks Zerobus Destination.

  1. On the top bar, select Products, and then select Cribl Stream. Under Worker Groups, select a Worker Group. Next, you have two options:

    • To configure via QuickConnect, navigate to Routing > QuickConnect. Select Add Destination and select the Destination you want from the list, choosing either Select Existing or Add New.
    • To configure via the Routes, select Data > Destinations. Select the Destination you want. Next, select Add Destination.
  2. In the New Destination modal, configure the following under General Settings:

    • Output ID: Enter a unique name to identify this Destination definition. If you clone this Destination, Cribl Stream will add -CLONE to the original Output ID.
    • Description: Optionally, enter a description.
    • Workspace URL: HTTPS URL of the Databricks Workspace, used for OAuth token exchange. Must begin with https://. For example: https://dbc-1234abcd-5e6f.cloud.databricks.com.
    • Workspace ID: Numeric identifier of the Databricks Workspace. Cribl Stream scopes the OAuth token to this Workspace.
    • Zerobus endpoint: Hostname of the Workspace Zerobus Ingest endpoint. Omit the scheme, port, and path. For example: 1234567890.zerobus.us-west-2.cloud.databricks.com.
    • Table name: Three-part Unity Catalog name of the target table, in the form catalog.schema.table.
  3. Optionally, configure the following under Optional Settings:

    • Backpressure behavior: Select whether to block, drop, or queue events when all receivers are exerting backpressure. Defaults to Block. When this field is set to persistent queue, see the persistent queue settings for details.
    • Tags: Optionally, add tags to filter and group Destinations on the Manage Destinations page. Tags are not added to processed events. Use a tab or hard return between tag names.
  4. Under Authentication, configure the service principal:

    • Client ID: OAuth client ID of the service principal that is authorized to write to the target table.
    • Client secret: Choose Select local secret or Select global secret. Then pick a stored secret from the drop-down, or select Create text secret to add one. See Create and manage secrets and Global secrets.
  5. Optionally, adjust the Processing and Advanced Settings outlined in the sections below.

  6. Select Save, then Commit & Deploy.

  7. Use the Test tab in the Destination’s configuration modal to validate the configuration. A successful test authenticates, opens an ingest stream, and writes a row to the target table.

This Destination serializes events in JSON format only. HTTP/REST ingest and Protobuf records are not supported.

Persistent Queue Settings

The Persistent Queue Settings tab displays when the Backpressure behavior option in General settings is set to Persistent Queue. Persistent queue buffers and preserves incoming events when a downstream Destination has an outage or experiences backpressure.

Before enabling persistent queue, learn more about persistent queue behavior and how to optimize it with your system:

Some of these settings might not appear if you set the persistent queue storage mode to Network filesystem or AWS S3 at the Worker Group level (Worker Group Settings > System > PQ Storage). When using these storage types, this behavior is managed at the Worker Group level. See Worker Group PQ Storage Fields for more information.

On Cribl-managed Cloud Workers (with an Enterprise plan), this tab exposes only the destructive Clear Persistent Queue button (described at the end of this section). A maximum queue size of 1 GB disk space is automatically allocated per PQ-enabled Destination, per Worker Process. The 1 GB limit is on outbound uncompressed data, and no compression is applied to the queue.

This limit is not configurable. If the queue fills up, Cribl Stream blocks outbound data. To configure the queue size, compression, queue-full fallback behavior, and other options below, use a hybrid Group.

Mode: Use this menu to select when Cribl Stream engages the persistent queue in response to backpressure events from this Destination. The options are:

ModeDescription
ErrorQueues and stores data on a disk when the Destination is unavailable or in an error state.
BackpressureQueues and stores data to a disk when it detects backpressure from the Destination until the backpressure event resolves.
Always OnCribl Stream immediately queues and stores all data on a disk for all events, even when there is no backpressure.

If a Worker/Edge Node starts with an invalid Mode setting, it automatically switches to Error mode. This might happen if the Worker/Edge Node is running a version that does not support other modes (older than 4.9.0), or if it encounters a nonexistent value in YAML configuration files.

File size limit: The maximum data volume to store in each queue file before closing it. Enter a numeral with units of KB, MB, and so on. Defaults to 10 MB. When you save the configuration, File size limit must be greater than or equal to Buffer size limit (bytes). Cribl Stream rejects invalid combinations.

Queue size limit: The maximum amount of disk space that the queue can consume on each Worker Process. When the queue reaches this limit, the Destination stops queueing data and applies the Queue-full behavior. Defaults to 5 GB. This field accepts positive numbers with units of KB, MB, GB, and so on. You can set it as high as 1 TB, unless you’ve configured a different Worker Process PQ size limit on the Worker Group/Fleet Settings page.

Queue file path: The location for the persistent queue files. Defaults to $CRIBL_HOME/state/queues. Cribl Stream appends /<worker-id>/<output-id> to this value.

Compression: Set the codec to use when compressing the persisted data after closing a file. Defaults to None. Gzip is also available.

Queue-full behavior: Whether to block or drop events when the queue begins to exert backpressure. A queue begins to exert backpressure when the disk is low or at full capacity. This setting has two options:

  • Block: The output will refuse to accept new data until the receiver is ready. The system will return block signals back to the sender.
  • Drop new data: Discard all new events until the backpressure event has resolved and the receiver is ready.

Buffer size limit (bytes): The maximum memory to buffer events before flushing them to persistent queue on disk. Enter a value with a unit suffix. For example: 64KB, 1MB, or 10MB. Spaces between the number and unit are allowed (such as 64 KB). Units are case-insensitive. Plain byte values (like 65536) are accepted, but decimals (like 0.5MB) are not. The valid range is 64KB to 10MB. Values outside this range are rounded to the nearest limit. Defaults to 1MB.

Deprecation Notice

The Buffer size limit (bytes) setting replaces the deprecated Max buffer size setting to provide more predictable memory management in version 4.18.0. The Max buffer size setting will be removed in version 4.19.1. For upgraded Worker Groups and Fleets, the new byte-based limit defaults to 1MB. Update your configurations to the new byte-based limit to ensure optimal memory stability.

Strict ordering: Toggle on (default) to enable FIFO (first in, first out) event forwarding, ensuring Cribl Stream sends earlier queued events first when receivers recover. The persistent queue flushes every 10 seconds in this mode. Toggle off to prioritize new events over queued events, configure a custom drain rate for the queue, and display this option:

  • Drain rate limit (EPS): Optionally, set a throttling rate (in events per second) on writing from the queue to receivers. (The default 0 value disables throttling.) Throttling the queue drain rate can boost the throughput of new and active connections by reserving more resources for them. You can further optimize Worker startup connections and CPU load in the Worker Processes settings.

Clear Persistent Queue: For Cloud Enterprise only, select this button if you want to delete the files that are currently queued for delivery to this Destination. If you select this button, a confirmation modal appears. Clearing the queue frees up disk space by permanently deleting the queued data, without delivering it to downstream receivers. This button only appears after you define the Output ID.

Use the Clear Persistent Queue button with caution to avoid data loss. See How to Safely Disable and Clear Persistent Queues for more information.

Processing Settings

Post-Processing

Pipeline: Pipeline or Pack to process data before sending the data out using this output.

System fields: A list of fields to automatically add to events that use this output. By default, includes cribl_pipe (identifying the Cribl Stream Pipeline that processed the event). Supports wildcards. Other options include:

  • cribl_host - Cribl Stream Node that processed the event.
  • cribl_input - Cribl Stream Source that processed the event.
  • cribl_output - Cribl Stream Destination that processed the event.
  • cribl_ep - Cribl Stream Edge Processor that processed the event.
  • cribl_route - Cribl Stream Route (or QuickConnect) that processed the event.
  • cribl_group - Cribl Stream Worker Group of the node that processed the event.
  • cribl_mode - Cribl Stream processing mode.

Advanced Settings

Batch size limit: Maximum size, in KB, of the serialized records in a single ingest batch. Defaults to 2048. Minimum: 1. Maximum: 10176.

Batch records limit: Maximum number of records to include in a single ingest batch. Defaults to 200. Minimum: 1. Maximum: 2000.

Buffer memory limit: Maximum size, in KB, of unacknowledged records per Worker Process before blocking. Defaults to 65536. Minimum: 1024. This value must be at least as large as Batch size limit. Cribl Stream drops records larger than this limit.

In-flight batch limit: Maximum number of unacknowledged batches per Worker Process before blocking. Defaults to 100. Minimum: 1. Maximum: 1000.

Flush period: Maximum time, in seconds, to hold a batch before sending it. Defaults to 1. Minimum: 1.

Acknowledgment timeout: Amount of time, in seconds, to wait for Databricks to acknowledge sent batches before reconnecting. Defaults to 60. Minimum: 1.

Connection timeout: Amount of time, in seconds, to wait for a new ingest stream to open before canceling it. Defaults to 15. Minimum: 1. Maximum: 300.

Environment: If you’re using GitOps, optionally use this field to specify a single Git branch on which to enable this configuration. If empty, the config will be enabled everywhere.

Schema Mismatches

By default, Zerobus Ingest rejects a record if any field is missing from the table schema or has the wrong type. To keep those fields instead of dropping the record, Databricks lets you add a Zerobus rescue column to the table. Unknown fields and type mismatches are stored there as a JSON object.

Cribl recommends adding this column on new tables. The column must:

  • Allow null values
  • Use the VARIANT type
  • Have the zerobus-rescue tag in Unity Catalog

Exactly one column can meet all three criteria. Databricks currently documents this feature as Beta, and it supports JSON ingest only.

Rejected Records

If a record does not fit the target table (a field the table does not have, a type the column does not accept, or a missing required column), Databricks rejects it with an INVALID_ARGUMENT error. See Zerobus Ingest error handling and Schema management.

Cribl Stream resends every in-flight batch that Databricks has not yet acknowledged on a separate connection, so the main data flow keeps running. Records Databricks accepts during this process are delivered normally. When Cribl Stream identifies the batch Databricks will not accept, it drops that entire batch, including records that were valid. One rejected record can cause Cribl Stream to drop every record in the same batch.

Dropped batches are not requeued, even when persistent queuing is enabled. This is the only case where this Destination discards data it has already sent.

To reduce how many records a rejection can drop:

  • Add a Zerobus rescue column to the table. Unknown fields and type mismatches are captured instead of rejected. A missing required column is still rejected. See Schema Mismatches.
  • Lower Batch records limit. Fewer records per batch means fewer valid records lost with a rejected one, at the cost of more requests.
  • Shape events in a Pipeline so field names and types match the table before they reach the Destination.

Cribl Stream reports a Red health status until data delivers successfully again.

Troubleshooting

The Destination’s configuration modal has helpful tabs for troubleshooting:

Live Data: Try capturing live data to see real-time events as they flow through the Destination. On the Live Data tab, click Start Capture to begin viewing real-time data.

Logs: Review and search the logs that provide detailed information about the delivery process, including any errors or warnings that may have occurred.

Test: Ensures that the Destination is correctly set up and reachable. Verify that sample events are sent correctly by clicking Run Test.

You can also view the Monitoring page that provides a comprehensive overview of data volume and rate, helping you identify delivery issues. Analyze the graphs showing events and bytes in/out over time.