risingwavelabs/risingwave · error · SinkError::Config
config conflict: `commit_checkpoint_interval` larger than 1
Error message
config conflict: `commit_checkpoint_interval` larger than 1 means that sink decouple must be enabled, but session config sink_decouple is disabled
What it means
This error is raised when validating sink WITH clause options in the RisingWave connector sink layer. `commit_checkpoint_interval` greater than 1 means the sink commits data across multiple checkpoints, which requires sink decoupling (an async commit coordinator separated from the barrier flow). If the session-level `sink_decouple` setting is explicitly disabled while a `commit_checkpoint_interval > 1` is given, the configuration is contradictory and sink creation is rejected.
Source
Thrown at src/connector/src/sink/mod.rs:830
/// Return whether this sink uses exactly-once commit state for the loaded properties.
fn is_exactly_once(_properties: &BTreeMap<String, String>) -> Result<bool> {
Ok(false)
}
fn set_default_commit_checkpoint_interval(
desc: &mut SinkDesc,
user_specified: &SinkDecouple,
) -> Result<()> {
if is_sink_support_commit_checkpoint_interval(Self::SINK_NAME) {
match desc.properties.get(COMMIT_CHECKPOINT_INTERVAL) {
Some(commit_checkpoint_interval) => {
let commit_checkpoint_interval = commit_checkpoint_interval
.parse::<u64>()
.map_err(|e| SinkError::Config(anyhow!(e)))?;
if matches!(user_specified, SinkDecouple::Disable)
&& commit_checkpoint_interval > 1
{
return Err(SinkError::Config(anyhow!(
"config conflict: `commit_checkpoint_interval` larger than 1 means that sink decouple must be enabled, but session config sink_decouple is disabled"
)));
}
}
None => match user_specified {
SinkDecouple::Default | SinkDecouple::Enable => {
if matches!(Self::SINK_NAME, ICEBERG_SINK) {
desc.properties.insert(
COMMIT_CHECKPOINT_INTERVAL.to_owned(),
ICEBERG_DEFAULT_COMMIT_CHECKPOINT_INTERVAL.to_string(),
);
} else {
desc.properties.insert(
COMMIT_CHECKPOINT_INTERVAL.to_owned(),
DEFAULT_COMMIT_CHECKPOINT_INTERVAL_WITH_SINK_DECOUPLE.to_string(),
);
}
}View on GitHub (pinned to 6469eb736d)
Solutions
- Enable sink decoupling: `SET sink_decouple = true` (or `ENABLED`) in the session before creating the sink
- Remove `commit_checkpoint_interval` from the WITH options so it defaults to 1 and no decoupling is required
- Set the session variable inline in the CREATE SINK session: connect with `options -c 'SET sink_decouple=true'` or run `SET sink_decouple = true; CREATE SINK ...`
Example fix
-- before SET sink_decouple = false; CREATE SINK s FROM mv INTO kafka_conn WITH (commit_checkpoint_interval = 10); -- after SET sink_decouple = true; CREATE SINK s FROM mv INTO kafka_conn WITH (commit_checkpoint_interval = 10);
Defensive patterns
Strategy: validation
Validate before calling
let interval: u64 = with_options.get("commit_checkpoint_interval").map(|s| s.parse()).transpose()?.unwrap_or(1);
if interval > 1 && !sink_decouple_enabled {
return Err("commit_checkpoint_interval > 1 requires sink_decouple enabled".into());
} Prevention
- Before CREATE SINK, run `SHOW sink_decouple;` and align it with any commit_checkpoint_interval option
- Standardize a session init script that sets sink_decouple=true for sinks using decoupled commits
When it happens
Trigger: Creating a sink with `commit_checkpoint_interval = N` (N > 1) in the WITH options while the session variable `sink_decouple` is set to `disabled` (SinkDecouple::Disable), e.g. via `SET sink_decouple = false` or a session/profile default.
Common situations: Operators tuning commit frequency for Kafka/Iceberg sinks to reduce commit overhead set commit_checkpoint_interval, forgetting the session default or their `SET sink_decouple = DISABLED` conflicts with it; upgrading from older versions where sink_decouple defaulted differently.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- config error: {0}
- SinkError::Config(anyhow!(e))
- intermediate.table.name is required for append-only sink
- Primary key columns not found. Please set the `primary_key`
- S3 configuration is required for S3 sink
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/ec437f9eb7f70635.
Report an issue: GitHub.