How the DLQ Works
When Streamkap encounters a message that cannot be processed, the following happens:- The message is diverted from the normal data flow into a dedicated DLQ topic
- Error metadata is attached to the message as Kafka headers
- The pipeline continues processing remaining messages without interruption
- The DLQ message is retained for inspection and root-cause analysis
DLQ routing is automatic. You do not need to configure it. Every destination connector and transform has a DLQ topic created when errors occur.
Finding DLQ Topics
Naming Convention
DLQ topics follow a predictable naming pattern based on the connector type:| Connector Type | DLQ Topic Pattern | Example |
|---|---|---|
| Destination | destination_{entity_id}.streamkap.deadletterqueue | destination_abc123.streamkap.deadletterqueue |
| Transform | {transform_output_topic_prefix}deadletterqueue | my_transform.streamkap.deadletterqueue |
Filtering in the Topics Page
- Navigate to the Topics page
- Check the Include DLQ checkbox in the top toolbar to show DLQ topics
- Use the Search Box to filter by
deadletterqueue - Optionally, use the By Destination or By Transform collection in the left sidebar to narrow results
- Check the Errors column for non-zero values to identify active DLQ topics
Inspecting DLQ Messages
Once you locate a DLQ topic, click on it to open the Topic Details panel, then click Browse Messages to access the Messages tab.Reading Error Information
Each DLQ message contains the original payload along with error headers that describe why the message failed. Streamkap inspects the following headers in order of priority:__connect.errors.exception.message— the primary exception message from the Kafka Connect framework__connect.errors.exception.class.name— the Java exception class that caused the failureexception.message— a general exception messageerror.message— an error description from the processing component_streamkap_error— a Streamkap-specific error messageconnect.errors.exception.message— fallback exception message (without leading underscores)connect.errors.exception.class.name— fallback exception class name (without leading underscores)
Streamkap parses error information by first checking message headers, then attempting to extract structured JSON values, then falling back to raw values, and finally adding contextual metadata. The first non-empty value found in the header priority list above is used as the primary error description.
Inspecting a DLQ Message
- Open the DLQ topic in the Messages tab
- Click on a message row to expand it
- Review the Value field for the original message payload
- Review the Headers for error details — look for the headers listed above
- Use the Regex Filter to search for specific error patterns across multiple messages (e.g.,
.*schema.*or.*permission.*)
Common Error Patterns and Fixes
Schema Mismatch
Schema Mismatch
Symptoms:
- Error headers reference schema, type, or conversion errors
- Messages mention mismatched column types or unsupported data types
- A source column type was altered (e.g.,
INTEGERchanged toTEXT) - The destination does not support a data type present in the source
- A new column was added to the source but does not exist in the destination
Permission Errors
Permission Errors
Symptoms:
- Error headers reference access denied, authorization, or permission failures
- Messages mention insufficient privileges or forbidden operations
- The destination database user lacks
INSERT,UPDATE, orDELETEprivileges on the target table - Table-level or schema-level permissions were revoked or not granted
- Role-based access changes were applied without updating the connector credentials
Size and Limit Errors
Size and Limit Errors
Symptoms:
- Error headers reference message size, row size, or value length limits
- Messages mention payload too large or column value exceeds maximum
- A row exceeds the maximum message size supported by the destination
- A column value (e.g., a large
TEXTorBLOBfield) exceeds the destination column length limit - Batch size settings cause aggregated payloads to exceed limits
Oversized Records (Snowflake 16 MB limit)
Oversized Records (Snowflake 16 MB limit)
Symptoms:
- Records appearing in the DLQ for Snowflake destinations
- Error headers reference maximum record size exceeded
- Individual records exceed Snowflake’s 16 MB maximum record size limit
- Tables with large
TEXT,BLOB, orBYTEAcolumns produce records that exceed the limit
- Identify the oversized columns in the DLQ message payload
- Exclude large columns from replication if they are not needed at the destination
- Add a transform to truncate large fields before they reach the destination
- If the data is required, consider splitting the source table or extracting large columns into a separate table
VARCHAR Overflow
VARCHAR Overflow
Symptoms:
- Records diverted to DLQ with column value length errors
- Error headers reference value exceeding maximum column length
- A source column value exceeds the VARCHAR size defined at the destination
- Schema evolution created a column with a default size that is too small for the actual data
- Identify the column and value from the DLQ message
- Increase the column size at the destination (e.g.,
ALTER TABLE ... ALTER COLUMN ... TYPE VARCHAR(n)) - Configure a transform (SMT) to truncate values before delivery if increasing the column size is not feasible
Timestamp Range Errors
Timestamp Range Errors
Symptoms:
- Records diverted to DLQ with timestamp-related errors
- Error headers reference invalid date/time values
- Source data contains invalid timestamps such as year
0000or dates before year 1 - The destination rejects timestamps outside its supported range
- Identify the invalid timestamp values from the DLQ message payload
- Clean the source data to use valid timestamp values
- Configure a timestamp normalization transform (SMT) to convert out-of-range timestamps to valid values before delivery
Null Constraint Violations
Null Constraint Violations
Symptoms:
- Error headers reference null constraint, NOT NULL, or required field violations
- Messages contain
nullvalues for columns that have NOT NULL constraints
- The source contains
NULLvalues in a column that the destination defines as NOT NULL - A transform removed or nullified a required field
- Schema evolution added a new NOT NULL column at the destination without a default value
Recovery
DLQ messages represent records that did not reach the destination. The recovery process focuses on identifying the error, fixing the root cause, and backfilling the missing data.Identify the error
Inspect the DLQ topic messages and error headers to understand the failure reason. Use the common error patterns above or the Error Reference as a guide.
Fix the root cause
Apply the appropriate fix based on the error type: correct schema mismatches, grant missing permissions, adjust size limits, or resolve constraint violations.
Backfill missing data
After fixing the root cause, backfill the data that was lost:
- Trigger a snapshot (recommended): Snapshot the affected tables to backfill all missing records. This is the safest approach as it captures the current state of the source data. See Snapshots & Backfilling.
- Reset consumer group offsets (for very recent events): If the DLQ messages are recent and you want to replay a specific time window, reset the consumer group offsets to replay the affected messages. See Consumer Groups.
DLQ messages are retained according to the topic’s retention policy. By default, DLQ topics retain messages for 7 days (168 hours). After the retention period expires, messages are automatically deleted by Kafka. You can view the exact retention settings for a DLQ topic by opening the topic and checking the Metadata tab, which displays the configured
retention.ms (time-based) and retention.bytes (size-based) values. DLQ retention settings are managed by Streamkap and cannot be changed by the user. If you need messages retained for a longer period, contact Streamkap support.Replay and skip/acknowledge operations are not self-service. Re-injecting DLQ messages back into the pipeline, skipping individual DLQ records, or acknowledging (clearing) DLQ messages all require assistance from Streamkap support. If you need to reprocess, skip, or clear failed messages, contact Streamkap support with the DLQ topic name, affected connector, and a description of the issue. The recommended self-service approach for recovering missing data is to trigger a snapshot of the affected tables (see Recovery above).
Preventing DLQ Records
While the DLQ ensures that pipeline failures do not block healthy data, the best approach is to minimize DLQ records in the first place. Follow these practices to reduce the likelihood of messages being routed to the DLQ.Pre-deployment Schema Validation
Test all schema changes in a staging or development environment before applying them to production. Common DLQ-causing schema issues include:- Adding a NOT NULL column without a default value at the destination
- Changing a column type at the source (e.g.,
INTEGERtoTEXT) without updating the destination - Dropping columns that are referenced by transforms
Test Transforms Before Deploying
Transforms that produce unexpected output schemas, null values, or oversized fields are a common source of DLQ records. Before deploying a new or modified transform:- Validate the transform logic with representative sample data
- Verify that the transform output schema is compatible with the destination table
- Check edge cases such as null input values, empty strings, and unusually large fields
Set Up Alert Thresholds
Configure monitoring alerts to detect DLQ activity early, before a small number of failed records becomes a large backlog:- Set up alerts on DLQ topic record counts (see Alerts)
- Monitor for sudden spikes in DLQ activity, which often indicate a systemic issue such as a schema change or permission revocation
- Review DLQ topics regularly, even when alerts are not firing, to catch low-volume issues
Enable Schema Evolution
If your source schemas may change over time (new columns, type changes), ensure that schema evolution is enabled on your destination connector. Schema evolution allows the destination to automatically adapt to non-breaking schema changes, reducing the chance of schema mismatch errors in the DLQ. See Schema Evolution Support for details on supported evolution types and configuration.Best Practices
- Monitor DLQ topics proactively: Set up alerts for DLQ activity to catch issues early (see Alerts)
- Investigate promptly: DLQ messages often indicate systemic issues that affect multiple records
- Check error headers first: The error headers provide the fastest path to understanding the failure
- Fix at the source: Whenever possible, fix the root cause rather than working around it at the destination
- Use the Logs page: Cross-reference DLQ errors with connector logs for additional context (see Logs)
- Review after schema changes: Any time you alter source or destination schemas, check DLQ topics for new errors