【问题标题】:Cassandra write query timeout out after PT2SCassandra 在 PT2S 之后写查询超时
【发布时间】: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


【解决方案1】:

您看到的超时是由于您的应用使集群过载,从而有效地进行了 DDoS 攻击。

PT2S 是 2 秒的写入超时。当 commitlog 磁盘只能占用这么多的写入 IO 时,就会出现这样的情况。如果您在日志或nodetool tpstats 中看到丢弃的突变,则确认提交日志无法跟上写入。

如果您的集群可以维持 10K 写入/秒,但您的应用正在执行 20K 写入,那么您需要将集群的大小加倍(添加更多节点)以支持吞吐量要求。干杯!

【讨论】:

  • 是的,我使用磁盘检查是否可以节省成本。一旦我搬到 SSD 问题就解决了..
  • 我在读取压力测试期间得到它。写入大小分布指标显示 60B(字节)大小。 Cassandra 在 READ ONLY 压力测试期间尝试写什么?
  • @Capacytron 正如在另一个频道中讨论的那样,C* 存储了一些指标,即使是纯读取工作负载,所以会发生少量写入。由于 Astra 的速率限制,您获得了 DriverTimeoutException。它是可配置的,可以根据要求增加。干杯!
猜你喜欢
  • 2021-07-16
  • 2021-03-12
  • 2018-07-10
  • 2015-12-03
  • 2017-07-29
  • 2017-03-12
  • 2015-02-05
  • 1970-01-01
相关资源
最近更新 更多