<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cassandra Operations Guides on Netdata</title><link>https://www.netdata.cloud/guides/cassandra/</link><description>Recent content in Cassandra Operations Guides on Netdata</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://www.netdata.cloud/guides/cassandra/index.xml" rel="self" type="application/rss+xml"/><item><title>Cassandra adding and removing nodes safely: vnodes, tokens, and cleanup</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-adding-removing-nodes-safely/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-adding-removing-nodes-safely/</guid><description>&lt;h1 id="cassandra-adding-and-removing-nodes-safely-vnodes-tokens-and-cleanup">Cassandra adding and removing nodes safely: vnodes, tokens, and cleanup&lt;/h1>
&lt;p>Expanding or contracting a Cassandra cluster redistributes token ownership, triggers bulk streaming, and leaves stale data that cleanup must reclaim. Skip cleanup after a bootstrap, run it while a node is joining, or misconfigure token allocation, and you waste disk space, create hot spots, and risk silent inconsistency.&lt;/p>
&lt;p>This guide covers adding and removing nodes with virtual nodes (vnodes) enabled, the default for Cassandra 3.x through 5.x. Commands and paths assume standard packaged Cassandra on Linux. Perform topology changes one node at a time.&lt;/p></description></item><item><title>Cassandra Batch too large warning: oversized batches and coordinator OOM</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-batch-too-large-warning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-batch-too-large-warning/</guid><description>&lt;h1 id="cassandra-batch-too-large-warning-oversized-batches-and-coordinator-oom">Cassandra Batch too large warning: oversized batches and coordinator OOM&lt;/h1>
&lt;p>Oversized &lt;code>BEGIN BATCH&lt;/code> statements cause &lt;code>Batch for [ks.table] is of size N, exceeding specified threshold of M by ...&lt;/code> warnings and coordinator OutOfMemoryError. Unlike single-partition batches, which provide atomicity within one partition, multi-partition batches force the coordinator to hold mutation buffers for every affected partition until all replicas acknowledge. When the buffer grows large enough, it triggers heap pressure, long GC pauses, and eventual OOM.&lt;/p></description></item><item><title>Cassandra clock skew: how NTP drift silently corrupts data</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-clock-skew-data-corruption/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-clock-skew-data-corruption/</guid><description>&lt;h1 id="cassandra-clock-skew-how-ntp-drift-silently-corrupts-data">Cassandra clock skew: how NTP drift silently corrupts data&lt;/h1>
&lt;p>Cassandra&amp;rsquo;s last-write-wins conflict resolution is simple, fast, and unforgiving. Every write carries a timestamp; when replicas disagree, the highest timestamp wins. The database assumes larger timestamps correspond to later wall-clock events. When node clocks drift, that assumption collapses. A write that happened first can carry a later timestamp, or a later write an earlier one. The result is not a timeout, an &lt;code>UnavailableException&lt;/code>, or an &lt;code>ERROR&lt;/code> log entry. It is silent data loss, permanent shadowing of valid writes, or the sudden return of deleted rows.&lt;/p></description></item><item><title>Cassandra commitlog disk full: segment exhaustion and forced flushes</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-commitlog-disk-full/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-commitlog-disk-full/</guid><description>&lt;h1 id="cassandra-commitlog-disk-full-segment-exhaustion-and-forced-flushes">Cassandra commitlog disk full: segment exhaustion and forced flushes&lt;/h1>
&lt;p>WriteTimeoutException from client drivers, a node still UP in gossip, and a commitlog volume nearing 100% with climbing pending tasks in &lt;code>nodetool info&lt;/code> mean commitlog segment exhaustion. Unlike data disk exhaustion, which slows compaction, commitlog pressure blocks the write path directly: every mutation must be durably appended to the WAL before acknowledgment.&lt;/p>
&lt;p>Cassandra recycles commitlog segments only after all memtables they reference are flushed to SSTables. When the flush pipeline cannot keep pace, segments accumulate until the total size exceeds &lt;code>commitlog_total_space&lt;/code> (or &lt;code>commitlog_total_space_in_mb&lt;/code> on older versions) or the filesystem fills. Cassandra then forces flushes of every dirty column family referenced in the oldest segment to free space. If flushes are already backed up, this cascades into blocked segment allocation, dropped mutations, and depending on &lt;code>commit_failure_policy&lt;/code>, a node that stops accepting writes entirely.&lt;/p></description></item><item><title>Cassandra commitlog pending tasks: write-path I/O pressure</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-commitlog-pending-tasks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-commitlog-pending-tasks/</guid><description>&lt;h1 id="cassandra-commitlog-pending-tasks-write-path-io-pressure">Cassandra commitlog pending tasks: write-path I/O pressure&lt;/h1>
&lt;p>Sustained non-zero CommitLog PendingTasks means a Cassandra node&amp;rsquo;s write path is backing up. Every write must be appended to the commitlog and synced to disk before the coordinator acknowledges it. When the fsync thread cannot keep up, mutations queue. This starts as elevated write latency; if the queue persists, it forces emergency memtable flushes, overwhelms the flush and compaction pipeline, and produces dropped mutations.&lt;/p></description></item><item><title>Cassandra compaction death spiral: when writes outrun compaction throughput</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-compaction-death-spiral/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-compaction-death-spiral/</guid><description>&lt;h1 id="cassandra-compaction-death-spiral-when-writes-outrun-compaction-throughput">Cassandra compaction death spiral: when writes outrun compaction throughput&lt;/h1>
&lt;p>P99 read latency climbs while disk utilisation on the data volume pins near 100%. &lt;code>nodetool compactionstats&lt;/code> shows pending tasks rising hour over hour, and &lt;code>nodetool tablestats&lt;/code> reports a growing SSTable count. Writes stay fast; reads slow down. This is the compaction death spiral: writes exceed compaction throughput, SSTables accumulate, and read amplification rises.&lt;/p>
&lt;p>Unlike a sudden node crash, this failure is gradual. A background queue grows a little each day. Once disk I/O saturates, the cycle self-reinforces: compaction falls further behind, reads consult more files, latency spikes, and the backlog deepens. By the time client SLAs breach, recovery can take hours.&lt;/p></description></item><item><title>Cassandra compaction strategies: STCS vs LCS vs TWCS vs UCS</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-choosing-compaction-strategy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-choosing-compaction-strategy/</guid><description>&lt;h1 id="cassandra-compaction-strategies-stcs-vs-lcs-vs-twcs-vs-ucs">Cassandra compaction strategies: STCS vs LCS vs TWCS vs UCS&lt;/h1>
&lt;p>Compaction merges immutable SSTables, discards tombstones, and reclaims disk space. The strategy assigned to a table controls the tradeoff between write amplification and read amplification, and it determines how much temporary disk headroom you must preserve. A fit strategy keeps SSTable counts low and latency predictable. A mismatch creates compaction debt: creeping P99 read latency first, then disk space exhaustion, and finally write rejections when compaction cannot reclaim space fast enough to keep up with flushes.&lt;/p></description></item><item><title>Cassandra compaction stuck: large partitions blocking a compaction thread</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-stuck-compaction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-stuck-compaction/</guid><description>&lt;h1 id="cassandra-compaction-stuck-large-partitions-blocking-a-compaction-thread">Cassandra compaction stuck: large partitions blocking a compaction thread&lt;/h1>
&lt;p>&lt;code>nodetool compactionstats&lt;/code> shows a compaction on one table that has not moved past the same byte offset for hours. The progress percentage is frozen, the pending queue behind it is growing, and read latency on that table is creeping up. This is not a slow disk. A single large partition has monopolized a compaction thread, turning background maintenance into a bottleneck that threatens node stability.&lt;/p></description></item><item><title>Cassandra consistency levels explained: QUORUM, ONE, LOCAL_QUORUM, and EACH_QUORUM</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-consistency-levels-explained/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-consistency-levels-explained/</guid><description>&lt;h1 id="cassandra-consistency-levels-explained-quorum-one-local_quorum-and-each_quorum">Cassandra consistency levels explained: QUORUM, ONE, LOCAL_QUORUM, and EACH_QUORUM&lt;/h1>
&lt;p>Consistency level (CL) balances latency, availability, and correctness. It does not control how many replicas store data; replication factor (RF) does. CL controls how many replicas must acknowledge a read or write before the coordinator returns to the client. The wrong choice produces UnavailableException during rolling restarts that should be safe, or leaves replicas inconsistent for hours after a write is acknowledged at CL=ONE. The four CLs that define most production topologies are ONE, QUORUM, LOCAL_QUORUM, and EACH_QUORUM.&lt;/p></description></item><item><title>Cassandra CorruptSSTableException and FSError: disk failure and recovery</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-storage-exceptions-corrupt-sstable/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-storage-exceptions-corrupt-sstable/</guid><description>&lt;h1 id="cassandra-corruptsstableexception-and-fserror-disk-failure-and-recovery">Cassandra CorruptSSTableException and FSError: disk failure and recovery&lt;/h1>
&lt;p>A Cassandra node stops serving traffic or refuses to start. In &lt;code>system.log&lt;/code> you see &lt;code>org.apache.cassandra.io.sstable.CorruptSSTableException&lt;/code>, &lt;code>FSError&lt;/code>, or a JVM shutdown triggered by a filesystem exception. These indicate disk failure, filesystem corruption, or irreversible SSTable damage, not retryable application bugs.&lt;/p>
&lt;p>Because SSTables are immutable, a corrupt file cannot be patched. The node either stops serving the data or shuts down, depending on &lt;code>disk_failure_policy&lt;/code>. Recovery requires at least one healthy replica. Without that, corruption is data loss.&lt;/p></description></item><item><title>Cassandra disk space exhaustion: emergency recovery when the data volume fills</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-disk-space-exhaustion/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-disk-space-exhaustion/</guid><description>&lt;h1 id="cassandra-disk-space-exhaustion-emergency-recovery-when-the-data-volume-fills">Cassandra disk space exhaustion: emergency recovery when the data volume fills&lt;/h1>
&lt;p>A Cassandra node that runs out of disk space does not degrade gracefully. Compaction halts because it cannot allocate temporary space to merge SSTables. Old SSTables are never deleted. Writes append to the commitlog until segment allocation blocks. At that point the node rejects mutations and &lt;code>CommitLog.WaitingOnSegmentAllocation&lt;/code> climbs. You may see &lt;code>No space left on device&lt;/code> errors while the data volume still reports a few percent free, because Cassandra&amp;rsquo;s internal headroom requirements are stricter than the filesystem.&lt;/p></description></item><item><title>Cassandra dropped mutations: silent write loss and load shedding</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-dropped-mutations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-dropped-mutations/</guid><description>&lt;h1 id="cassandra-dropped-mutations-silent-write-loss-and-load-shedding">Cassandra dropped mutations: silent write loss and load shedding&lt;/h1>
&lt;p>Your application logs successful writes, but reads return stale or missing data. An alert fires on &lt;code>DroppedMessage&lt;/code> rate for &lt;code>MUTATION&lt;/code> scope. The client never received an error, yet a replica discarded the write after it sat in the &lt;code>MutationStage&lt;/code> queue past timeout. This is Cassandra load shedding. Silent write loss occurs whenever not enough other replicas succeed to meet the consistency level.&lt;/p></description></item><item><title>Cassandra dropped reads and other messages: reading nodetool tpstats Dropped</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-dropped-reads-and-messages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-dropped-reads-and-messages/</guid><description>&lt;h1 id="cassandra-dropped-reads-and-other-messages-reading-nodetool-tpstats-dropped">Cassandra dropped reads and other messages: reading nodetool tpstats Dropped&lt;/h1>
&lt;p>When &lt;code>nodetool tpstats&lt;/code> reports non-zero values in the Dropped section, the node discarded internal messages that exceeded their stage timeout. These counters are cumulative since JVM startup, not rates. A non-zero value warrants investigation: the timeout is defined in &lt;code>cassandra.yaml&lt;/code> by settings such as &lt;code>read_request_timeout_in_ms&lt;/code> and &lt;code>write_request_timeout_in_ms&lt;/code>, so a drop means the message sat in the queue for seconds.&lt;/p>
&lt;p>Dropped messages are a lagging indicator. Correlate the drop type with the matching thread pool pending count, disk I/O latency, and GC pause duration to find the root cause.&lt;/p></description></item><item><title>Cassandra frequent memtable flushes: small SSTables and compaction burden</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-frequent-memtable-flushes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-frequent-memtable-flushes/</guid><description>&lt;h1 id="cassandra-frequent-memtable-flushes-small-sstables-and-compaction-burden">Cassandra frequent memtable flushes: small SSTables and compaction burden&lt;/h1>
&lt;p>When &lt;code>MemtableFlushWriter&lt;/code> pending tasks climb on Cassandra nodes, SSTables often land on disk at only tens of megabytes and multiply quickly. Within hours, &lt;code>PendingCompactions&lt;/code> rises, read latency drifts, and disk I/O stays pinned despite flat write throughput. Frequent memtable flushing under memory pressure creates compaction debt and read amplification. Once started, the cluster enters a feedback loop that is hard to unwind without targeted tuning.&lt;/p></description></item><item><title>Cassandra GC death spiral: long pauses, gossip flapping, and recovery</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-gc-death-spiral/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-gc-death-spiral/</guid><description>&lt;h1 id="cassandra-gc-death-spiral-long-pauses-gossip-flapping-and-recovery">Cassandra GC death spiral: long pauses, gossip flapping, and recovery&lt;/h1>
&lt;p>You are paged because a Cassandra node is flapping between UP and DOWN in &lt;code>nodetool status&lt;/code>, client timeouts are rising, and system logs show &lt;code>GCInspector&lt;/code> warnings. The node has not crashed. It is stuck in a GC death spiral: heap pressure produces long pauses, gossip marks the node DOWN, and the resulting retry and hint traffic creates even more heap pressure when the node recovers. It can start with a single large partition read, a misconfigured cache, or an oversized batch statement, and escalates until the node is effectively useless. Catch it early by watching the GC floor and gossip stability together, not just process uptime.&lt;/p></description></item><item><title>Cassandra GC pauses too long: diagnosing G1 stop-the-world pauses</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-gc-pauses-too-long/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-gc-pauses-too-long/</guid><description>&lt;h1 id="cassandra-gc-pauses-too-long-diagnosing-g1-stop-the-world-pauses">Cassandra GC pauses too long: diagnosing G1 stop-the-world pauses&lt;/h1>
&lt;p>&lt;code>ReadTimeoutException&lt;/code> and &lt;code>WriteTimeoutException&lt;/code> from clients, &lt;code>GCInspector&lt;/code> warnings in &lt;code>system.log&lt;/code>, and nodes flapping between &lt;code>UP&lt;/code> and &lt;code>DOWN&lt;/code> in &lt;code>nodetool status&lt;/code> without a JVM restart mean G1 is producing long stop-the-world pauses. Root causes include promotion pressure, humongous objects, or allocation bursts. Left unchecked, one node&amp;rsquo;s pauses trigger gossip failures, retries, and hint replay that drive cluster-wide degradation.&lt;/p>
&lt;h2 id="what-this-means">What this means&lt;/h2>
&lt;p>G1GC is the default collector for Cassandra 4.x on JDK 11+. During a stop-the-world pause, every thread freezes, including gossip, native transport, and compaction. Cassandra logs &lt;code>GCInspector&lt;/code> warnings when a pause exceeds the configured threshold, commonly 500 ms &lt;!-- TODO: verify default gc_warn_threshold_in_ms in target versions -->. Pauses longer than ~2 seconds cause gossip rounds to be missed; under the default phi accrual failure detector threshold of 8, sustained pauses of tens of seconds result in the node being marked DOWN &lt;!-- TODO: verify exact pause duration for conviction at default phi threshold -->. While the JVM is paused, mutations queue, reads stall, hints accumulate on peers, and clients retry. On recovery, hint replay and retry bursts raise allocation pressure, creating a self-reinforcing spiral.&lt;/p></description></item><item><title>Cassandra gossip flapping: nodes bouncing UP and DOWN</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-gossip-flapping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-gossip-flapping/</guid><description>&lt;h1 id="cassandra-gossip-flapping-nodes-bouncing-up-and-down">Cassandra gossip flapping: nodes bouncing UP and DOWN&lt;/h1>
&lt;p>&lt;code>nodetool status&lt;/code> shows a node flipping between &lt;code>UN&lt;/code> and &lt;code>DN&lt;/code>, or multiple nodes doing it in sequence. Each transition forces the cluster to replay hints, recalculate read repair, and propagate gossip state. When a node transitions more than three times in thirty minutes, you are dealing with gossip flapping. It is almost always JVM heap pressure or GC pauses misdiagnosed as a network problem.&lt;/p></description></item><item><title>Cassandra heap pressure: sizing the JVM heap and tuning G1GC</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-heap-pressure-tuning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-heap-pressure-tuning/</guid><description>&lt;h1 id="cassandra-heap-pressure-sizing-the-jvm-heap-and-tuning-g1gc">Cassandra heap pressure: sizing the JVM heap and tuning G1GC&lt;/h1>
&lt;p>Cassandra runs as a single JVM process per node. Every write path allocation, memtable mutation, read merge buffer, and cache entry lives on the heap. When the heap is undersized or GC is left at JVM defaults, stop-the-world pauses freeze gossip, client requests, and compaction. A pause longer than roughly 18 seconds (the default phi accrual threshold is 8) causes peers to mark the node DOWN, which triggers hinted handoff, replay storms, and client retries that worsen memory pressure: the GC death spiral.&lt;/p></description></item><item><title>Cassandra hint overflow: max_hint_window expiry and silent data divergence</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-hint-overflow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-hint-overflow/</guid><description>&lt;h1 id="cassandra-hint-overflow-max_hint_window-expiry-and-silent-data-divergence">Cassandra hint overflow: max_hint_window expiry and silent data divergence&lt;/h1>
&lt;p>You restart a node after a four-hour outage. Gossip converges, &lt;code>nodetool status&lt;/code> shows &lt;code>UN&lt;/code>, and clients reconnect. Reads at consistency level &lt;code>ONE&lt;/code> return stale data. The node has never been repaired.&lt;/p>
&lt;p>The problem is hint overflow: the outage lasted longer than &lt;code>max_hint_window_in_ms&lt;/code> (default three hours), so coordinators stopped saving hints after the window expired. Writes accepted during the final hour of the outage are missing from that replica. Coordinator logs show no errors; write acknowledgments succeeded because other replicas responded. Only anti-entropy repair closes the gap. Without it, the missing data sits on that replica indefinitely, surfacing as inconsistent reads or resurrected deletes.&lt;/p></description></item><item><title>Cassandra hints accumulating: hinted handoff backlog and replay storms</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-hints-accumulating/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-hints-accumulating/</guid><description>&lt;h1 id="cassandra-hints-accumulating-hinted-handoff-backlog-and-replay-storms">Cassandra hints accumulating: hinted handoff backlog and replay storms&lt;/h1>
&lt;p>A coordinator node triggers a disk alert for &lt;code>/var/lib/cassandra/hints&lt;/code>, or a replica returning from maintenance flaps UP/DOWN under a write burst it never requested. Hints let writes succeed when a replica is temporarily unreachable, but a large backlog turns that safety net into a secondary failure. Hints consume coordinator disk, expire after &lt;code>max_hint_window_in_ms&lt;/code>, and can synchronize into a replay storm that overwhelms a recovering node.&lt;/p></description></item><item><title>Cassandra hot partition: when one key saturates a replica set</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-hot-partition/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-hot-partition/</guid><description>&lt;h1 id="cassandra-hot-partition-when-one-key-saturates-a-replica-set">Cassandra hot partition: when one key saturates a replica set&lt;/h1>
&lt;p>One or two nodes run hot while the rest of the cluster idles. Client P99 latency doubles or triples, but the average looks fine. Timeouts cluster on a subset of hosts, and &lt;code>nodetool status&lt;/code> shows uneven load that does not match token ring expectations. When you trace requests, a single partition key consumes a disproportionate share of reads or writes. This is a hot partition: the partitioner mapped one key to a narrow token range, and the replicas owning that range are saturated.&lt;/p></description></item><item><title>Cassandra java.lang.OutOfMemoryError: Java heap space - causes and recovery</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-out-of-memory-error/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-out-of-memory-error/</guid><description>&lt;h1 id="cassandra-javalangoutofmemoryerror-java-heap-space---causes-and-recovery">Cassandra java.lang.OutOfMemoryError: Java heap space - causes and recovery&lt;/h1>
&lt;p>Your Cassandra log shows &lt;code>java.lang.OutOfMemoryError: Java heap space&lt;/code>. The node stops responding to client requests, gossip marks it DOWN, and the JVM may crash. Because Cassandra runs as a single JVM process, heap exhaustion freezes every in-memory subsystem: memtables, prepared statement caches, bloom filter summaries, and in-flight request buffers.&lt;/p>
&lt;p>The heap may climb toward its limit for hours, or a single massive allocation from a large partition read or oversized batch can push it over immediately. Recovery depends on whether the root cause is capacity, data modeling, or a traffic flood.&lt;/p></description></item><item><title>Cassandra killed by the Linux OOM killer: off-heap memory and RSS</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-off-heap-oom-kill/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-off-heap-oom-kill/</guid><description>&lt;h1 id="cassandra-killed-by-the-linux-oom-killer-off-heap-memory-and-rss">Cassandra killed by the Linux OOM killer: off-heap memory and RSS&lt;/h1>
&lt;p>The JVM heap chart shows 50% utilization and a flat line. There is no &lt;code>OutOfMemoryError&lt;/code>. Then the Cassandra process vanishes. &lt;code>dmesg&lt;/code> shows the OOM killer terminated the JVM: &lt;code>Killed process 12345 (java)&lt;/code>. The JVM heap metric does not include native allocations: bloom filters, compression metadata, index summaries, direct buffers, and chunk cache. When heap plus off-heap RSS exceeds available RAM, the kernel kills the process. This guide covers how to confirm that pattern, reduce off-heap footprint, and prevent recurrence.&lt;/p></description></item><item><title>Cassandra large partition pathology: Compacting large partition warnings and reads</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-large-partition/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-large-partition/</guid><description>&lt;h1 id="cassandra-large-partition-pathology-compacting-large-partition-warnings-and-reads">Cassandra large partition pathology: Compacting large partition warnings and reads&lt;/h1>
&lt;p>If &lt;code>system.log&lt;/code> prints &lt;code>Compacting large partition ks/table:key (N bytes)&lt;/code> and reads to the affected table are spiking, a single partition has crossed &lt;code>compaction_large_partition_warning_threshold_mb&lt;/code> (default 100 MB). Oversized partitions force the node to deserialize a large in-memory index on reads, rewrite the entire partition during compaction, and move it atomically during streaming or repair. Left alone, the partition grows until it triggers GC pauses, gossip flapping, and cascading retries. Use this guide to confirm the offending key, measure the blast radius, and choose between immediate relief and a data-model fix.&lt;/p></description></item><item><title>Cassandra lightweight transaction contention: Paxos round-trips and CAS latency</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-lwt-contention/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-lwt-contention/</guid><description>&lt;h1 id="cassandra-lightweight-transaction-contention-paxos-round-trips-and-cas-latency">Cassandra lightweight transaction contention: Paxos round-trips and CAS latency&lt;/h1>
&lt;p>A normal Cassandra write reaches a coordinator, gets appended to the commitlog and memtable on the replicas, and returns. One network round-trip. A lightweight transaction (LWT) using &lt;code>IF NOT EXISTS&lt;/code>, &lt;code>IF EXISTS&lt;/code>, or &lt;code>IF &amp;lt;condition&amp;gt;&lt;/code> triggers Paxos consensus instead: four round-trips of coordination overhead, plus serialization of contending requests against the same partition. If your monitoring only tracks aggregate read and write latency, LWT tail latency is invisible until clients time out.&lt;/p></description></item><item><title>Cassandra monitoring checklist: the signals every production cluster needs</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-monitoring-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-monitoring-checklist/</guid><description>&lt;h1 id="cassandra-monitoring-checklist-the-signals-every-production-cluster-needs">Cassandra monitoring checklist: the signals every production cluster needs&lt;/h1>
&lt;p>The four maturity levels below are cumulative. Do not instrument level 2 until level 1 is visible and alerted.&lt;/p>
&lt;p>Cassandra&amp;rsquo;s peer-to-peer architecture and LSM storage engine create failure modes generic infrastructure monitoring misses. A node can be UP in gossip and accepting CQL connections while dropping mutations or accumulating compaction debt that only surfaces hours later. These signals catch liveness, performance, saturation, and consistency failures: GC death spirals, compaction avalanches, tombstone storms, and silent data divergence.&lt;/p></description></item><item><title>Cassandra monitoring maturity model: from survival to expert</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-monitoring-maturity-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-monitoring-maturity-model/</guid><description>&lt;h1 id="cassandra-monitoring-maturity-model-from-survival-to-expert">Cassandra monitoring maturity model: from survival to expert&lt;/h1>
&lt;p>Cassandra exposes JMX MBeans, virtual tables, and log signals. Without priority, teams miss compaction debt or drown in noise. This model structures production monitoring into four cumulative levels. Each level adds signals that reduce mean time to detection and catch the failures that dominate Cassandra incidents: data resurrection from missed repair, compaction death spirals, and GC-induced gossip flapping.&lt;/p>
&lt;p>Audit your current instrumentation against these levels. See the &lt;a href="https://www.netdata.cloud/guides/cassandra/cassandra-monitoring-checklist/">Cassandra monitoring checklist&lt;/a> for a condensed signal inventory.&lt;/p></description></item><item><title>Cassandra native transport not running: node UP in gossip but refusing CQL clients</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-native-transport-not-running/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-native-transport-not-running/</guid><description>&lt;h1 id="cassandra-native-transport-not-running-node-up-in-gossip-but-refusing-cql-clients">Cassandra native transport not running: node UP in gossip but refusing CQL clients&lt;/h1>
&lt;p>A node reports &lt;code>UN&lt;/code> in &lt;code>nodetool status&lt;/code> but rejects CQL connections on port 9042. Gossip and replication are healthy; the failure is isolated to the native transport layer.&lt;/p>
&lt;p>Because the node remains in the token ring, it continues to handle internode replication, gossip, and streaming. Applications see it as down; the cluster sees it as up. The JMX attribute &lt;code>NativeTransportRunning&lt;/code> on &lt;code>org.apache.cassandra.db:type=StorageService&lt;/code> is &lt;code>false&lt;/code> while gossip heartbeats continue. The usual triggers are &lt;code>nodetool disablebinary&lt;/code> left active after maintenance, or a firewall blocking TCP 9042.&lt;/p></description></item><item><title>Cassandra network partition and split brain: detection and reconciliation</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-network-partition-split-brain/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-network-partition-split-brain/</guid><description>&lt;h1 id="cassandra-network-partition-and-split-brain-detection-and-reconciliation">Cassandra network partition and split brain: detection and reconciliation&lt;/h1>
&lt;p>A partial network partition does not always stop the cluster. Each isolated subset often continues to serve traffic, accept writes, and report itself healthy while marking the other side as DOWN. By the time you notice contradictory gossip views or resurrected data, the two sides have diverged for hours. A healed partition is not self-resolving. If both sides accepted writes, last-write-wins semantics combined with even modest clock skew can silently overwrite valid data. Cross-DC deployments are most vulnerable because WAN latency already strains the phi accrual failure detector and inter-DC gossip paths have more single points of failure.&lt;/p></description></item><item><title>Cassandra node showing DN in nodetool status: gossip, phi, and recovery</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-node-down-nodetool-status/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-node-down-nodetool-status/</guid><description>&lt;h1 id="cassandra-node-showing-dn-in-nodetool-status-gossip-phi-and-recovery">Cassandra node showing DN in nodetool status: gossip, phi, and recovery&lt;/h1>
&lt;p>You run &lt;code>nodetool status&lt;/code> and one of your nodes shows &lt;code>DN&lt;/code> (Down/Normal). Before you restart anything, understand that this output is the local node&amp;rsquo;s opinion, not global truth. In Cassandra&amp;rsquo;s peer-to-peer architecture, every node runs its own phi accrual failure detector over gossip heartbeats. A &lt;code>DN&lt;/code> mark means this specific observer has not heard from the target for roughly 18 seconds at default settings. Another node in the same cluster may still show the same target as &lt;code>UN&lt;/code>.&lt;/p></description></item><item><title>Cassandra node stuck in joining (UJ): bootstrap diagnosis</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-bootstrap-stuck/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-bootstrap-stuck/</guid><description>&lt;h1 id="cassandra-node-stuck-in-joining-uj-bootstrap-diagnosis">Cassandra node stuck in joining (UJ): bootstrap diagnosis&lt;/h1>
&lt;p>You add a node to the ring, run &lt;code>nodetool status&lt;/code>, and see it stuck in &lt;code>UJ&lt;/code> (Up/Joining) for hours. The cluster sees it in gossip, but it never transitions to &lt;code>UN&lt;/code> (Up/Normal). Client drivers do not route traffic to it, so the expansion has not added usable capacity. Until the state changes, the node is a ghost member: visible to the ring but unable to serve reads or writes for its assigned token ranges.&lt;/p></description></item><item><title>Cassandra Not enough space for compaction: STCS space amplification and recovery</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-not-enough-space-for-compaction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-not-enough-space-for-compaction/</guid><description>&lt;h1 id="cassandra-not-enough-space-for-compaction-stcs-space-amplification-and-recovery">Cassandra Not enough space for compaction: STCS space amplification and recovery&lt;/h1>
&lt;p>&lt;code>Not enough space for compaction&lt;/code> in &lt;code>system.log&lt;/code> means STCS has hit a structural space-amplification limit. Disk usage may already be above 50%. Cassandra aborts the compaction, skips the tier, and leaves tombstones and old versions unmerged. SSTable count rises, read amplification increases, and free space stops being reclaimed. Left unchecked, this enters a compaction death spiral that ends in write rejection or disk exhaustion. Recovery requires immediate free space, targeted cleanup, and a headroom plan that accounts for transient STCS amplification.&lt;/p></description></item><item><title>Cassandra OperationTimedOutException: client-side timeouts vs server timeouts</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-operation-timed-out-exception/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-operation-timed-out-exception/</guid><description>&lt;h1 id="cassandra-operationtimedoutexception-client-side-timeouts-vs-server-timeouts">Cassandra OperationTimedOutException: client-side timeouts vs server timeouts&lt;/h1>
&lt;p>&lt;code>OperationTimedOutException&lt;/code> (driver 3.x) or &lt;code>DriverTimeoutException&lt;/code> (driver 4.x) means the driver gave up before the coordinator responded. This is distinct from a server-side &lt;code>ReadTimeout&lt;/code> or &lt;code>WriteTimeout&lt;/code>, where the coordinator explicitly errors because replicas were too slow. Confusing the two leads to tuning the wrong timeout, masking a server capacity problem or adding unnecessary client latency. Use server-side signals and driver behavior to tell them apart.&lt;/p></description></item><item><title>Cassandra pending compactions growing: the compaction backlog runbook</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-pending-compactions-growing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-pending-compactions-growing/</guid><description>&lt;h1 id="cassandra-pending-compactions-growing-the-compaction-backlog-runbook">Cassandra pending compactions growing: the compaction backlog runbook&lt;/h1>
&lt;p>Pending tasks climbing in &lt;code>nodetool compactionstats&lt;/code> is normal after a bulk load under STCS, but when the number trends upward for hours it signals that your node is producing SSTables faster than compaction can merge them.&lt;/p>
&lt;p>This is the leading indicator of the compaction death spiral. Left unchecked, the backlog drives read amplification up, saturates disk I/O, and eventually exhausts disk space as temporary compaction files accumulate. Writes often stay fast while reads degrade, masking the problem.&lt;/p></description></item><item><title>Cassandra quorum loss: when too many replicas are down to satisfy the CL</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-quorum-loss/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-quorum-loss/</guid><description>&lt;h1 id="cassandra-quorum-loss-when-too-many-replicas-are-down-to-satisfy-the-cl">Cassandra quorum loss: when too many replicas are down to satisfy the CL&lt;/h1>
&lt;p>Your application is throwing &lt;code>UnavailableException&lt;/code>. Writes and reads fail immediately, not timing out. The coordinator checked the token ring, counted live replicas, and rejected the request because it cannot satisfy the consistency level. No client retry will fix this server-side. The cluster is in quorum loss and will not recover until enough replicas are restored.&lt;/p>
&lt;p>When the count of down nodes for a token range exceeds &lt;code>floor(RF/2)&lt;/code>, every request at &lt;code>QUORUM&lt;/code> or stronger fails instantly. Surviving nodes may still serve &lt;code>CL=ONE&lt;/code> requests for ranges that have a live replica, but any operation requiring a majority is an outage for those partitions. This is a PAGE-level composite failure pattern that demands immediate node recovery followed by repair.&lt;/p></description></item><item><title>Cassandra read latency spikes: P99 vs P50 and proxyhistograms</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-read-latency-spikes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-read-latency-spikes/</guid><description>&lt;h1 id="cassandra-read-latency-spikes-p99-vs-p50-and-proxyhistograms">Cassandra read latency spikes: P99 vs P50 and proxyhistograms&lt;/h1>
&lt;p>Your application is timing out on Cassandra reads, but a quick glance at average latency looks acceptable. This is the percentile trap. In Cassandra, read latency follows a long-tail distribution: most requests are fast, but a fraction hit slow replicas, large partitions, or GC pauses and become orders of magnitude slower. The critical first step is knowing whether the spike lives at the coordinator or the replica, and whether it is systemic or isolated to the tail. &lt;code>nodetool proxyhistograms&lt;/code> and &lt;code>nodetool tablehistograms&lt;/code> answer exactly that.&lt;/p></description></item><item><title>Cassandra ReadTimeoutException: diagnosing coordinator read timeouts</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-read-timeout-exception/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-read-timeout-exception/</guid><description>&lt;h1 id="cassandra-readtimeoutexception-diagnosing-coordinator-read-timeouts">Cassandra ReadTimeoutException: diagnosing coordinator read timeouts&lt;/h1>
&lt;p>The driver throws &lt;code>ReadTimeoutException&lt;/code> when the coordinator fails to gather enough replica responses within &lt;code>read_request_timeout_in_ms&lt;/code> (default 5000 ms). This is a server-side timeout. It maps directly to the JMX metric &lt;code>ClientRequest,scope=Read,name=Timeouts&lt;/code>.&lt;/p>
&lt;p>This is not &lt;code>OperationTimedOutException&lt;/code>, which fires on the driver&amp;rsquo;s socket timeout. It is also not &lt;code>UnavailableException&lt;/code>, which means not enough replicas were alive to attempt the read. Here, replicas are alive but too slow. The read may have executed partially on some replicas, yet the coordinator could not assemble a response that met the consistency level within the window.&lt;/p></description></item><item><title>Cassandra repair failing or stuck: partial repairs and how to verify completion</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-repair-failing-or-stuck/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-repair-failing-or-stuck/</guid><description>&lt;h1 id="cassandra-repair-failing-or-stuck-partial-repairs-and-how-to-verify-completion">Cassandra repair failing or stuck: partial repairs and how to verify completion&lt;/h1>
&lt;p>&lt;code>nodetool repair&lt;/code> returning to the prompt, or hanging at 99 percent, are both dangerous because the worst outcome is silent: a partial repair. A partial repair anti-compacts some token ranges and skips others, leaving inconsistency while looking complete. Because incremental repair marks SSTables as repaired during anti-compaction, a session that fails mid-range leaves later ranges unrepaired while earlier ones are already marked done. No built-in alert fires when only forty percent of ranges were covered. If unrepaired ranges contain tombstones, deleted data resurrects once &lt;code>gc_grace_seconds&lt;/code> passes. This guide shows how to verify completion, diagnose stuck sessions, and recover without causing a cascading I/O incident.&lt;/p></description></item><item><title>Cassandra repair not running: the silent gap that resurrects deleted data</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-repair-not-running/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-repair-not-running/</guid><description>&lt;h1 id="cassandra-repair-not-running-the-silent-gap-that-resurrects-deleted-data">Cassandra repair not running: the silent gap that resurrects deleted data&lt;/h1>
&lt;p>Deleted rows reappear in application queries, or &lt;code>system_distributed.repair_history&lt;/code> shows a last success older than your &lt;code>gc_grace_seconds&lt;/code> window. In Cassandra, a repair that is not running, not completing, or not scheduled is an active data integrity risk.&lt;/p>
&lt;p>Cassandra uses tombstones to track deletions and TTL expirations. Those tombstones must survive on every replica until anti-entropy repair propagates the delete. Once &lt;code>gc_grace_seconds&lt;/code> passes, compaction drops tombstones. If repair has not finished for a table within that window, nodes that missed the original delete retain live data while the rest have discarded the tombstone. The result is zombie data resurrection.&lt;/p></description></item><item><title>Cassandra repair overload: when anti-entropy repair causes the outage it prevents</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-repair-overload/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-repair-overload/</guid><description>&lt;h1 id="cassandra-repair-overload-when-anti-entropy-repair-causes-the-outage-it-prevents">Cassandra repair overload: when anti-entropy repair causes the outage it prevents&lt;/h1>
&lt;p>A full &lt;code>nodetool repair&lt;/code> started during peak traffic can spike P99 read latency from milliseconds to hundreds of milliseconds, trigger write timeouts, and cause nodes to flap between UP and DOWN in gossip. The repair job meant to prevent inconsistency becomes the cause of the outage.&lt;/p>
&lt;p>Anti-entropy repair is a heavy distributed scan, not a background task. It reads all local data to build Merkle trees, exchanges hashes with replicas, and streams differing ranges. On a multi-terabyte node this means terabytes of sequential disk reads, heavy CPU hashing, and gigabits of network traffic. Without dedicated headroom, repair competes with the commitlog, memtable flushes, compaction, and client requests for disk bandwidth, CPU, and network. The result is thread pool backpressure, dropped messages, GC pressure from Merkle tree construction, and eventually gossip failure as the node becomes unresponsive.&lt;/p></description></item><item><title>Cassandra Scanned over N tombstones warning: finding the offending query</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-scanned-over-tombstones-warning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-scanned-over-tombstones-warning/</guid><description>&lt;h1 id="cassandra-scanned-over-n-tombstones-warning-finding-the-offending-query">Cassandra Scanned over N tombstones warning: finding the offending query&lt;/h1>
&lt;p>Your application latency may still look acceptable at the median, but &lt;code>system.log&lt;/code> is filling with warnings like &lt;code>Read 500 live rows and 12000 tombstone cells for query SELECT ...&lt;/code> or &lt;code>Scanned over 5000 tombstones&lt;/code>. These messages mean a single read is sifting through thousands of delete markers to return a small result set. Each tombstone consumes CPU, disk I/O, and heap memory during the merge phase. Left alone, the same query will eventually cross &lt;code>tombstone_failure_threshold&lt;/code> (default 100000) and be aborted by the coordinator. The log line gives you the query text, but the real operational work is deciding whether the root cause is a missing repair, a compaction backlog, or a data model mismatch, and then confirming which partition is the actual source of the dead data.&lt;/p></description></item><item><title>Cassandra schema disagreement: nodetool describecluster shows multiple versions</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-schema-disagreement/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-schema-disagreement/</guid><description>&lt;h1 id="cassandra-schema-disagreement-nodetool-describecluster-shows-multiple-versions">Cassandra schema disagreement: nodetool describecluster shows multiple versions&lt;/h1>
&lt;p>&lt;code>nodetool describecluster&lt;/code> should report exactly one schema version UUID cluster-wide. When the &lt;code>Schema versions&lt;/code> section lists more than one UUID, the cluster is in schema disagreement. DDL (&lt;code>CREATE&lt;/code>, &lt;code>ALTER&lt;/code>, &lt;code>DROP&lt;/code>) fails or hangs until every node converges. DML and reads against existing tables are unaffected.&lt;/p>
&lt;p>Transient disagreement lasting less than five minutes during or immediately after a DDL change is normal. Cassandra propagates schema mutations asynchronously via gossip. If multiple versions persist beyond five minutes, you have a stuck node, a partitioned peer, or a migration stage backlog.&lt;/p></description></item><item><title>Cassandra secondary index pitfalls: when 2i scatters across the ring</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-secondary-index-pitfalls/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-secondary-index-pitfalls/</guid><description>&lt;h1 id="cassandra-secondary-index-pitfalls-when-2i-scatters-across-the-ring">Cassandra secondary index pitfalls: when 2i scatters across the ring&lt;/h1>
&lt;p>A query on an indexed column behaves differently in Cassandra than in a relational database. Without a partition key to anchor the request, the coordinator cannot hash the value to a token range and choose the right replicas. It fans out to every node in the cluster, waits for each local index scan to complete, and collates the results. Adding nodes can make indexed queries slower because scatter is linear with cluster size.&lt;/p></description></item><item><title>Cassandra snapshots silently consuming disk: hard links and clearsnapshot</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-snapshots-consuming-disk/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-snapshots-consuming-disk/</guid><description>&lt;h1 id="cassandra-snapshots-silently-consuming-disk-hard-links-and-clearsnapshot">Cassandra snapshots silently consuming disk: hard links and clearsnapshot&lt;/h1>
&lt;p>&lt;code>df&lt;/code> shows usage climbing toward 90%, but &lt;code>nodetool info&lt;/code> Load does not explain the gap. If commitlog and hints are normal and compaction backlog is small, the missing space is likely a snapshot taken days or weeks ago. Cassandra snapshots use hard links, so they allocate no additional blocks at creation. After compaction deletes live SSTables, the snapshot links become the sole owners of old blocks and silently consume gigabytes.&lt;/p></description></item><item><title>Cassandra streaming failures: stalled bootstrap, decommission, and rebuild</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-streaming-failures/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-streaming-failures/</guid><description>&lt;h1 id="cassandra-streaming-failures-stalled-bootstrap-decommission-and-rebuild">Cassandra streaming failures: stalled bootstrap, decommission, and rebuild&lt;/h1>
&lt;p>Bootstrapping stuck in JOINING for six hours. Decommission streaming with zero byte progress after eight hours. Rebuild failed, leaving incomplete token ranges. These are streaming failures.&lt;/p>
&lt;p>Streaming moves SSTables between nodes during topology changes and repair. When a session fails, the topology is left incomplete. When it stalls with no progress for more than thirty minutes, the node stays in a transitional state and may not handle traffic correctly. Root causes are usually network timeouts, source node bottlenecks, or configuration mismatches. Unlike client request timeouts, streaming failures do not always surface as explicit errors; a session can hang silently while the control channel stays open.&lt;/p></description></item><item><title>Cassandra thread pool pending and blocked tasks: SEDA backpressure</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-thread-pool-pending-blocked/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-thread-pool-pending-blocked/</guid><description>&lt;h1 id="cassandra-thread-pool-pending-and-blocked-tasks-seda-backpressure">Cassandra thread pool pending and blocked tasks: SEDA backpressure&lt;/h1>
&lt;p>You run &lt;code>nodetool tpstats&lt;/code> and see non-zero values in the Pending or Blocked columns. On a healthy Cassandra node, request-stage pools like MUTATION and READ should show zero pending tasks in steady state. When pending climbs and stays above zero, the SEDA pipeline is backing up. If Blocked also rises, the node has moved from queuing to rejecting work.&lt;/p>
&lt;p>This is not a transient spike you can ignore. Sustained pending tasks on the MUTATION or READ stages add latency to every client request. Blocked tasks mean the queue is full and the node is actively shedding load. In the GOSSIP stage, even a small pending backlog is an emergency: it means gossip is falling behind, which leads to false DOWN marking across the cluster.&lt;/p></description></item><item><title>Cassandra tombstone storm: delete-heavy tables and read latency collapse</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-tombstone-storm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-tombstone-storm/</guid><description>&lt;h1 id="cassandra-tombstone-storm-delete-heavy-tables-and-read-latency-collapse">Cassandra tombstone storm: delete-heavy tables and read latency collapse&lt;/h1>
&lt;p>DELETEs and TTL expirations write tombstones. Read latency bifurcates: P50 stays flat while P99 spikes. Logs show queries scanning thousands of tombstones; eventually clients see queries abort after crossing &lt;code>tombstone_failure_threshold&lt;/code>. Disk space does not shrink despite deletions. This is a tombstone storm.&lt;/p>
&lt;p>Cassandra does not remove deleted data immediately. A DELETE inserts a tombstone marker that persists until compaction purges it after &lt;code>gc_grace_seconds&lt;/code> elapses and all replicas have been repaired. When tombstones scatter across many SSTables, every read must scan and merge them, generating temporary heap objects and escalating GC pressure. Only a subset of partitions may be affected, which is why P50 stays flat while tail latency explodes.&lt;/p></description></item><item><title>Cassandra TombstoneOverwhelmingException: reads aborted by tombstone_failure_threshold</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-tombstone-overwhelming-exception/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-tombstone-overwhelming-exception/</guid><description>&lt;h1 id="cassandra-tombstoneoverwhelmingexception-reads-aborted-by-tombstone_failure_threshold">Cassandra TombstoneOverwhelmingException: reads aborted by tombstone_failure_threshold&lt;/h1>
&lt;p>TombstoneOverwhelmingException is a hard stop. Cassandra aborts the read after scanning more tombstones than &lt;code>tombstone_failure_threshold&lt;/code> allows. The default is 100000 tombstones per query. When this exception hits a production table, client reads fail outright.&lt;/p>
&lt;p>Without the threshold, a tombstone-heavy read pins cores, saturates disk I/O, and triggers GC pauses that cascade into gossip flapping or OOM. The exception is a circuit breaker. It is also a signal that tombstones are accumulating faster than compaction can purge them, or that the data model is generating them faster than the storage engine can remove them.&lt;/p></description></item><item><title>Cassandra Too many open files: file descriptor exhaustion</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-too-many-open-files/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-too-many-open-files/</guid><description>&lt;h1 id="cassandra-too-many-open-files-file-descriptor-exhaustion">Cassandra Too many open files: file descriptor exhaustion&lt;/h1>
&lt;p>Your application starts logging connection timeouts or &lt;code>Unable to connect&lt;/code> errors, yet &lt;code>nodetool status&lt;/code> still marks the node as UP. Inside the Cassandra system log, you see &lt;code>java.io.IOException: Too many open files&lt;/code> or compaction tasks failing with &lt;code>Cannot open enough files&lt;/code>. This is file descriptor exhaustion. The node operates normally until it hits the process ulimit, then it cannot open new SSTables, accept client sockets, or maintain internode connections. The result is a node that looks alive in gossip but is functionally unable to serve reads, writes, or background compaction.&lt;/p></description></item><item><title>Cassandra too many SSTables per table: read amplification and how to fix it</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-too-many-sstables/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-too-many-sstables/</guid><description>&lt;h1 id="cassandra-too-many-sstables-per-table-read-amplification-and-how-to-fix-it">Cassandra too many SSTables per table: read amplification and how to fix it&lt;/h1>
&lt;p>Your Cassandra read P99 latency is climbing. Queries that used to take milliseconds now time out. The application reports intermittent &lt;code>ReadTimeoutException&lt;/code>. You check &lt;code>nodetool tablestats&lt;/code> and see one table sitting at 200 SSTables. For LCS, that is a catastrophe. For STCS, anything sustained above 50 means compaction has fallen behind.&lt;/p>
&lt;p>Each extra SSTable adds a bloom filter check and a potential disk seek to every read. The read path must merge fragments from memtables plus every SSTable that might contain the partition. When SSTable counts balloon, the node spends more time checking filters and seeking than returning data. This is read amplification.&lt;/p></description></item><item><title>Cassandra TTL tombstone accumulation: time-series tables and TWCS</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-ttl-tombstone-accumulation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-ttl-tombstone-accumulation/</guid><description>&lt;h1 id="cassandra-ttl-tombstone-accumulation-time-series-tables-and-twcs">Cassandra TTL tombstone accumulation: time-series tables and TWCS&lt;/h1>
&lt;p>You set a TTL on every row expecting old data to vanish. Instead, disk usage climbs, read latency spikes, and your logs fill with tombstone warnings.&lt;/p>
&lt;p>An expired TTL does not delete data immediately. Cassandra writes a tombstone that survives until compaction runs and the tombstone exceeds gc_grace_seconds (default 864000 seconds, or 10 days). In time-series workloads ingesting millions of TTL&amp;rsquo;d rows per hour, the wrong compaction strategy turns this bookkeeping into a production incident.&lt;/p></description></item><item><title>Cassandra UnavailableException: not enough replicas for the consistency level</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-unavailable-exception/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-unavailable-exception/</guid><description>&lt;h1 id="cassandra-unavailableexception-not-enough-replicas-for-the-consistency-level">Cassandra UnavailableException: not enough replicas for the consistency level&lt;/h1>
&lt;p>Cassandra threw &lt;code>UnavailableException&lt;/code>. The coordinator rejected the request immediately without contacting replicas. No mutation occurred, and retrying at the same consistency level against the same coordinator fails until enough replicas are &lt;code>UN&lt;/code> in the coordinator&amp;rsquo;s gossip view. This is a topology problem, not a performance problem.&lt;/p>
&lt;p>This exception is qualitatively different from &lt;code>TimeoutException&lt;/code>. A timeout means enough replicas were alive but responded too slowly. An unavailable means the coordinator never sent the request because the topology could not satisfy the consistency level.&lt;/p></description></item><item><title>Cassandra WriteTimeoutException: coordinator write timeouts and writeType</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-write-timeout-exception/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-write-timeout-exception/</guid><description>&lt;h1 id="cassandra-writetimeoutexception-coordinator-write-timeouts-and-writetype">Cassandra WriteTimeoutException: coordinator write timeouts and writeType&lt;/h1>
&lt;p>A &lt;code>WriteTimeoutException&lt;/code> means the coordinator did not receive enough replica acknowledgments before &lt;code>write_request_timeout_in_ms&lt;/code> expired. It does not mean the write failed; one or more replicas may have already persisted the mutation, so the outcome is ambiguous. The &lt;code>writeType&lt;/code> field determines whether a client-side retry is safe.&lt;/p>
&lt;p>Distinguish between a slow replica and an unavailable one. Understand the idempotency contract for the write type, and correlate coordinator timeouts with replica-side saturation. The default &lt;code>write_request_timeout_in_ms&lt;/code> is 2000 ms. If replicas cannot append to the commitlog and update the memtable within that window, the coordinator throws this exception.&lt;/p></description></item><item><title>Cassandra zombie data resurrection: gc_grace_seconds and unrepaired tombstones</title><link>https://www.netdata.cloud/guides/cassandra/cassandra-data-resurrection-gc-grace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/cassandra-data-resurrection-gc-grace/</guid><description>&lt;h1 id="cassandra-zombie-data-resurrection-gc_grace_seconds-and-unrepaired-tombstones">Cassandra zombie data resurrection: gc_grace_seconds and unrepaired tombstones&lt;/h1>
&lt;p>A query returns rows that were deleted weeks ago. Application logs show no errors. All nodes report UP in &lt;code>nodetool status&lt;/code>. Compaction is running and disk usage looks normal. The data is back because a tombstone was compacted away before anti-entropy repair verified that every replica saw the delete. Once the tombstone is gone, live data on unrepaired replicas is treated as authoritative. The next repair or read repair streams it back to the tombstone-less nodes.&lt;/p></description></item><item><title>How Cassandra actually works in production: a mental model for operators</title><link>https://www.netdata.cloud/guides/cassandra/how-cassandra-works-in-production/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.netdata.cloud/guides/cassandra/how-cassandra-works-in-production/</guid><description>&lt;h1 id="how-cassandra-actually-works-in-production-a-mental-model-for-operators">How Cassandra actually works in production: a mental model for operators&lt;/h1>
&lt;p>If you operate Cassandra in production, you are managing a distributed, partitioned, replicated log-structured merge tree where every node is a peer. There is no master to restart, no central query planner to tune, and no automatic load balancing that will save you from a hot partition. Every write is a sequential append to a commitlog and an in-memory update on multiple replicas. Every read is a merge of memtables and immutable SSTables, filtered by probabilistic bloom filters and reconciled by timestamp.&lt;/p></description></item></channel></rss>