我在单机(Ubantu)中设置了3节点cassandra集群,我做了以下 -
-
所有三个节点和应用程序都能够创建密钥空间 .
-
关闭3个正在运行的节点中的一个,应用程序仍然可以创建密钥空间 .
-
从现在的2个运行节点中关闭另外一个节点并立即启动它,现在应用程序无法创建密钥空间,它继续报告(如无限循环) -
2017-09-25 14:42:40 INFO RequestHandler:561 - 查询CREATE KEYSPACE如果没有复制MYKEYSPACE with replication = {'class':'NetworkTopologyStrategy','datacenter1':'2'};未在/127.0.0.1:9042上准备,在重试执行前做好准备 . 看几次这个消息很好,但是看到它很多可能是性能问题的根源
我的应用程序日志充斥着这些消息,导致java heap out错误 .
Note- I have Replication factor as 2, and the version of cassandra using is 2.2.6 with cassandra driver is 2.2.0-rc3. When I revert back to cassandra driver 2.1.3 everything is working fine, so just wondering if some issues at driver level side
还有更多要添加的内容我甚至在cassandra驱动程序级别调试了代码,发现这是因为下面给出的com.datastax.driver.core.Connection类的方法 -
private void flush(FlushItem item) {
EventLoop loop = item.channel.eventLoop();
Flusher flusher = flusherLookup.get(loop);
if (flusher == null) {
Flusher alt = flusherLookup.putIfAbsent(loop, flusher = new Flusher(loop));
if (alt != null)
flusher = alt;
}
flusher.queued.add(item);
flusher.start();
}
因此,在使节点联机(现在有3个节点在3个节点中运行)之后,RequestHandler继续报告未准备好的查询,因此在进行此调用之前重试之前准备 -
public ResponseHandler write(ResponseCallback callback, boolean startTimeout)
{
....
....
....
flush(new FlushItem(channel, request, writeHandler(request, handler)));
....
....
}
1 回答
将cassandra驱动程序版本升级到3.3.0后,没有遇到问题 . 我相信2.2.0-rc3中有一些错误,这是发布候选版本 .