risingwavelabs/risingwave · error
unsupported encoding for Debezium
Error message
unsupported encoding for Debezium
What it means
DebeziumParser::build_accessor_builder supports only a fixed set of encodings (Debezium JSON and Avro). Any other SourceEncode reaches the catch-all arm and bails, since no accessor exists for that encoding under the Debezium protocol.
Source
Thrown at src/connector/src/parser/debezium/debezium_parser.rs:88
DebeziumAvroAccessBuilder::new(config, encoding_type)?,
))
}
EncodingProperties::Json(json_config) => Ok(AccessBuilderImpl::DebeziumJson(
DebeziumJsonAccessBuilder::new(
json_config
.timestamptz_handling
.unwrap_or(TimestamptzHandling::GuessNumberUnit),
json_config
.timestamp_handling
.unwrap_or(TimestampHandling::GuessNumberUnit),
json_config.time_handling.unwrap_or(TimeHandling::Micro),
json_config
.bigint_unsigned_handling
.unwrap_or(BigintUnsignedHandlingMode::Long),
json_config.handle_toast_columns,
)?,
)),
_ => bail!("unsupported encoding for Debezium"),
}
}
impl DebeziumParser {
pub async fn new(
props: SpecificParserConfig,
rw_columns: Vec<SourceColumnDesc>,
source_ctx: SourceContextRef,
) -> ConnectorResult<Self> {
let key_builder =
build_accessor_builder(props.encoding_config.clone(), EncodingType::Key).await?;
let payload_builder =
build_accessor_builder(props.encoding_config, EncodingType::Value).await?;
let debezium_props = if let ProtocolProperties::Debezium(props) = props.protocol_config {
props
} else {
unreachable!(
"expecting Debezium protocol properties but got {:?}",View on GitHub (pinned to 6469eb736d)
Solutions
- Use ENCODE JSON or ENCODE AVRO with FORMAT DEBEZIUM
- If the data is Protobuf-Debezium, convert the pipeline or implement a Debezium Protobuf accessor in the connector code
- Confirm the actual wire format of the upstream topic before choosing the encode
Example fix
-- before FORMAT DEBEZIUM ENCODE PROTOBUF (...) -- after FORMAT DEBEZIUM ENCODE JSON (...)
Defensive patterns
Strategy: validation
Validate before calling
if (!['json','avro'].includes(encode.toLowerCase())) throw new Error(`Debezium supports ENCODE JSON or AVRO, got ${encode}`); Prevention
- Restrict Debezium source templates to JSON/AVRO encodes
- Confirm the upstream wire format before choosing ENCODE
- Track connector release notes for newly added Debezium encodings
When it happens
Trigger: Calling DebeziumParser::new with SpecificParserConfig whose encode is e.g. Protobuf, Bytes, or Native — anything other than the supported Debezium encodings.
Common situations: Configuring FORMAT DEBEZIUM with a non-JSON/non-Avro ENCODE in CREATE SOURCE; copy-pasted config templates; expecting Debezium Protobuf support that doesn't exist.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- unsupported encoding for DEBEZIUM_MONGO format
- decode utf8 error: {0}
- Fail to convert version_hint from utf8 to string: {}
- unused FORMAT ENCODE option: key.message='{name}'
- protobuf file location not provided
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/52587bf11bbc4eed.
Report an issue: GitHub.