Chapter 01 · Cassandra Foundations, Version 5.0, Architecture, and Lab Setup

Apache Cassandra 5.0 Baseline, Java Requirements, Configuration Layout, and Release Awareness

Turn “Cassandra 5” into a reproducible environment contract: exact patch, runtime, tools, image, configuration provenance, storage boundaries, network surfaces and release-aware assumptions.

Intermediate95–115 minutesVersion and configuration provenance labApache Cassandra 5.0.9 · pinned Docker Official ImageLast reviewed: September 2026

Learning outcomes

Two AtlasMart developers both say “I tested Cassandra 5,” but one used a moving container tag and another used an old tarball with a different Java runtime and configuration tree. Their commands produce different behavior. Before deeper labs, the course needs an explicit version-and-configuration provenance record so a failure can be attributed to workload semantics rather than an unknown environment.

01

Pin the current Cassandra 5.0 patch used by the course and distinguish series, patch, image tag, tool version and runtime version.

02

Explain Cassandra 5.0 Java support without assuming that the host Java version equals the Java inside a container.

03

Locate cassandra.yaml, JVM options, rack/datacenter properties, logging configuration, data files, commit log and saved caches for the chosen packaging path.

04

Record native transport, JMX, authentication/authorization and topology settings that materially change later labs.

05

Use release notes and upgrade/security guidance as living inputs rather than freezing September 2026 assumptions permanently.

Chapter baseline reviewed 7 September 2026

The current generally available Apache Cassandra line is 5.0 and the current patch verified for this chapter is 5.0.9. Reproducible container examples pin cassandra:5.0.9 instead of using a moving latest tag. Cassandra 5.0 binary releases support documented Java 11/17 runtime paths; the lesson always asks you to record the Java runtime actually present in your installation or image rather than inferring it from the Cassandra version.

Execution and safety note

The generation environment used to build this chapter does not contain Docker, Cassandra, cqlsh, or nodetool. Commands were checked against current official documentation but were not executed here. Expected output is therefore described by shape and invariant, never presented as captured output. The lab uses an isolated Docker network and course-specific containers/volumes. Do not point any cleanup, failure, configuration, or schema command at unrelated or production Cassandra data.

1. A reproducible baseline has more than one version number

5.0.9 identifies the Cassandra server release pinned for this chapter. It does not identify the Java patch, cqlsh Python environment, nodetool client runtime, a language driver, the container base distribution, or your host operating system. Reproducibility requires recording all components that can affect behavior.

Surface Chapter 01 baseline Evidence command
Cassandra server 5.0.9 cassandra -v and system.local.release_version
Container cassandra:5.0.9 docker inspect image reference/digest
Java runtime Supported Cassandra 5.0 runtime; record actual image/host value java -version
cqlsh Shipped with pinned Cassandra image/package cqlsh --version / SHOW VERSION
nodetool Shipped with pinned Cassandra image/package nodetool version
Native protocol Negotiated by client/server SHOW VERSION and driver metadata

Official Cassandra 5.0 Java documentation distinguishes build and runtime compatibility. Do not copy a blanket “Cassandra 5 requires Java 17” statement into every environment. Package maintainers and container images may supply a supported runtime independently of the host. The safe method is to follow the installation path's current documentation and record java -version in the same runtime context that launches Cassandra.

2. Configuration provenance: know which file the process used

The main server configuration is cassandra.yaml. Package/container installations commonly expose configuration under /etc/cassandra; tarball installations use the distribution's conf directory. The same logical setting can also be influenced by packaging entrypoints or environment-variable translation. Therefore “I edited a cassandra.yaml somewhere on disk” is not evidence that the running process consumed it.

Chapter 01 records, but does not tune, the surfaces that later chapters depend on: cluster_name; listen/broadcast/native transport addresses; seed configuration; endpoint snitch/locator/topology; data directories; commit-log directory; saved-cache directory; native transport port; authenticator; authorizer; client encryption; internode encryption; JMX access; and JVM options.

configuration provenance · inspect, do not mutate
docker exec atlasmart-cass-1 sh -lc 'echo CASSANDRA_CONF=$CASSANDRA_CONF; ls -la "$CASSANDRA_CONF"'docker exec atlasmart-cass-1 sh -lc 'grep -nE "^(cluster_name|listen_address|rpc_address|broadcast_address|broadcast_rpc_address|endpoint_snitch|authenticator|authorizer|native_transport_port|commitlog_directory|saved_caches_directory):" "$CASSANDRA_CONF/cassandra.yaml"'docker exec atlasmart-cass-1 sh -lc 'grep -n "^data_file_directories:" "$CASSANDRA_CONF/cassandra.yaml"'docker exec atlasmart-cass-1 sh -lc 'cat "$CASSANDRA_CONF/cassandra-rackdc.properties"' 

Some values can be commented/defaulted, rewritten by the Docker entrypoint, or represented in separate files. Record the exact file path and final effective evidence. Later lessons should never assume an old default simply because it appeared in an earlier Cassandra release.

3. Storage paths and process identity are operational state

Cassandra's storage engine separates concerns that must not be collapsed into “the database folder.” Data directories hold immutable SSTable components and related table data. The commit log is an append-oriented durability mechanism for writes before they are safely represented in SSTables. Saved caches persist selected cache metadata/state according to configuration. These surfaces have different I/O patterns, capacity risks, backup semantics, and recovery roles.

In the Docker Official Image, mounting a named volume at /var/lib/cassandra makes course data survive container replacement. Running without a volume can be acceptable for a disposable demonstration, but it is misleading if the learner expects container replacement to preserve state. Persistence inside one Docker volume is still not a backup.

