【问题标题】:dsbulk unload missing datadsbulk 卸载丢失的数据
【发布时间】:2021-02-09 00:47:33
【问题描述】:

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

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

运行 1:

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

运行 2:

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

运行 3:

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

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

我正在按如下方式调用卸载:

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

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

【问题讨论】:

    标签: cassandra dsbulk


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-06-20
      • 2020-07-28
      • 2022-11-29
      • 1970-01-01
      • 2023-01-05
      • 2012-09-26
      • 2021-02-03
      • 1970-01-01
      • 2022-12-06
      相关资源
      最近更新 更多