apache/flink · error · IllegalArgumentException

Could not parse URL from {url}

Error message

Could not parse URL from {url}

What it means

Thrown as an IllegalArgumentException when the leader address retrieved from the WebMonitorEndpoint leader retriever cannot be parsed as a valid java.net.URL. The leader address (a string) is expected to be a well-formed URL (e.g., http://host:8081). If it is malformed (missing scheme, invalid characters, or null), MalformedURLException is caught and wrapped.

Source

Thrown at flink-clients/src/main/java/org/apache/flink/client/program/rest/RestClusterClient.java:1202

                        .orElse(false);
    }

    @VisibleForTesting
    CompletableFuture<URL> getWebMonitorBaseUrl() {
        return FutureUtils.orTimeout(
                        webMonitorLeaderRetriever.getLeaderFuture(),
                        restClusterClientConfiguration.getAwaitLeaderTimeout(),
                        TimeUnit.MILLISECONDS,
                        String.format(
                                "Waiting for leader address of WebMonitorEndpoint timed out after %d ms.",
                                restClusterClientConfiguration.getAwaitLeaderTimeout()))
                .thenApplyAsync(
                        leaderAddressSessionId -> {
                            final String url = leaderAddressSessionId.f0;
                            try {
                                return new URL(url);
                            } catch (MalformedURLException e) {
                                throw new IllegalArgumentException(
                                        "Could not parse URL from " + url, e);
                            }
                        },
                        executorService);
    }
}

View on GitHub (pinned to 2f3c205e92)

Solutions

  1. Check flink-conf.yaml: ensure rest.address and rest.port are set correctly and the address is a valid hostname or IP.
  2. If using Zookeeper/K8s HA, verify the leader election service returns a fully-qualified URL (including scheme).
  3. Inspect the leader address in ZooKeeper (znode data) or K8s configmap for format correctness.
  4. Ensure the rest.bind-port and rest.address are accessible from the client.

Example fix

# flink-conf.yaml — before
rest.address: myhost
# after — include scheme is not needed but ensure address is valid
rest.address: myhost
rest.port: 8081
# Verify leader URL manually:
# echo "conf" | nc <jm-host> <rest-port> | grep rest.address
Defensive patterns

Strategy: validation

Validate before calling

// Validate leader address format before constructing client
String leaderAddress = retrieveLeaderAddress(); // from ZK or K8s
try {
    new URL(leaderAddress);
} catch (MalformedURLException e) {
    // prepend http:// if missing scheme
    if (!leaderAddress.startsWith("http")) {
        leaderAddress = "http://" + leaderAddress;
    }
    new URL(leaderAddress); // re-validate
}

Try / catch

try {
    URL baseUrl = client.getWebMonitorBaseUrl().get();
} catch (ExecutionException e) {
    Throwable cause = ExceptionUtils.stripExecutionException(e);
    if (cause instanceof IllegalArgumentException && cause.getMessage().contains("Could not parse URL")) {
        // leader address is malformed — check rest.address/rest.port in flink-conf.yaml
    }
}

Prevention

When it happens

Trigger: Calling getWebMonitorBaseUrl() during RestClusterClient initialization when the discovered leader address is not a valid URL — e.g., the leader address is a bare hostname without a scheme, contains invalid characters, or is null.

Common situations: ZooKeeper or Kubernetes leader election returns a leader address without an http:// or https:// scheme; misconfigured rest.address or rest.port in flink-conf.yaml; leader address contains whitespace or special characters; network discovery returns an incomplete address.

Related errors


AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14). Data as JSON: /api/errors/ae511eff971c6e42. Report an issue: GitHub.