在cassandra关闭之前,每次都以编程方式将数据刷新到cassandra

时间:2013-12-11 13:46:33

标签: java cassandra hector

我正在使用嵌入式Cassandra。当我关闭并重新启动我的Cassandra服务数据时会丢失。我认为正常的数据没有正确刷入磁盘。所以我尝试使用nodetool手动刷新数据并检查数据是否可用。但是nodetool似乎不适用于嵌入式Cassandra服务。我收到以下错误:

  

c:\vijay\cassandra\bin>nodetool -host 192.168.2.86 -p 7199 drain

     

Starting NodeTool

     

Failed to connect to '192.168.2.86:7199': Connection refused: connect

我尝试设置jmx属性仍然是我收到错误。我在代码中添加了以下行:

System.setProperty("com.sun.management.jmxremote", "true");
System.setProperty("com.sun.management.jmxremote.port", "7197");
System.setProperty("com.sun.management.jmxremote.authenticate", "false");
System.setProperty("com.sun.management.jmxremote.ssl", "false");
System.setProperty("java.rmi.server.hostname", "my ip");

那么,有没有办法在不使用nodetool的情况下手动将数据刷新到Cassandra?

编辑1:
经过几个小时的尝试,我现在能够运行nodetool(而不是将jmx配置添加到我添加到Eclipse调试配置的代码中,并且它有效)。我现在运行drain命令将数据正确刷新到磁盘。所以现在我的问题是:为什么数据没有正确刷新?每次重新启动Cassandra服务时,最近的更改都会消失。

4 个答案:

答案 0 :(得分:1)

你是如何停止和启动Cassandra服务器的?在Cassandra守护程序上调用stopServer应该刷新对提交日志的任何未完成的写入。即使在方法返回后,线程仍将继续进行一些处理,因此如果你在stopServer()之后杀死了JVM,那么你可能会阻止写入数据。

答案 1 :(得分:1)

在cassandra版本1.1.0到1.1.4中未正确刷新提交日志这是一个未解决的问题。请参考以下jira票。

Commitlog not replayed after restart

答案 2 :(得分:0)

很可能是因为您的提交日志设置。如果您使用的是定期模式,请尝试缩小同步窗口或使用批次。批处理会使写入速度稍慢。

https://github.com/apache/cassandra/blob/trunk/conf/cassandra.yaml#L231

答案 3 :(得分:0)

可能是发出了冲洗但是失败了。刷新应记录在日志中。确认您没有冲洗。如果你正在冲洗并且它失败了,那么应该说明为什么冲洗失败了。