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

  1. Switch the job to streaming mode so start_mode=latest is valid.
  2. Change start_mode to a bounded value in batch mode (e.g. earliest or a specific timestamp/offset per FlussSourceOptions).
  3. Remove the start_mode option to use the default appropriate for batch mode.
  4. 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

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


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/e66c1f879658dd0e. Report an issue: GitHub.