我有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注入到映射器和其他类中,以运行查询。
在我的datastax驱动程序中,我给出了3个节点的ip作为接触点,在CQLsession创建/或我的cassandra节点中是否需要进行调优,以便它们能够在高并发性下进行写操作?还有,我能并行写多少封信?
都是update语句,仅在主键上没有任何条件
发布于 2020-07-29 08:41:58
您所看到的超时是应用程序重载集群的结果,它有效地执行了DDoS攻击。
PT2S
是2秒的写超时.总有一天,提交日志磁盘只能占用这么多的写IO。如果您看到日志或nodetool tpstats
中出现掉的突变,这就是确认提交日志无法跟上写入。
如果您的集群能够支持10K的写入/秒,但是您的应用程序正在执行20K的写入,那么您需要将集群的大小(添加更多的节点)增加一倍,以支持吞吐量需求。干杯!
https://stackoverflow.com/questions/63133911
复制相似问题