dsbulk卸载丢失的数据

如何解决dsbulk卸载丢失的数据

我正在使用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的预期行为。如何配置它以可靠地卸载整个表而没有错误

解决方法

如果在写入数据时主机不可访问,并且主机没有重播提示,并且您没有定期运行修复程序,则主机中的数据可能会丢失。而且由于默认情况下DSBulk会以一致性级别LOCAL_ONE进行读取,因此不同的主机将提供不同的视图(您提供的主机只是一个联系点-在发现群集拓扑之后,DSBulk将选择基于副本的主机有关负载平衡策略的信息。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?