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

  1. Use ENCODE JSON or ENCODE AVRO with FORMAT DEBEZIUM
  2. If the data is Protobuf-Debezium, convert the pipeline or implement a Debezium Protobuf accessor in the connector code
  3. 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

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


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/52587bf11bbc4eed. Report an issue: GitHub.