Search code examples
cassandraload-balancingdatastaxcassandra-3.0datastax-java-driver

How to implement token-aware load balancing policy using datastax java driver 4.x?


Our application currently uses cassandra-driver-core-3.1.0 and it implements token-aware load balancing policy. We are upgrading the driver to java-driver-core-4.13.0, token-aware policy isn't available with the driver. In Datastax docs,it's mentioned token-aware is the default policy. Should we've to write some code for it or if we use the default load balancing policy, DefaultLoadBalancingPolicy token-aware will be taken care of? I'm new to Cassandra. Can anyone please help..

import com.datastax.driver.core.policies.RoundRobinPolicy;
import com.datastax.driver.core.policies.TokenAwarePolicy;
import com.datastax.driver.core.policies.DCAwareRoundRobinPolicy;
import com.datastax.driver.core.policies.LoadBalancingPolicy;
    
    public static LoadBalancingPolicy getLoadBalancingPolicy(String loadBalanceStr, boolean isTokenAware) {
        LoadBalancingPolicy loadBalance = null;
        if (isTokenAware) {
            loadBalance = new TokenAwarePolicy(loadBalanceDataConvert(loadBalanceStr));
        } else {
            loadBalance = loadBalanceDataConvert(loadBalanceStr);
        }
        
        return loadBalance;
        
    }
    private static LoadBalancingPolicy loadBalanceDataConvert(String loadBalanceStr) {
        if (CassandraConstants.CASSANDRACONNECTION_LOADBALANCEPOLICY_DC.equals(loadBalanceStr)) {
            return new DCAwareRoundRobinPolicy.Builder().build();
        } else if (CassandraConstants.CASSANDRACONNECTION_LOADBALANCEPOLICY_ROUND.equals(loadBalanceStr)) {
            return new RoundRobinPolicy();
        }
        
        return null;
    }
    

https://docs.datastax.com/en/developer/java-driver/4.2/manual/core/load_balancing/


Solution

  • You don't need to implement anything yourself, just use default load balancing policy - it's token-aware by default, as described in the documentation.