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

  1. Migrate the Cassandra cluster to Murmur3Partitioner to enable token-range splitting and read parallelism
  2. 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)