It turns out I missed a section in the documentation.
I was using an old cassandra.yaml
configuration file from an earlier version of Cassandra and it didn't enable the Native Transport binary protocol. The following snippet shows the settings that I needed to change:
# Whether to start the native transport server.
start_native_transport: true
# port for the CQL native transport to listen for clients on
native_transport_port: 9042
After restarting Cassandra the client was able to connect successfully and run CQL 3.0 commands. Note that the code to create the connection must be changed to use the port specified in the file, like this:
Cluster cluster = new Cluster.Builder()
.addContactPoints("localhost")
.withPort(9042)
.build();
Also, note that from Cassandra 1.2.5 and above, the native transport is enabled by default.