我有一个cassandra单片应用程序,我想写在高速率读取队列中的一些有效负载。cassandra集群有3个节点。当我开始并行处理大量消息(通过生成线程)时,我得到以下异常
java.util.concurrent.ExecutionException: com.datastax.oss.driver.api.core.DriverTimeoutException: Query timed out after PT2S
我正在创建cqlsession作为bean
return CqlSession.builder().addContactPoints(contactPoints)
/*.addContactPoint(new InetSocketAddress("localhost", 9042))*/
.withConfigLoader(new DefaultDriverConfigLoader()).withLocalDatacenter("datacenter1")
.addTypeCodecs(new CustomDateCodec())
.withKeyspace("dev").build();
我将这个cqlsession注入我的mapper和其他类来运行查询
在我的datastax驱动程序中,我将3个节点的ip作为联系点,在cqlsession创建/或cassandra节点中是否需要进行任何调优,以便它们可以在高并发性下进行is写入?我能并行写多少次?
全部都是update语句,仅主键上没有任何if条件
1条答案
按热度按时间x8goxv8g1#
你看到的超时是由于你的应用程序使集群过载,有效地进行了ddos攻击。
PT2S
是2秒写入超时。当commitlog磁盘只能占用这么多写io时,就会出现这种情况。如果你在日志或nodetool tpstats
,这证实了commitlog无法跟上写入的速度。如果您的集群可以支持每秒10k的写入,但是您的应用程序正在进行20k的写入,那么您需要将集群的大小增加一倍(添加更多节点)以支持吞吐量要求。干杯!