apache/beam · error
Only Murmur3Partitioner is supported for splitting, using…
Error message
Only Murmur3Partitioner is supported for splitting, using an unique source for the read
What it means
Warning logged by CassandraIO's split logic when the cluster does not use the Murmur3 partitioner. Token-range splitting is only implemented for Murmur3, so instead of failing, the read silently degrades to a single (unique) source with no parallelism — the message tells the user why the requested split count was not honored.
Solutions
- Migrate the Cassandra cluster to Murmur3Partitioner to enable token-range splitting and read parallelism
- Accept single-source reads (reduced parallelism) on non-Murmur3 clusters
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at sdks/java/io/cassandra/src/main/java/org/apache/beam/sdk/io/cassandra/CassandraIO.java:467 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/c0696321dcd777e9.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/java/io/cassandra/src/main/java/org/apache/beam/sdk/io/cassandra/CassandraIO.java:467
Integer splitCount;
if (read.minNumberOfSplits() != null && read.minNumberOfSplits().get() != null) {
splitCount = read.minNumberOfSplits().get();
} else {
splitCount = cluster.getMetadata().getAllHosts().size();
}
List<BigInteger> tokens =
cluster.getMetadata().getTokenRanges().stream()
.map(tokenRange -> new BigInteger(tokenRange.getEnd().getValue().toString()))
.collect(Collectors.toList());
SplitGenerator splitGenerator =
new SplitGenerator(cluster.getMetadata().getPartitioner());
return splitGenerator.generateSplits(splitCount, tokens).stream()
.flatMap(List::stream)
.collect(Collectors.toSet());
} else {
LOG.warn(
"Only Murmur3Partitioner is supported for splitting, using an unique source for "
+ "the read");
String partitioner = cluster.getMetadata().getPartitioner();
RingRange totalRingRange =
RingRange.of(
SplitGenerator.getRangeMin(partitioner),
SplitGenerator.getRangeMax(partitioner));
return Collections.singleton(totalRingRange);
}
}
}
}
@AutoValue.Builder
abstract static class Builder<T> {
abstract Builder<T> setHosts(ValueProvider<List<String>> hosts);
abstract Builder<T> setQuery(ValueProvider<String> query);View on GitHub (pinned to 12126d8942)