I personally think BatchSplitter needs to go away. You basically dump all metrics to be written in a blocking queue and all write threads pick METRICS_BATCH_SIZE from the blocking queue and write them to cassandra. One queue multiple threads will be more performant than a queue per thread.