我已安排每天进行增量修复。但是在修复过程中,我们的监控系统会报告COMPACTIONEXECUTOR_PENDING任务。
我想知道,如果我可以引入检查,看看,如果压缩没有运行,在我触发修复之前。
我应该能够通过解析nodetool netstats和compactionstats命令输出的输出来检查压缩是否正在运行。
如果以下两项检查都通过,我将继续修理:
但在我继续之前,我想得到一些专家意见。
我的理解是否正确? 我不想进入这种情况,其中,这些检查总是失败,修复过程根本没有被触发。
感谢。
答案 0 :(得分:0)
Cassandra经常发生压实。所以我有点害怕只有在pending_compactions = 0时触发修复才会导致修复运行不够。但这取决于您的流量,例如如果你写的很少,你就不会做很多压缩。您应该为pending_compactions = 0添加最长等待时间,以便在指定时间后如果条件不正确,则无论如何都将运行修复。
回答你的问题。 Nodetool使用JMX在Cassandra中获取MBean。您可以在此处查看所有可用的MBean:http://cassandra.apache.org/doc/latest/operating/metrics.html 你想要这个MBean:
import { Pipe, PipeTransform } from '@angular/core';
import { NumberFilterService } from './NumberFilterService';
@Pipe({
name: 'numberfilter'
})
export class NumberFilterPipe implements PipeTransform {
constructor(public servicenum : NumberFilterService){}
transform(numbers: any[], key: any ): any[] {
return this.servicenum.filterNumber(numbers,key);
}
}
您可以像这样创建自己的JMX客户端:How to connect to a java program on localhost jvm using JMX?
或者您可以使用jmxterm:https://github.com/jiaqi/jmxterm
我的理解是你可以像这样使用它:
import { Injectable } from '@angular/core';
@Injectable()
export class NumberFilterService {
arrayLen = 0;
itteration = 0;
result = [];
public filterNumber(values: any[], key: any): any[] {
this.arrayLen = values.length;
for (this.itteration = 0 ; this.itteration < this.arrayLen ; this.itteration ++ ) {
if (key === values[this.itteration]) {
this.result.push(values[this.itteration]);
}
}
return this.result;
}
}