storage/network evidence · record actual state
docker inspect atlasmart-cass-1 --format '{{json .Mounts}}'docker exec atlasmart-cass-1 sh -lc 'du -sh /var/lib/cassandra 2>/dev/null; find /var/lib/cassandra -maxdepth 2 -type d | sort | head -40'docker exec atlasmart-cass-1 sh -lc 'ss -lnt 2>/dev/null | grep -E ":(7000|7001|7199|9042)\b" || true' 

Port 9042 is the standard CQL native transport port. JMX is a separate management surface used by nodetool; the course deliberately keeps it inside the isolated container/network instead of publishing it broadly. TLS and authentication are also separate controls: enabling credentials does not automatically encrypt client traffic, and encrypting transport does not define authorization.

4. Release awareness: Cassandra 5.0 is a series, not a static sentence

Cassandra 5.0 introduced or advanced several capabilities that later chapters will use, including Storage-Attached Indexing (SAI), vector types/search, new storage-engine structures, guardrails, and operational improvements. Those names are not permission to copy commands from a random blog. Feature syntax, defaults, recommended compaction behavior, driver support, security advisories, and upgrade compatibility are version-sensitive.

One important example is compaction guidance. The course later teaches STCS, LCS, TWCS and UCS because operators need to understand their workload tradeoffs, but current 5.0 guidance recommends UnifiedCompactionStrategy for most new workloads. Chapter 01 therefore records the configured strategy without tuning it. Chapter 12 will measure and compare strategies against the then-current documentation rather than turning an older default into folklore.

Do not use a moving tag in a reproducible lab.

The official quickstart may use cassandra:latest to minimize onboarding friction. A course artifact that learners will reproduce months later needs a pinned tag (and, for high-assurance environments, an image digest). “Latest” can silently change Cassandra, Java, base OS and dependency behavior between runs.

5. Build an environment manifest and detect a bad baseline

manifest · capture before debugging
docker network create atlasmart-cassandradocker volume create atlasmart-cass-1-datadocker run -d --name atlasmart-cass-1 --hostname atlasmart-cass-1 --network atlasmart-cassandra -e CASSANDRA_CLUSTER_NAME=atlasmart-course -e CASSANDRA_DC=dc1 -e CASSANDRA_RACK=rack1 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -v atlasmart-cass-1-data:/var/lib/cassandra cassandra:5.0.9# After cqlsh is ready:docker exec atlasmart-cass-1 cassandra -vdocker exec atlasmart-cass-1 java -versiondocker exec atlasmart-cass-1 cqlsh -e "SHOW VERSION"docker exec atlasmart-cass-1 nodetool versiondocker exec atlasmart-cass-1 nodetool infodocker exec atlasmart-cass-1 cqlsh -e "SELECT cluster_name, release_version, cql_version, data_center, rack, partitioner FROM system.local;"docker inspect atlasmart-cass-1 --format '{{.Config.Image}} {{.Image}}' 

Deliberately wrong baseline

Replace the pinned image with cassandra:latest in a scratch command and you have created an environment whose future identity is unknown. Another failure is to point a node at a reused production seed/cluster name, potentially confusing discovery expectations. The correction is to delete only the disposable container, restore the course-specific cluster/network/volume names, and prove the resulting identity with both system tables and nodetool.

A Java mismatch on tarball/package paths should be diagnosed from the Cassandra startup log and java -version, not “fixed” by randomly changing JVM flags. Follow the current version's support matrix and package documentation; keep host Java and container Java conceptually separate.

Cleanup

cleanup · baseline lab
docker rm -f atlasmart-cass-1docker volume rm atlasmart-cass-1-datadocker network rm atlasmart-cassandra

Production judgment

A version manifest is part of incident response and rollback design. A production upgrade plan needs the exact current/target server versions, Java compatibility, driver/native-protocol compatibility, topology, schema state, security advisories, backup/restore evidence, and rollback boundary. “5.0” alone is not sufficient to reproduce or defend an incident.

The next lesson uses this manifest to build the single-node lab carefully, inspect native/JMX/configuration evidence, and distinguish a startup race from a genuine connection failure.

Check your understanding

  1. Why is “Cassandra 5.0” insufficient as a reproducible environment description?
  2. Does the Java version installed on the Windows host prove the Java used inside the Cassandra container?
  3. Why is editing an arbitrary cassandra.yaml path not evidence of effective configuration?
  4. Why does a named Docker data volume not count as a backup?
  5. Why does the course pin cassandra:5.0.9 even though an official quickstart may show latest?
Review the answers

1. The 5.0 series contains patch releases, while Java, cqlsh/nodetool, drivers, container base images, and configuration can change independently. Record the exact patch and runtime/tool state.

2. No. A container carries its own runtime filesystem. Run java -version inside the same container/process context.

3. Different packaging paths use different configuration locations and container entrypoints can transform settings. You need provenance for the file/environment actually consumed by the running node.

4. It can preserve data across container replacement, but it shares the local host/storage failure domain and has not been proven restorable as an independent recovery artifact.

5. A pinned tag preserves the intended server baseline for repeatable evidence. A moving tag can silently change the environment between learners or dates.

Summary and next step

This lesson’s concepts, evidence path, failure boundaries, and production judgment should now be explicit enough to verify rather than assume. Re-run the check-your-understanding prompts and preserve any lab evidence you need before changing or cleaning up the environment.

Next, continue to Start a Single-Node or Container Lab, Connect with cqlsh, and Inspect Cluster Metadata.

Authoritative references

Keep knowledge open

Help the academy stay free and grow.

If these tutorials save you time, a small donation supports new lessons, technical review, diagrams, examples, and long-term maintenance.

ETHEthereum / ERC-20 only
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0

Send only Ethereum or ERC-20 compatible assets to this address.