apache/seatunnel · warning

The following STREAM_PARAMS value is invalid

Error message

The following STREAM_PARAMS value is invalid: {}

What it means

ReplicationConnectionBuilder parses the slot.stream.params string (semicolon-separated key=value pairs). Any token that does not contain exactly one '=' is skipped and logged as an invalid STREAM_PARAMS value; it does not abort construction.

Solutions

  1. Fix the slot.stream.params value so every segment is exactly key=value, separated by semicolons: 'k1=v1;k2=v2'.
  2. Remove trailing semicolons and empty segments.
  3. Quote/escape values containing '=' by checking the parser (only two parts are accepted, so values cannot contain '=').
  4. Enable connector debug logs to confirm which segments were accepted.

Example fix

// before
{"slot.stream.params": "include-types=true;format-version=2;"}
// after
{"slot.stream.params": "include-types=true;format-version=2"} // no trailing ';', no empty segment
Defensive patterns

Strategy: validation

Validate before calling

boolean ok = params == null || Arrays.stream(params.split(";")).filter(s -> !s.isEmpty()).allMatch(s -> s.split("=").length == 2);

Prevention

When it happens

Trigger: Building a PostgresReplicationConnection with slotStreamParams like 'k1=v1;k2' or 'k1=v1;;k2=v2' — the 'k2' (or empty) segment fails split('=') length==2 and triggers the warning.

Common situations: Copy-pasted Debezium slot.stream.params config with trailing semicolons; URL-encoded or quoted params pasted verbatim; users separating pairs with commas instead of '=' inside a segment.

Understand the failure class

Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.

Related errors


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

Appendix: source

Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-opengauss/src/main/java/io/debezium/connector/postgresql/connection/PostgresReplicationConnection.java:869

        }

        @Override
        public ReplicationConnectionBuilder dropSlotOnClose(final boolean dropSlotOnClose) {
            this.dropSlotOnClose = dropSlotOnClose;
            return this;
        }

        @Override
        public ReplicationConnectionBuilder streamParams(final String slotStreamParams) {
            if (slotStreamParams != null && !slotStreamParams.isEmpty()) {
                this.slotStreamParams = new Properties();
                String[] paramsWithValues = slotStreamParams.split(";");
                for (String paramsWithValue : paramsWithValues) {
                    String[] paramAndValue = paramsWithValue.split("=");
                    if (paramAndValue.length == 2) {
                        this.slotStreamParams.setProperty(paramAndValue[0], paramAndValue[1]);
                    } else {
                        LOGGER.warn(
                                "The following STREAM_PARAMS value is invalid: {}",
                                paramsWithValue);
                    }
                }
            }
            return this;
        }

        @Override
        public ReplicationConnectionBuilder statusUpdateInterval(
                final Duration statusUpdateInterval) {
            this.statusUpdateIntervalVal = statusUpdateInterval;
            return this;
        }

        @Override
        public Builder doSnapshot(boolean doSnapshot) {
            this.doSnapshot = doSnapshot;

View on GitHub (pinned to cf67b549a7)