apache/seatunnel · error · IllegalArgumentException
Fluss source option 'start_mode=latest' is not supported in
Error message
Fluss source option 'start_mode=latest' is not supported in BATCH mode.
What it means
FlussSource.checkStartMode rejects the combination of job mode BATCH and start.mode=latest, because 'latest' (streaming from the newest offset) has no defined end in batch mode. The check runs during setJobContext and fails the job at planning time with an IllegalArgumentException.
Source
Thrown at seatunnel-connectors-v2/connector-fluss/src/main/java/org/apache/seatunnel/connectors/seatunnel/fluss/source/FlussSource.java:105
SourceSplitEnumerator.Context<FlussSourceSplit> enumeratorContext,
FlussSourceState checkpointState) {
return new FlussSourceSplitEnumerator(
sourceConfig, enumeratorContext, checkpointState, isStreaming());
}
private boolean isStreaming() {
return getBoundedness() == Boundedness.UNBOUNDED;
}
@Override
public void setJobContext(JobContext jobContext) {
checkStartMode(jobContext.getJobMode(), sourceConfig.getStartMode());
this.jobContext = jobContext;
}
static void checkStartMode(JobMode jobMode, StartMode startMode) {
if (JobMode.BATCH.equals(jobMode) && StartMode.LATEST.equals(startMode)) {
throw new IllegalArgumentException(
"Fluss source option '"
+ FlussSourceOptions.START_MODE.key()
+ "=latest' is not supported in BATCH mode.");
}
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Switch the job to streaming mode so start_mode=latest is valid.
- Change start_mode to a bounded value in batch mode (e.g. earliest or a specific timestamp/offset per FlussSourceOptions).
- Remove the start_mode option to use the default appropriate for batch mode.
- Split the job: batch for history, streaming job for tailing.
Example fix
// before
Fluss {
start_mode = latest // submitted with batch mode
}
// after (batch)
Fluss {
start_mode = earliest
}
// or submit with streaming mode Defensive patterns
Strategy: validation
Validate before calling
JobMode mode = jobContext.getJobMode();
if (JobMode.BATCH.equals(mode) && StartMode.LATEST.equals(config.getStartMode())) {
throw new IllegalArgumentException("start_mode=latest requires streaming mode");
} Prevention
- Match start_mode to job mode: latest only with streaming
- Don't reuse streaming configs for batch submissions
- Use earliest or a bounded offset/timestamp in batch jobs
- Validate job mode/config combination before submission
When it happens
Trigger: Submitting a batch-mode job whose Fluss source sets start_mode = latest; a shared config file with start_mode=latest reused in a batch execution (-e local / batch deployment).
Common situations: Users porting a streaming config to batch mode; misunderstanding that batch+latest should 'read once from now'; template configs with start_mode pinned to latest.
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
- Schema config can not be empty
- Unknown format type:
- Option '${option}' cannot be blank
- Option '${valuesAndOptions[index + 1]}' is not valid for the
- Option 'field_delimiter' cannot be empty
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/e66c1f879658dd0e.
Report an issue: GitHub.