dsbulk卸载丢失的数据

mrfwxfqh  于 2021-06-09  发布在  Cassandra
关注(0)|答案(1)|浏览(377)

我在用 dsbulk 1.6.0从中卸载数据 cassandra 3.11.3.
每次卸载都会导致非常不同的行数。下面是在同一集群上连接到同一个cassandra主机的3次unload调用的结果。被卸载的表只会被追加,数据不会被删除,所以卸载的行不会减少。群集中有3个cassandra数据库,复制因子为3,因此所有数据都应该出现在所选主机上。而且,这些都是快速连续执行的,添加的行数将是数百行(如果有的话),而不是上万行。
运行1:
│ 总计|失败|行/秒| p50ms | p99ms | p999ms
│ 10,937 | 7 | 97 | 15,935.46 | 20,937.97 | 20,937.97
│ 操作已完成,1分51秒内出现7个错误。
运行2:
│ 总计|失败|行/秒| p50ms | p99ms | p999ms
│ 60,558 | 3 | 266 | 12,551.34 | 21,609.05 | 21,609.05
│ 操作已完成,3分47秒内出现3个错误。
运行3:
│ 总计|失败|行/秒| p50ms | p99ms | p999ms
│ 45,404 | 4 | 211 | 16,664.92 | 30,870.08 | 30,870.08
│ 操作已完成,3分35秒内出现4个错误。
看来 Run 1 丢失了大部分数据。 Run 2 可能更接近完成 Run 3 缺少重要数据。
我调用unload如下:

dsbulk unload -h $CASSANDRA_IP -k $KEYSPACE -t $CASSANDRA_TABLE > $DATA_FILE

我想这不是我们所期望的行为 dsbulk . 如何配置它以可靠地卸载完整的表而不出错?

gz5pxeao

gz5pxeao1#

如果在写入数据时无法访问主机,并且没有重放提示,并且您没有定期运行修复,则主机中的数据可能会丢失。因为dsbulk默认读取一致性级别 LOCAL_ONE ,不同的主机将提供不同的视图(您提供的主机只是一个联系点—之后将发现集群拓扑,dsbulk将根据负载平衡策略选择复制副本)。
您可以通过使用强制dsbulk以另一个一致性级别读取数据 -cl 命令行选项(doc)。您可以使用 LOCAL_QUORUM 或者 ALL -在这些模式中,cassandra还会在发现不一致时“修复”这些不一致,尽管这样会慢得多&由于修复的数据写入,会将负载添加到节点上。

相关问题