Cassandra 我的大量表(2k+;)是否会导致写入超时异常?

Cassandra 我的大量表(2k+;)是否会导致写入超时异常?,cassandra,datastax-java-driver,Cassandra,Datastax Java Driver,我正在使用Datastax Java驱动程序3.8.0运行OS Cassandra 3.11.9。我有一个Cassandra键空间,它有多个表作为查找表/搜索索引。每当接收到对端点的新POST请求时,我都解析该对象并将其插入相应的Cassandra表中。我还向每个对应的查找表中插入内容。(每个物体10-20个) 在向系统中接收大量数据时,我在驱动程序中遇到了WriteTimeOutException 我试图通过引入ApacheCamel将insert请求序列化到查找表中,并将所有语句放入会话可以

我正在使用Datastax Java驱动程序3.8.0运行OS Cassandra 3.11.9。我有一个Cassandra键空间,它有多个表作为查找表/搜索索引。每当接收到对端点的新POST请求时,我都解析该对象并将其插入相应的Cassandra表中。我还向每个对应的查找表中插入内容。(每个物体10-20个)

在向系统中接收大量数据时,我在驱动程序中遇到了WriteTimeOutException

我试图通过引入ApacheCamel将insert请求序列化到查找表中,并将所有语句放入会话可以处理的队列中,但没有任何帮助。 对于Camel,由于异常现在发生在Camel线程中,因此测试将继续运行,而不是在第一个异常上失败。最终,这项测试似乎让卡桑德拉崩溃了。(不过卡桑德拉日志中没有任何内容)

我还尝试关闭我的查找表,而是将每个对象插入主表15x(以模拟类似的写入次数,就好像打开了查找表一样)。这个测试无一例外地通过了,这使我认为大量的表是问题所在

大量(2k+)的Cassandra表是否有代码气味?我们应该重新建设还是投入更多的资源?日志中未显示任何指示性信息,主要是关于表格数量等的一些状态(无例外)


Datastax Java驱动程序可以这样多线程使用吗?它说它是线程安全的。

大量的表对性能有直接影响-请参见此(这是一个很好的信息来源),并了解更多详细信息。基本上,使用约1000个表,性能会降低约20-25%


这可能是一个原因,不是完全直接的,而是相关的。对于每个表,Cassandra都需要分配内存,在memtable中为其分配一部分,保留有关它的信息,等等。这个特定的问题可能来自阻塞的memtable刷新,或者类似的问题。检查和是否有被阻止或挂起的memtable刷新。最好设置一些连续监视解决方案,例如,和,以便在一段时间内观察包含该信息的。

嗨,Alex,谢谢您的回复。阅读非常有趣,尤其是博客帖子!非常感谢。我运行了
nodetool-tpstats
nodetool-tablestats
,但它们都没有引起我太多的兴趣。我注意到
tpstats
表明偶尔会有一些被丢弃的MUTATE请求-我想这些是失败的写入
tablestats
花了很长时间才返回,但对于我尝试MCAC的所有表,始终有0作为挂起刷新,但我遇到并尝试了,但它尚未开始工作。(所有字段均不适用,显示1个节点已关闭)所有nodetool命令都显示信息的“当前”快照,而您需要历史视图-这就是我推荐MCAC的原因。您可以通过JMX设置Prometheus,并只启用特定的度量,因为如果您允许取消所有度量,它将给节点带来大量负载