apache/druid · error · ISE
Invalid value[ ] for property[ ]. The ZooKeeper-based…
Error message
Invalid value[%s] for property[%s]. The ZooKeeper-based 'remote' task runner has been removed. Remove this property to use the default 'httpRemote' runner (or set it to 'local' for single-process testing). See the Druid upgrade notes for details.
What it means
During startup validation, Druid rejects the removed ZooKeeper-based 'remote' task runner type. The indexer must use 'httpRemote' (the default) or 'local' for single-process testing; any occurrence of druid.indexer.runner.type=remote throws an ISE.
Solutions
- Remove druid.indexer.runner.type so the default 'httpRemote' runner is used.
- Set druid.indexer.runner.type=local only for single-process testing setups.
- Follow the Druid upgrade notes to migrate off the ZK-based remote task runner.
Example fix
// before (runtime.properties) druid.indexer.runner.type=remote // after (runtime.properties) druid.indexer.runner.type=httpRemote
Defensive patterns
Strategy: validation
Validate before calling
String v = props.getProperty("druid.indexer.runner.type");
if ("remote".equals(v)) { throw new IllegalStateException("druid.indexer.runner.type=remote is removed; use httpRemote or local"); } Try / catch
try { injector = new StartupInjectorBuilder().build(); } catch (ISE e) { if (e.getMessage().contains("druid.indexer.runner.type")) { log.error("Remove remote runner config; default is httpRemote"); } throw e; } Prevention
- Never set druid.indexer.runner.type in production configs
- Use 'local' only in single-process test setups
- Review upgrade notes when migrating ZK-based clusters
When it happens
Trigger: Setting druid.indexer.runner.type=remote in runtime.properties, usually on a middle manager/indexer node upgraded from an older Druid that used ZK-based remote runners.
Common situations: Cluster upgrades carrying over legacy middle-manager configs; copying config snippets from old Druid documentation or blogs.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Invalid value[ ] for property[ ]. Only [ ] is supported…
- Config[ ] has been removed. Please use config[ ] instead.
- At least one of the druid.enablePlaintextPort or…
- Dot at the end of property
- Double dot in property
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/9e3e662a92aa6306.
Report an issue: GitHub.
Appendix: source
Thrown at processing/src/main/java/org/apache/druid/guice/StartupInjectorBuilder.java:208
+ " See the Druid upgrade notes for details.",
configuredType,
SERVERVIEW_TYPE_CONFIG_STRING,
SERVERVIEW_TYPE_HTTP,
SERVERVIEW_TYPE_HTTP
);
}
}
/**
* Rejects {@code druid.indexer.runner.type=remote}. The ZooKeeper-based {@code RemoteTaskRunner}
* has been removed; use the HTTP-based {@code httpRemote} runner (the default) or {@code local}
* for single-process testing.
*/
private void validateIndexerRunnerType()
{
String configuredType = properties.getProperty(INDEXER_RUNNER_TYPE_CONFIG_STRING);
if (INDEXER_RUNNER_TYPE_REMOTE.equals(configuredType)) {
throw new ISE(
"Invalid value[%s] for property[%s]. The ZooKeeper-based 'remote' task runner has"
+ " been removed. Remove this property to use the default 'httpRemote' runner (or"
+ " set it to 'local' for single-process testing). See the Druid upgrade notes for"
+ " details.",
configuredType,
INDEXER_RUNNER_TYPE_CONFIG_STRING
);
}
}
private void validateRemovedProcessingConfigs()
{
checkDeletedConfigAndThrow(
"druid.processing.merge.task.initialYieldNumRows",
"druid.processing.merge.initialYieldNumRows"
);
checkDeletedConfigAndThrow(
"druid.processing.merge.task.targetRunTimeMillis",View on GitHub (pinned to 9b90983fd2)