我在单机(Ubantu)中设置了3个节点的cassandra集群,并且我执行以下操作 -
关闭另外一个节点,现在2个正在运行 节点并立即启动它,现在应用程序无法启动它 创建密钥空间,它继续报告(如无限循环) -
2017-09-25 14:42:40 INFO RequestHandler:561 - 查询CREATE KEYSPACE IF NOT NOT EXISTS MYKEYSPACE WITH replication = {'class':'NetworkTopologyStrategy','datacenter1':'2'}; 未在/127.0.0.1:9042上准备,在重试执行前做好准备。看到这个 消息几次是好的,但看到很多可能是性能的来源 问题
我的应用程序日志充斥着这些消息,导致java heap out错误。
注意 - 我的复制因子为2,cassandra使用的版本为2.2.6,cassandra驱动程序为2.2.0-rc3。当我恢复到cassandra驱动程序2.1.3时一切正常,所以只是想知道驱动程序级别是否存在一些问题
进一步补充一点,我甚至在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();
}
因此,在恢复节点在线(2个节点现在从3个节点运行)之后,RequestHandler继续报告未准备好的查询,因此在进行此调用之前重试之前做准备 -
public ResponseHandler write(ResponseCallback callback, boolean startTimeout)
{
....
....
....
flush(new FlushItem(channel, request, writeHandler(request, handler)));
....
....
}
答案 0 :(得分:1)
将cassandra驱动程序版本升级到3.3.0后,没有遇到问题。我相信2.2.0-rc3中有一些错误,这是发布候选版本。