I'm running Cassandra 3.11 on ZFS on Linux. I use the ZFS compression and have disabled the Cassandra SSTable compression.

I can't comment on the possible pros you've mentioned, because I didn't do enough tests on them. I know the compression ratio is marginally better with the same compression chunk size, but that's probably because the files containing the metadata are also compressed.

However, it's not trouble free. As Elliott said, this is a less tested code path. One problem I have ran into is the disk space check. Cassandra checks for available disk space before starting a compaction, and isn't aware of the ZFS compression. As the result of that, Cassandra often thinks there isn't enough free disk space left and refuse to compact the large SSTables.

My current workaround for the above issue is expensive. A large proportion of disk space is reserved (wasted) to avoid Cassandra running into this issue.

If you don't keep enough reserved disk space, you will eventually find one (or more) of your Cassandra nodes ends up in constant compaction loop, like this:

   WARN  [CompactionExecutor:7] 2021-02-04 19:50:33,636
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 371463.6MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16048-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16049-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8463-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 19:50:33,636
   CompactionTask.java:356 - Not enough space for compaction,
   371463.6MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 19:50:33,636
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 254743.16MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16048-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8463-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 19:50:33,636
   CompactionTask.java:356 - Not enough space for compaction,
   254743.16MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 19:50:33,637
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 158297.66MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16048-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 19:50:33,637
   CompactionTask.java:356 - Not enough space for compaction,
   158297.66MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 20:09:05,607
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 371463.6MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16049-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16050-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8463-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 20:09:05,608
   CompactionTask.java:356 - Not enough space for compaction,
   371463.6MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 20:09:05,608
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 254743.16MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16050-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8463-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 20:09:05,608
   CompactionTask.java:356 - Not enough space for compaction,
   254743.16MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 20:09:05,608
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 158297.66MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16050-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 20:09:05,608
   CompactionTask.java:356 - Not enough space for compaction,
   158297.66MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 20:27:28,482
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 371463.6MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16049-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16052-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8463-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 20:27:28,482
   CompactionTask.java:356 - Not enough space for compaction,
   371463.6MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 20:27:28,482
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 254743.16MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16052-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8463-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 20:27:28,482
   CompactionTask.java:356 - Not enough space for compaction,
   254743.16MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 20:27:28,482
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 158297.66MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16052-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 20:27:28,482
   CompactionTask.java:356 - Not enough space for compaction,
   158297.66MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 20:45:56,505
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 371463.6MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16049-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16053-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8463-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 20:45:56,505
   CompactionTask.java:356 - Not enough space for compaction,
   371463.6MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 20:45:56,505
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 254743.16MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16053-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8463-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 20:45:56,505
   CompactionTask.java:356 - Not enough space for compaction,
   254743.16MB estimated.  Reducing scope.
   WARN  [CompactionExecutor:7] 2021-02-04 20:45:56,505
   CompactionTask.java:94 - insufficient space to compact all requested
   files. 158297.66MB required,
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-16053-big-Data.db'),
   BigTableReader(path='/var/lib/cassandra/data/ks/cf/md-8462-big-Data.db')
   WARN  [CompactionExecutor:7] 2021-02-04 20:45:56,505
   CompactionTask.java:356 - Not enough space for compaction,
   158297.66MB estimated.  Reducing scope.

and keep going on infinitely, until someone notices it (hopefully because of an alert, not an outage) and gets it fixed.


On 25/01/2021 15:06, Lapo Luchini wrote:
Hi,
    I'm using a fairly standard install of Cassandra 3.11 on FreeBSD 12, by default filesystem is compressed using LZ4 and Cassandra tables are compressed using LZ4 as well.

I was wondering if anybody had data about this already (or else, I will probably do some tests myself, eventually): would it be a nice idea to disable Cassandra compression and rely only on ZFS one?

In principle I can see some pros:
1. it's done in kernel, might be slightly faster
2. can (probably) compress more data, as I see a 1.02 compression factor
   on filesystem even if I have compressed data in tables already
3. in upcoming ZFS version I will be able to use Zstd compression
   (probably before Cassandra 4.0 is gold)
4. (can inspect  compression directly at filesystem level)

But on the other hand application-level compression could have its advantages.

cheers,

Reply via email to