blob: b0386394adc638c07732f9faff7c516930bdf428 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Apache Cassandra | Apache Cassandra Documentation</title>
<link rel="stylesheet" href="../../assets/css/site.css">
<meta name="description" content="Apache Cassandra 4.1 released">
<link rel="schema.dcterms" href="https://purl.org/dc/terms/">
<meta name="dcterms.subject" content="_">
<meta name="dcterms.identifier" content="master">
<meta name="generator" content="Antora 2.3.4">
<link rel="icon" href="../../assets/img/favicon.ico" type="image/x-icon">
<script>
const script = document.createElement("script");
const domain = window.location.hostname;
script.type = "text/javascript";
script.src = "https://plausible.cassandra.apache.org/js/plausible.js";
script.setAttribute("data-domain",domain);
script.setAttribute("defer",'true');
script.setAttribute("async",'true');
document.getElementsByTagName("head")[0].appendChild(script);
</script> </head>
<body class="single-post">
<div class="container mx-auto relative">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<meta property="og:type" content="website" />
<meta property="og:description" content="" />
<meta property="og:url" content="/" />
<meta property="og:site_name" content="Apache Cassandra" />
<header id="top-nav">
<div class="inner relative">
<div class="header-social-icons text-right">
<a href="https://twitter.com/cassandra?lang=en" target="_blank" styles="margin-left: 20px;"><img src="../../assets/img/twitter-icon-circle-white.svg" alt="twitter icon" width="24"></a>
<a href="https://www.linkedin.com/company/apache-cassandra/" target="_blank" styles="margin-left: 20px;"><img src="../../assets/img/LI-In-Bug.png" alt="linked-in icon" width="24"></a>
<a href="https://www.youtube.com/c/PlanetCassandra" target="_blank" styles="margin-left: 20px;"><img src="../../assets/img/youtube-icon.png" alt="youtube icon" width="24"></a>
</div>
<div class="cf">
<div class="logo left"><a href="/"><img src="../../assets/img/logo-white-r.png" alt="cassandra logo"></a></div>
<div class="mobile-nav-icon right">
<img class="toggle-icon" src="../../assets/img/hamburger-nav.svg">
</div>
<ul class="main-nav nav-links right flex flex-vert-center flex-space-between">
<li>
<a class="nav-link hide-mobile">Get Started</a>
<ul class="sub-menu bg-white">
<li class="pa-micro">
<a href="/_/cassandra-basics.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-basics.png" alt="cassandra basics icon">
</div>
<div class="sub-nav-text teal py-small">
Cassandra Basics
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/quickstart.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-rocket.png" alt="cassandra basics icon">
</div>
<div class="sub-nav-text teal py-small">
Quickstart
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/ecosystem.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-ecosystem.png" alt="cassandra basics icon">
</div>
<div class="sub-nav-text teal py-small">
Ecosystem
</div>
</a>
</li>
</ul>
</li>
<li><a class="nav-link" href="/doc/latest/">Documentation</a></li>
<li>
<a class="nav-link" href="/_/community.html">Community</a>
<ul class="sub-menu bg-white">
<li class="pa-micro">
<a href="/_/community.html#code-of-conduct">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-welcome.png" alt="welcome icon">
</div>
<div class="sub-nav-text teal py-small">
Welcome
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/community.html#discussions">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-discussions.png" alt="discussions icon">
</div>
<div class="sub-nav-text teal py-small">
Discussions
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/community.html#project-governance">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-governance.png" alt="Governance icon">
</div>
<div class="sub-nav-text teal py-small">
Governance
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/community.html#how-to-contribute">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-contribute.png" alt="Contribute icon">
</div>
<div class="sub-nav-text teal py-small">
Contribute
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/community.html#meet-the-community">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-community.png" alt="Meet the Community icon">
</div>
<div class="sub-nav-text teal py-small">
Meet the Community
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/cassandra-catalyst-program.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-catalyst.png" alt="Catalyst icon">
</div>
<div class="sub-nav-text teal py-small">
Catalyst Program
</div>
</a>
</li>
<li class="pa-micro hide-mobile">
<a href="/_/events.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-events.png" alt="Events icon">
</div>
<div class="sub-nav-text teal py-small">
Events
</div>
</a>
</li>
</ul>
</li>
<li>
<a class="nav-link hide-mobile">Learn</a>
<ul class="sub-menu bg-white">
<li class="pa-micro">
<a href="/_/Apache-Cassandra-5.0-Moving-Toward-an-AI-Driven-Future.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-basics.png" alt="Basics icon">
</div>
<div class="sub-nav-text teal py-small">
Cassandra 5.0
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/case-studies.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-case-study.png" alt="Case Studies icon">
</div>
<div class="sub-nav-text teal py-small">
Case Studies
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/resources.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-resources.png" alt="Resources icon">
</div>
<div class="sub-nav-text teal py-small">
Resources
</div>
</a>
</li>
<li class="pa-micro">
<a href="/_/blog.html">
<div class="sub-nav-icon">
<img src="../../assets/img/sub-menu-blog.png" alt="Blog icon">
</div>
<div class="sub-nav-text teal py-small">
Blog
</div>
</a>
</li>
</ul>
</li>
<li><a class="nav-link btn btn--filled" href="/_/download.html">Download Now</a></li>
</ul>
</div>
</div>
</header>
<div class="hero hero--home grad">
<div class="eye"></div>
<div id="home-content" class="text-center flex flex-center flex-column relative z2 ma-xlarge">
<h1>Apache Cassandra 4.1: Rock Solid, Cloud-Native, Strongly Consistent and Highly Scalable</h1>
<h3>December 13, 2022 | Cassandra Community</h3>
</div>
</div>
<div id="blog-post" class="flex-center py-large arrow">
<div class="blog-breadcrumb mb-medium">
<div class="inner inner--narrow">
<a href="/_/blog.html">« Back to the Apache Cassandra Blog</a>
</div>
</div>
<div class="post-content">
<div class="inner inner--narrow">
<div id="preamble">
<div class="sectionbody">
<div class="imageblock">
<div class="content">
<img src="../_images/blog/cassandra-4.1-is-here.png" alt="Christmas present">
</div>
<div class="title"><em>Image credit: <a href="https://www.pexels.com/@roman-odintsov/" target="_blank" rel="noopener">Roman Odintsov on Pexels</a></em></div>
</div>
<div class="paragraph">
<p>Today, we are excited to announce General Availability (GA) of Apache Cassandra 4.1, the project&#8217;s major release for 2022 with lots of new features. This release paves the way to a more cloud-native future for the project by externalizing important key functions, extending Apache Cassandra, and enabling an expanded ecosystem without compromising the stable core code.</p>
</div>
<div class="paragraph">
<p>Cassandra 4.1 also marks the delivery of our commitment to a yearly release.</p>
</div>
<div class="paragraph">
<p>The release of 4.0 last year laid the foundations for growth. It established an important baseline for any future version of Cassandra while providing the needed infrastructure to ensure future releases maintain high quality and correctness. The 4.0 release was also the most stable GA for the project, and arguably any distributed open source database system, and opened the floodgates to a host of new community-developed features that are either included in 4.1 or in development.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="new-features-in-4-1"><a class="anchor" href="#new-features-in-4-1"></a>New Features in 4.1</h2>
<div class="sectionbody">
<div class="paragraph">
<p>A major theme for Apache Cassandra 4.1 is pluggability. With each new framework, we are establishing a straightforward interface to Cassandra internals and an understood contract when using outside code. This theme sits alongside a strong focus on features that provide better control, improved ease of use, and flexibility that benefits developers and operators significantly.</p>
</div>
<div class="sect2">
<h3 id="for-developers-and-users"><a class="anchor" href="#for-developers-and-users"></a>For Developers and Users</h3>
<div class="paragraph">
<p>The community is continuing to improve the performance of the database and make Cassandra both easier to use for end users and easier to onboard key development requests from the community.</p>
</div>
<div class="sect3">
<h4 id="paxos-improvements"><a class="anchor" href="#paxos-improvements"></a>Paxos Improvements</h4>
<div class="paragraph">
<p>Cassandra uses a Paxos consensus protocol implementation that creates strong consistency. This is achieved by quorum reads to ensure a single value is selected and executed from all the proposed updates at any given time. Where an action needs to persist based on the current state of the system then Lightweight Transactions (LWTs) are used. Some examples of use cases are selling seats to a concert and where an <code>INSERT</code> or <code>UPDATE</code> operation must be unique, such as for a customer ID. Historically, Lightweight Transactions (LWTs) have suffered from poor performance, particularly in a WAN setting and under contention. As LWTs used a read-before-write approach, LWTs had more round trips which hurt performance.</p>
</div>
<div class="paragraph">
<p>Recognizing these shortcomings, <a href="https://cwiki.apache.org/confluence/x/54cjCw" target="_blank" rel="noopener">Paxos was optimized</a>, improving LWT performance by 50%, improving latency, and halving the number of required round-trip to achieve consensus. Linearizability is now guaranteed across range movements in-line with what you would expect from a database with strong consistency.</p>
</div>
</div>
<div class="sect3">
<h4 id="improved-configuration"><a class="anchor" href="#improved-configuration"></a>Improved Configuration</h4>
<div class="paragraph">
<p>Apache Cassandra is a powerful but complex distributed database system with many available configuration parameters. It can be confusing especially for newcomers and our goal with every release is to provide greater clarity and flexibility for developers and users which is why syntax in <code>cassandra.yaml</code>, the main configuration file, has had a major overhaul in 4.1. Among many improvements, our new configuration framework introduces unit types and standardizes names with a more intuitive language structure while retaining backward compatibility.</p>
</div>
<div class="paragraph">
<p>Read the blog <a href="Apache-Cassandra-4.1-Configuration-Standardization.html" class="page">Configuration Standardization in 4.1</a> to learn more.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="for-cql-developers"><a class="anchor" href="#for-cql-developers"></a>For CQL Developers</h3>
<div class="paragraph">
<p>Based on the feedback from the community we have implemented new Cassandra Query Language features:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Users can now group by time range</p>
</li>
<li>
<p>Users can now use <code>CONTAINS</code> and <code>CONTAINS KEY</code> conditions in conditional update</p>
</li>
<li>
<p>Users can now use <code>IF EXISTS</code> and <code>IF NOT EXISTS</code> in <code>ALTER</code> statements</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Those seeking more query options will appreciate <code>GROUP BY</code> as it can be used to output row sets that are the same into a single grouped row, for instance, for marathon time results over a season. This can be used along with <code>FLOOR()</code> and <code>COUNT()</code> to further aggregate output. For instance, <code>FLOOR()</code> could be used to output results for runners over a series of marathons that finished within a specified hour and <code>COUNT()</code> could be used to output a column that indicates the number of runners that finished in each hour.</p>
</div>
</div>
<div class="sect2">
<h3 id="security-enhancements"><a class="anchor" href="#security-enhancements"></a>Security Enhancements</h3>
<div class="paragraph">
<p>End users of Apache Cassandra are constantly under pressure to provide better security to their users and safeguard the privacy of data. Apache Cassandra, as one of the most popular NoSQL databases in the world, is constantly testing, researching, and developing ways to make its mission-critical open source product more secure. This release offers several features around making authentication more accessible and data-in-transit more secure.</p>
</div>
<div class="sect3">
<h4 id="credentials-file-support-for-cqlsh"><a class="anchor" href="#credentials-file-support-for-cqlsh"></a>Credentials File Support for CQLSH</h4>
<div class="paragraph">
<p>In Apache Cassandra 4.1, we have added support for authentication plugins. While Cassandra authentication is already highly extensible, and users can create plugins to add authentication methods, the CQL shell (CQLSH) did not tap into this mechanism. Consequently, developers and users were forced to develop their own tool to interact with a Cassandra DB, but now you can use any Python authentication mechanism in CQLSH.</p>
</div>
</div>
<div class="sect3">
<h4 id="pem-based-key-material-supported"><a class="anchor" href="#pem-based-key-material-supported"></a>PEM-based Key Material Supported</h4>
<div class="paragraph">
<p>Making SSLContext creation pluggable and extensible, as mentioned above, overcame previous challenges with a TLS configuration as it allows for specifying custom ways to build SSLContext and the new framework has swiftly led to support for PEM-based security credentials.</p>
</div>
<div class="paragraph">
<p>Read the blog <a href="Tightening-Security-for-Apache-Cassandra-Part-3.html" class="page">Tightening Security</a> to learn more.</p>
</div>
</div>
<div class="sect3">
<h4 id="pre-hashed-passwords-in-cql-supported"><a class="anchor" href="#pre-hashed-passwords-in-cql-supported"></a>Pre-hashed passwords in CQL Supported</h4>
<div class="paragraph">
<p>As well as sanitizing any logging for sensitive data before the development of v4.1, a new tool (<code>tools/bin/hash_password</code>) now provides a jBCrypt hash for use in Data Definition Language (DDL) commands used for creating, manipulating and modifying objects including creating or altering roles.</p>
</div>
<div class="paragraph">
<p>Read the blog <a href="Apache-Cassandra-4.1-Features-Client-side-Password-Hashing.html" class="page">Client-side Password Hashing</a> to learn more.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="for-the-cassandra-ecosystem"><a class="anchor" href="#for-the-cassandra-ecosystem"></a>For the Cassandra Ecosystem</h3>
<div class="paragraph">
<p>Regarding pluggability, 4.1 provides various structured ways to add powerful features that enhance the Apache Cassandra ecosystem. Prominent examples of this are:</p>
</div>
<div class="sect3">
<h4 id="pluggable-memtable-implementation"><a class="anchor" href="#pluggable-memtable-implementation"></a>Pluggable Memtable Implementation</h4>
<div class="paragraph">
<p>Memtables are in-memory structures where Cassandra buffers writes. This feature enables developers to implement new memtable solutions and allows users to select a memtable implementation and configuration for each table in their database.</p>
</div>
<div class="paragraph">
<p>Read the blog <a href="Apache-Cassandra-4.1-Features-Pluggable-Memtable-Implementations.html" class="page">Pluggable Memtable Implementation</a> to learn more.</p>
</div>
</div>
<div class="sect3">
<h4 id="extensible-and-pluggable-ssl-context-creation"><a class="anchor" href="#extensible-and-pluggable-ssl-context-creation"></a>Extensible and Pluggable SSL Context Creation</h4>
<div class="paragraph">
<p>Another feature that is now pluggable and extensible is <a href="https://cwiki.apache.org/confluence/x/9YbOCg" target="_blank" rel="noopener">SSLContext creation</a>. This feature will appeal to enterprises operating in industries with stricter and more contextual security requirements. Enterprises need the flexibility to load the SSL protocol artifacts from custom resources and this feature makes that possible.</p>
</div>
</div>
<div class="sect3">
<h4 id="pluggable-external-schema-manager-services"><a class="anchor" href="#pluggable-external-schema-manager-services"></a>Pluggable External Schema Manager Services</h4>
<div class="paragraph">
<p>The schema management has been completely refactored (<a href="https://issues.apache.org/jira/browse/CASSANDRA-17044" target="_blank" rel="noopener">CASSANDRA-17044</a>) so that schema storage is now pluggable. In practical terms, this means that schema can be stored somewhere other than in the local system tables, for example etcd. Again, this is a feature that enables the extension and customization of Cassandra for different use cases.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="for-operators"><a class="anchor" href="#for-operators"></a>For Operators</h3>
<div class="paragraph">
<p>This release sees new tools to assist operators in managing risk, controlling user access, and maintaining performance. A good example of this type of feature is the new Guardrails Framework.</p>
</div>
<div class="sect3">
<h4 id="guardrails-framework"><a class="anchor" href="#guardrails-framework"></a>Guardrails Framework</h4>
<div class="paragraph">
<p>The Guardrails Framework enforces soft and hard limits system-wide, disables certain features, and disallows specific values. The framework exists to help operators avoid particular configuration and usage pitfalls that can degrade the performance and availability of an Apache Cassandra cluster when taken to scale. As well as activating available guardrails, developers can use the framework to create their own guardrails.</p>
</div>
<div class="paragraph">
<p>Read the blog <a href="Apache-Cassandra-4.1-Features-Guardrails-Framework.html" class="page">Guardrails Framework</a> to learn more.</p>
</div>
</div>
<div class="sect3">
<h4 id="partition-denylisting"><a class="anchor" href="#partition-denylisting"></a>Partition DenyListing</h4>
<div class="paragraph">
<p>On a similar theme, the Partition Denylisting tool gives operators new controls to reduce the impact of overloaded partitions. While the community continues to strengthen and widen the tracks on which data models run (for example, previously we added support for large partitions on SSTable 3.0 format), DenyListing is a quick solution to a recognized situation for operators. The tool will protect performance on other partitions that would be adversely affected by a large, problematic partition.</p>
</div>
<div class="paragraph">
<p>Read the blog <a href="Apache-Cassandra-4.1-Denylisting-Partitions.html" class="page">Denylisting Partitions</a> to learn more.</p>
</div>
</div>
<div class="sect3">
<h4 id="sstable-identifiers"><a class="anchor" href="#sstable-identifiers"></a>SSTable Identifiers</h4>
<div class="paragraph">
<p>As well as introducing the ability to monitor top partitions by size/tombstones and improving <code>nodetool</code>, backup and restore, we&#8217;ve introduced new SSTable identifiers which is a naming pattern for files and data directories that are located and organized in SSTables. As each SSTable on any node will have a globally unique identifier, we expect this will eliminate some problems with manual backups.</p>
</div>
<div class="paragraph">
<p>Read the blog <a href="Apache-Cassandra-4.1-New-SSTable-Identifiers.html" class="page">New SSTable Identifiers in 4.1</a> to learn more.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="validating-with-advanced-simulations"><a class="anchor" href="#validating-with-advanced-simulations"></a>Validating with Advanced Simulations</h3>
<div class="paragraph">
<p>The community validated the new, improved Paxos implementation with its new <a href="https://cwiki.apache.org/confluence/x/LY7OCg" target="_blank" rel="noopener">Cluster and Code Simulator</a> which is capable of simulating hundreds of thousands of clusters and millions of queries to assert linearizability. Cassandra&#8217;s new Simulator can completely control the database and fully control JVM thread scheduling, lock acquisition, and time in the new burn suite. These simulations can be launched in the cloud to validate Paxos at a massive scale or on a laptop, with total deterministic reproducibility. This feature could be used to test other systems or even to test Cassandra with a user application against it, but it is currently a project tool for developers.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="the-future"><a class="anchor" href="#the-future"></a>The Future</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Many of 4.1&#8217;s features establish frameworks that the community is now building on and creating exciting new features.</p>
</div>
<div class="paragraph">
<p>The Code and Cluster Simulator is at the heart of helping the project develop a new consensus protocol called <a href="https://cwiki.apache.org/confluence/download/attachments/188744725/Accord.pdf" target="_blank" rel="noopener">Accord</a> which will reduce linearizable reads/writes to a single round trip. Accord will be a ground-breaking development for the database industry at large enabling multi-partition <a href="https://cwiki.apache.org/confluence/x/FQRACw" target="_blank" rel="noopener">general-purpose transactions</a> in Cassandra.</p>
</div>
<div class="paragraph">
<p>Elsewhere, the memtable implementation ushers in Trie-based memtable support (<a href="https://issues.apache.org/jira/browse/CASSANDRA-17240" target="_blank" rel="noopener">CASSANDRA-17240</a>) which will offer significant improvements to both performance and garbage collection overheads.</p>
</div>
<div class="paragraph">
<p>Collectively, this level of community momentum is pushing Apache Cassandra ever forward toward a more cloud-native future.</p>
</div>
<div class="paragraph">
<p>We encourage you to join us on this journey by subscribing to the mailing lists, introducing yourself on our ASF Slack, and following us on social media -— all the details are available in the <a href="../community.html" class="page">Community</a> section with links at the top of the page.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="grad grad--two flex-center pb-xlarge">
<div class="inner text-center z2 relative">
<h2 class="white py-small">Get started with Cassandra, fast.</h2>
<a id="footer-cta" href="/_/quickstart.html" class="btn btn--filled ma-medium">Quickstart Guide</a>
</div>
<div class="inner flex flex-distribute-items mt-xlarge z2 relative">
<div class="col-2">
<div id="footer-logo" class="logo logo--footer mb-medium"><img src="../../assets/img/logo-white-r.png" alt="Cassandra Logo"></div>
<p>Apache Cassandra<img src="../../assets/img/registered.svg" alt="®" style="width:18px;"> powers mission-critical deployments with improved performance and unparalleled levels of scale in the cloud.</p>
<div class="footer-social-icons">
<a href="https://twitter.com/cassandra?lang=en" target="_blank"><img src="../../assets/img/twitter-icon-circle-white.svg" alt="twitter icon" width="24"></a>
<a href="https://www.linkedin.com/company/apache-cassandra/" target="_blank"><img src="../../assets/img/LI-In-Bug.png" alt="linked-in icon" width="24"></a>
<a href="https://www.youtube.com/c/PlanetCassandra" target="_blank"><img src="../../assets/img/youtube-icon.png" alt="youtube icon" width="24"></a>
</div>
</div>
<div class="col-2 flex flex-center">
<ul class="columns-2">
<li class="mb-small"><a href="/">Home</a></li>
<li class="mb-small"><a href="/_/cassandra-basics.html">Cassandra Basics</a></li>
<li class="mb-small"><a href="/_/quickstart.html">Quickstart</a></li>
<li class="mb-small"><a href="/_/ecosystem.html">Ecosystem</a></li>
<li class="mb-small"><a href="/doc/latest/">Documentation</a></li>
<li class="mb-small"><a href="/_/community.html">Community</a></li>
<li class="mb-small"><a href="/_/case-studies.html">Case Studies</a></li>
<li class="mb-small"><a href="/_/resources.html">Resources</a></li>
<li class="mb-small"><a href="/_/blog.html">Blog</a></li>
</ul>
</div>
</div>
</footer>
<div class="lower-footer bg-white pa-medium">
<div class="flex flex-row flex-vert-center">
<div class="pr-medium"><img src="../../assets/img//feather-small.png" alt="ASF" width="20"></div>
<div class="pr-medium"><a href="http://www.apache.org/" target="_blank">Foundation</a></div>
<div class="pr-medium"><a href="https://www.apache.org/events/current-event.html" target="_blank">Events</a></div>
<div class="pr-medium"><a href="https://www.apache.org/licenses/" target="_blank">License</a></div>
<div class="pr-medium"><a href="https://www.apache.org/foundation/thanks" target="_blank">Thanks</a></div>
<div class="pr-medium"><a href="https://www.apache.org/security" target="_blank">Security</a></div>
<div class="pr-medium"><a href="https://privacy.apache.org/policies/privacy-policy-public.html" target="_blank">Privacy</a></div>
<div class="pr-medium"><a href="https://www.apache.org/foundation/sponsorship" target="_blank">Sponsorship</a></div>
</div>
<p class="my-medium">© 2009-<script>document.write(new Date().getFullYear())</script> <a href="https://apache.org" target="_blank">The Apache Software Foundation</a> under the terms of the Apache License 2.0. Apache, the Apache feather logo, Apache Cassandra, Cassandra, and the Cassandra logo, are either registered trademarks or trademarks of The Apache Software Foundation.</p>
</div>
<div id="fade" class="hidden"></div>
<div id="modal" class="hidden">
<div id="close-modal" class="cursor-pointer"><svg viewBox="0 0 24 24" width="24" height="24" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round" class="css-i6dzq1"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></div>
<div id="mod-content" class="vid-mod-content resp-container"></div>
</div>
<script>
jQuery(function(){
var windowW = $(window).width();
$(document)
.on('click','.mobile-nav-icon',function(){
$('.main-nav').fadeIn();
})
.on('click','.main-nav',function(){
if(windowW <= 1000){
$(this).fadeOut();
}
})
.on('click','#version-toggle',function(){
$(this).toggleClass('active');
$(this).next().fadeToggle();
})
.on('click','#mobile-docs-nav-burger', function(){
$(this).toggleClass('active');
$('.docs-nav').toggleClass('active');
});
var url = window.location.pathname;
var isQuickstart = url.includes('quickstart.html');
if(isQuickstart){
var footerCTA = document.getElementById('footer-cta');
footerCTA.innerHTML = 'Get latest updates';
footerCTA.setAttribute('href', '/_/blog.html');
}
});
</script>
</div>
</body>
<script>
jQuery(function(){
});
</script>
</html>