繁体   English   中英

dsbulk 卸载丢失的数据

[英]dsbulk unload missing data

我正在使用dsbulk 1.6.0 从cassandra 3.11.3 卸载数据。

每次卸载都会导致截然不同的行数。 以下是 3 次卸载调用的结果,在同一个集群上,连接到同一个 cassandra 主机。 被卸载的表只会被附加,数据永远不会被删除,所以卸载行的减少不应该发生。 集群中有 3 个 cassandra 数据库,复制因子为 3,因此所有数据都应该存在于所选主机上。 此外,这些是快速连续执行的,添加的行数将是数百(如果有的话)而不是数万。

运行 1:

│ 总计 | 失败 | 行/秒 | p50ms | p99ms | p999ms
│ 10,937 | 7 | 97 | 15,935.46 | 20,937.97 | 20,937.97
│ UNLOAD_20201024-084213-097267 操作在 1 分 51 秒内完成,出现 7 个错误。

运行 2:

│ 总计 | 失败 | 行/秒 | p50ms | p99ms | p999ms
│ 60,558 | 3 | 266 | 12,551.34 | 21,609.05 | 21,609.05
│ UNLOAD_20201025-084208-749105 操作在 3 分 47 秒内完成,出现 3 个错误。

运行 3:

│ 总计 | 失败 | 行/秒 | p50ms | p99ms | p999ms
│ 45,404 | 4 | 211| 16,664.92 | 30,870.08 | 30,870.08
│ UNLOAD_20201026-084206-791305 操作在 3 分 35 秒内完成,出现 4 个错误。

Run 1似乎缺少大部分数据。 Run 2可能更接近完成, Run 3缺少重要数据。

我按如下方式调用卸载:

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

我假设这不是dsbulk的预期行为。 如何配置它以可靠地卸载完整的表而不会出错?

如果在写入数据时无法访问主机,并且没有重播提示,并且您没有定期运行修复,则主机可能会丢失数据。 并且因为 DSBulk 默认读取一致性级别LOCAL_ONE ,不同的主机将提供不同的视图(您提供的主机只是一个联系点 - 之后将发现集群拓扑,DSBulk 将 select 副本基于负载平衡政策)。

您可以使用-cl命令行选项 ( doc ) 强制 DSBulk 以另一个一致性级别读取数据。 您可以将结果与使用LOCAL_QUORUMALL进行比较 - 在这些模式下,Cassandra 也将“修复”不一致,因为它们将被发现,尽管这会慢得多并且会因为修复的数据写入而将负载添加到节点上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM