【发布时间】:2020-11-17 21:09:14
【问题描述】:
我有 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 注入我的映射器和其他类以运行查询
在我的 datastax 驱动程序中,我已将 3 个节点的 ip 作为联系点 我需要在 CQLsession 创建/或我的 cassandra 节点中进行任何调整,以便它们可以进行高并发写入吗? 另外我可以并行执行多少次写入?
都是更新语句,没有任何 if 条件,只在主键上
【问题讨论】:
-
你能展示一下你是如何写数据的吗?你使用批次吗?数据的来源是什么?卡夫卡之类的?
-
Source 是来自 kafka 的有效载荷,经过处理并写入多个表。有些是批处理,我知道分区键相同,有些是异步正常写入
-
我正在使用 cassandra 4 beta.. 这可能是问题吗?
-
不...它不应该链接到 Cassandra 4 - 它是受支持的版本
-
我会建议尝试使用 DataStax 的 Kafka 连接器 (docs.datastax.com/en/kafka/doc/index.html) 而不是手动编写的代码
标签: cassandra datastax-java-driver