Cassandra 卡桑德拉的批量限制是多少?

Cassandra 卡桑德拉的批量限制是多少?,cassandra,cassandra-3.0,cassandra-2.2,Cassandra,Cassandra 3.0,Cassandra 2.2,我有一个Java客户机,它将记录批量推(插入)到Cassandra集群。批处理中的元素都具有相同的行键,因此它们都将放置在同一节点中。而且我不需要事务是原子的,所以我一直在使用unlogged批处理 每批中插入命令的数量取决于不同的因素,但可以是5到50000之间的任意数量。首先,我只是在一个批中放入尽可能多的命令并提交。这引发了com.datastax.driver.core.exceptions.InvalidQueryException:批处理过大。然后我用了一个上限,每批插入1000个,

我有一个Java客户机,它将记录批量推(插入)到Cassandra集群。批处理中的元素都具有相同的行键,因此它们都将放置在同一节点中。而且我不需要事务是原子的,所以我一直在使用unlogged批处理

每批中插入命令的数量取决于不同的因素,但可以是5到50000之间的任意数量。首先,我只是在一个批中放入尽可能多的命令并提交。这引发了
com.datastax.driver.core.exceptions.InvalidQueryException:批处理过大
。然后我用了一个上限,每批插入1000个,然后降到300个。我注意到我只是随机猜测,而不知道这个限制是从哪里来的,这可能会在将来引起麻烦


我的问题是,这个极限是多少?我可以修改它吗?我如何知道一个批次中可以放置多少个元素?当我的批处理“已满”时?

我建议不要增加上限,而是将其拆分为多个请求。将所有内容放在一个巨大的请求中会对协调员产生重大的负面影响。将所有内容都放在一个分区中可以通过减少延迟来提高某些大小的批处理的吞吐量,但批处理决不是用来提高性能的。因此,试图通过使用不同的批处理大小来优化以获得最大吞吐量在很大程度上取决于用例/模式/节点,并且需要进行特定的测试,因为在开始降低的大小上通常会有一个悬崖

有一个

# Fail any batch exceeding this value. 50kb (10x warn threshold) by default.
batch_size_fail_threshold_in_kb: 50

您的
cassandra.yaml中的选项来增加它,但一定要进行测试,以确保您的实际帮助而不是损害吞吐量。

我通过将CHUNKSIZE更改为较低的值(例如1)解决了这个问题

从CHUNKSIZE=1的“mybackup”复制mytable


操作要慢得多,但至少它现在可以工作了

查看Cassandra日志,您将能够发现以下内容:


错误19:54:13[matches]的批次大小为103.072KiB,超过规定的阈值50.000KiB 53.072KiB。(请参见批量大小\u失败\u阈值\u单位为\u kb)

这正是我想要的,谢谢。您知道在客户端监视批大小的最佳方法是什么吗?取决于您使用的驱动程序,但在java驱动程序中,您可以对批处理中的每个语句使用getValues(),该语句返回一个ByteBuffers数组,您可以对其使用剩余的()方法来分别获得缓冲区的大小并将它们全部相加,但通常我不建议这样做。你不应该创建超大批量,只要足够大,你就可以感觉到你离那个极限还差得很远。C*提倡按列而不是按行进行设计,C*表示每个分区有2B列,但根据经验,我们知道最合适的位置是100MB。因此,即使使用100MB分区,如果批处理的默认大小为50KB,这就像100MB/50KB=3125请求检索100MB分区一样,因此请求太多。即使在今天,批处理仍然需要通过协调器吗?为什么我们不能使用令牌感知策略并将单个分区的所有行(假设所有行的数据大小为100MB)直接批处理到正确的节点?如果不是,在几个请求中检索100MB分区的最佳批处理大小是多少?@user1870400如果要检索整个分区,则不需要使用批处理查询。只需在分页时使用1个查询。如果您正在编写分区,我觉得100MB的3000个请求没问题。@user1870400,我正在使用这个配置..cassandra.concurrent.writes=1500 cassandra.output.batch.size.bytes=2056 cassandra.output.batch.grouping.key=partition cassandra.output.consistency.level=ANY cassandra.output.batch.grouping.buffer.size=3000 cassandra.output.throughput\u mb\u每秒=25@user1870400其中我有2亿条记录x每100条记录字节…加载此数据需要2小时…那么如何微调上述参数?