Cassandra
Cassandra is an eventually consistent key value store similar to HBase and Google`s Bigtable. It implements a distributed hash map with column families originally it supported a Thrift based API very close to HBase`s. Lately Cassandra has moved towards a SQL like query language with much more flexibility around data types, joints and filters. Thankfully the Thrift interface is still there so it`s easy to convert the OpenTSDB HBase schema and calls to Cassandra at a low level through the AsyncHBase HBaseClient API. AsyncCassandra is a shim between OpenTSDB and Cassandra for trying out TSDB with an alternate backend.
Setup
- Setup a Cassandra cluster using the 
ByteOrderedPartitioner. This is critical as we require the row keys to be sorted. Because this setting affects the entire node, you may need to setup a cluster dedicated to OpenTSDB. - Create the proper keyspsaces and column families by using the cassandra-cli script:
 
create keyspace tsdb;
use tsdb;
create column family t with comparator = BytesType;
create keyspace tsdbuid;
use tsdbuid;
create column family id with comparator = BytesType;
create column family name with comparator = BytesType;
- Build TSDB by executing sh build-cassandra.sh (or if you prefer Maven, sh build-cassandra.sh pom.xml)
 - Modify your opentsdb.conf file with the asynccassandra.seeds parameter, e.g. asynccassandra.seeds=127.0.0.1:9160.
 - In the config file, set tsd.storage.hbase.uid_table=tsdbuid
 - Run the tsd via build/tsdb tsd --config=<path>/opentsdb.conf
 
If you intend to use meta data or tree features, repeat the keyspace creation with the proper table name.
Configuration
The following is a table with required and optional parameters to run OpenTSDB with Cassandra. These are in addition to the standard TSD configuration parameters from Configuration
| Property | Type | Required | Description | Default | 
|---|---|---|---|---|
| asynccassandra.seeds | String | Required | The list of nodes in your Cassandra cluster. These can be formatted <hostname>:<port> | |
| asynccassandra.port | Integer | Optional | An optional port to use for all nodes if not configured in the seeds setting. | 9160 |