mirror of
https://github.com/didi/KnowStreaming.git
synced 2025-12-24 11:52:08 +08:00
指标采集缓存时间调整
This commit is contained in:
@@ -31,9 +31,11 @@ public enum VersionItemTypeEnum {
|
|||||||
|
|
||||||
|
|
||||||
SERVICE_OP_PARTITION(320, "service_partition_operation"),
|
SERVICE_OP_PARTITION(320, "service_partition_operation"),
|
||||||
|
SERVICE_OP_PARTITION_LEADER(321, "service_partition-leader_operation"),
|
||||||
|
|
||||||
SERVICE_OP_REASSIGNMENT(330, "service_reassign_operation"),
|
SERVICE_OP_REASSIGNMENT(330, "service_reassign_operation"),
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 前端操作
|
* 前端操作
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
public class CollectedMetricsLocalCache {
|
public class CollectedMetricsLocalCache {
|
||||||
private static final Cache<String, Float> brokerMetricsCache = Caffeine.newBuilder()
|
private static final Cache<String, Float> brokerMetricsCache = Caffeine.newBuilder()
|
||||||
.expireAfterWrite(60, TimeUnit.SECONDS)
|
.expireAfterWrite(90, TimeUnit.SECONDS)
|
||||||
.maximumSize(2000)
|
.maximumSize(10000)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
private static final Cache<String, List<TopicMetrics>> topicMetricsCache = Caffeine.newBuilder()
|
private static final Cache<String, List<TopicMetrics>> topicMetricsCache = Caffeine.newBuilder()
|
||||||
.expireAfterWrite(90, TimeUnit.SECONDS)
|
.expireAfterWrite(90, TimeUnit.SECONDS)
|
||||||
.maximumSize(5000)
|
.maximumSize(10000)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
private static final Cache<String, List<PartitionMetrics>> partitionMetricsCache = Caffeine.newBuilder()
|
private static final Cache<String, List<PartitionMetrics>> partitionMetricsCache = Caffeine.newBuilder()
|
||||||
@@ -29,63 +29,64 @@ public class CollectedMetricsLocalCache {
|
|||||||
.maximumSize(20000)
|
.maximumSize(20000)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static Float getBrokerMetrics(Long clusterPhyId, Integer brokerId, String metricName) {
|
public static Float getBrokerMetrics(String brokerMetricKey) {
|
||||||
return brokerMetricsCache.getIfPresent(CollectedMetricsLocalCache.genBrokerMetricKey(clusterPhyId, brokerId, metricName));
|
return brokerMetricsCache.getIfPresent(brokerMetricKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void putBrokerMetrics(Long clusterPhyId, Integer brokerId, String metricName, Float value) {
|
public static void putBrokerMetrics(String brokerMetricKey, Float value) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
brokerMetricsCache.put(CollectedMetricsLocalCache.genBrokerMetricKey(clusterPhyId, brokerId, metricName), value);
|
|
||||||
|
brokerMetricsCache.put(brokerMetricKey, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<TopicMetrics> getTopicMetrics(Long clusterPhyId, String topicName, String metricName) {
|
public static List<TopicMetrics> getTopicMetrics(String topicMetricKey) {
|
||||||
return topicMetricsCache.getIfPresent(CollectedMetricsLocalCache.genClusterTopicMetricKey(clusterPhyId, topicName, metricName));
|
return topicMetricsCache.getIfPresent(topicMetricKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void putTopicMetrics(Long clusterPhyId, String topicName, String metricName, List<TopicMetrics> metricsList) {
|
public static void putTopicMetrics(String topicMetricKey, List<TopicMetrics> metricsList) {
|
||||||
if (metricsList == null) {
|
if (metricsList == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
topicMetricsCache.put(CollectedMetricsLocalCache.genClusterTopicMetricKey(clusterPhyId, topicName, metricName), metricsList);
|
|
||||||
|
topicMetricsCache.put(topicMetricKey, metricsList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PartitionMetrics> getPartitionMetricsList(Long clusterPhyId, String topicName, String metricName) {
|
public static List<PartitionMetrics> getPartitionMetricsList(String partitionMetricKey) {
|
||||||
return partitionMetricsCache.getIfPresent(CollectedMetricsLocalCache.genClusterTopicMetricKey(clusterPhyId, topicName, metricName));
|
return partitionMetricsCache.getIfPresent(partitionMetricKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void putPartitionMetricsList(Long clusterPhyId, String topicName, String metricName, List<PartitionMetrics> metricsList) {
|
public static void putPartitionMetricsList(String partitionMetricsKey, List<PartitionMetrics> metricsList) {
|
||||||
if (metricsList == null) {
|
if (metricsList == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
partitionMetricsCache.put(CollectedMetricsLocalCache.genClusterTopicMetricKey(clusterPhyId, topicName, metricName), metricsList);
|
partitionMetricsCache.put(partitionMetricsKey, metricsList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Float getReplicaMetrics(Long clusterPhyId, Integer brokerId, String topicName, Integer partitionId, String metricName) {
|
public static Float getReplicaMetrics(String replicaMetricsKey) {
|
||||||
return replicaMetricsValueCache.getIfPresent(CollectedMetricsLocalCache.genReplicaMetricCacheKey(clusterPhyId, brokerId, topicName, partitionId, metricName));
|
return replicaMetricsValueCache.getIfPresent(replicaMetricsKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void putReplicaMetrics(Long clusterPhyId, Integer brokerId, String topicName, Integer partitionId, String metricName, Float value) {
|
public static void putReplicaMetrics(String replicaMetricsKey, Float value) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
replicaMetricsValueCache.put(CollectedMetricsLocalCache.genReplicaMetricCacheKey(clusterPhyId, brokerId, topicName, partitionId, metricName), value);
|
replicaMetricsValueCache.put(replicaMetricsKey, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String genBrokerMetricKey(Long clusterPhyId, Integer brokerId, String metricName) {
|
||||||
/**************************************************** private method ****************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
private static String genBrokerMetricKey(Long clusterPhyId, Integer brokerId, String metricName) {
|
|
||||||
return clusterPhyId + "@" + brokerId + "@" + metricName;
|
return clusterPhyId + "@" + brokerId + "@" + metricName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String genClusterTopicMetricKey(Long clusterPhyId, String topicName, String metricName) {
|
public static String genClusterTopicMetricKey(Long clusterPhyId, String topicName, String metricName) {
|
||||||
return clusterPhyId + "@" + topicName + "@" + metricName;
|
return clusterPhyId + "@" + topicName + "@" + metricName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String genReplicaMetricCacheKey(Long clusterPhyId, Integer brokerId, String topicName, Integer partitionId, String metricName) {
|
public static String genReplicaMetricCacheKey(Long clusterPhyId, Integer brokerId, String topicName, Integer partitionId, String metricName) {
|
||||||
return clusterPhyId + "@" + brokerId + "@" + topicName + "@" + partitionId + "@" + metricName;
|
return clusterPhyId + "@" + brokerId + "@" + topicName + "@" + partitionId + "@" + metricName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**************************************************** private method ****************************************************/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,9 +110,10 @@ public class BrokerMetricServiceImpl extends BaseMetricService implements Broker
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<BrokerMetrics> collectBrokerMetricsFromKafkaWithCacheFirst(Long clusterId, Integer brokerId, String metric){
|
public Result<BrokerMetrics> collectBrokerMetricsFromKafkaWithCacheFirst(Long clusterId, Integer brokerId, String metric) {
|
||||||
|
String brokerMetricKey = CollectedMetricsLocalCache.genBrokerMetricKey(clusterId, brokerId, metric);
|
||||||
|
|
||||||
Float keyValue = CollectedMetricsLocalCache.getBrokerMetrics(clusterId, brokerId, metric);
|
Float keyValue = CollectedMetricsLocalCache.getBrokerMetrics(brokerMetricKey);
|
||||||
if(null != keyValue) {
|
if(null != keyValue) {
|
||||||
BrokerMetrics brokerMetrics = new BrokerMetrics(clusterId, brokerId);
|
BrokerMetrics brokerMetrics = new BrokerMetrics(clusterId, brokerId);
|
||||||
brokerMetrics.putMetric(metric, keyValue);
|
brokerMetrics.putMetric(metric, keyValue);
|
||||||
@@ -124,7 +125,7 @@ public class BrokerMetricServiceImpl extends BaseMetricService implements Broker
|
|||||||
|
|
||||||
Map<String, Float> metricsMap = ret.getData().getMetrics();
|
Map<String, Float> metricsMap = ret.getData().getMetrics();
|
||||||
for(Map.Entry<String, Float> metricNameAndValueEntry : metricsMap.entrySet()){
|
for(Map.Entry<String, Float> metricNameAndValueEntry : metricsMap.entrySet()){
|
||||||
CollectedMetricsLocalCache.putBrokerMetrics(clusterId, brokerId, metricNameAndValueEntry.getKey(), metricNameAndValueEntry.getValue());
|
CollectedMetricsLocalCache.putBrokerMetrics(brokerMetricKey, metricNameAndValueEntry.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ public class ClusterMetricServiceImpl extends BaseMetricService implements Clust
|
|||||||
private TopicMetricService topicMetricService;
|
private TopicMetricService topicMetricService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private TopicService topicService;
|
private TopicService topicService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private PartitionService partitionService;
|
private PartitionService partitionService;
|
||||||
@@ -728,13 +728,10 @@ public class ClusterMetricServiceImpl extends BaseMetricService implements Clust
|
|||||||
Long clusterId = param.getClusterId();
|
Long clusterId = param.getClusterId();
|
||||||
|
|
||||||
//1、获取jmx的属性信息
|
//1、获取jmx的属性信息
|
||||||
VersionJmxInfo jmxInfo = getJMXInfo(clusterId, metric);
|
|
||||||
if(null == jmxInfo){return Result.buildFailure(VC_ITEM_JMX_NOT_EXIST);}
|
|
||||||
|
|
||||||
List<Broker> brokers = brokerService.listAliveBrokersFromDB(clusterId);
|
List<Broker> brokers = brokerService.listAliveBrokersFromDB(clusterId);
|
||||||
|
|
||||||
float metricVale = 0f;
|
float metricVale = 0f;
|
||||||
for(Broker broker : brokers){
|
for(Broker broker : brokers) {
|
||||||
Result<BrokerMetrics> ret = brokerMetricService.collectBrokerMetricsFromKafkaWithCacheFirst(clusterId, broker.getBrokerId(), metric);
|
Result<BrokerMetrics> ret = brokerMetricService.collectBrokerMetricsFromKafkaWithCacheFirst(clusterId, broker.getBrokerId(), metric);
|
||||||
|
|
||||||
if(null == ret || ret.failed() || null == ret.getData()){continue;}
|
if(null == ret || ret.failed() || null == ret.getData()){continue;}
|
||||||
|
|||||||
@@ -75,7 +75,9 @@ public class PartitionMetricServiceImpl extends BaseMetricService implements Par
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<List<PartitionMetrics>> collectPartitionsMetricsFromKafkaWithCache(Long clusterPhyId, String topicName, String metricName) {
|
public Result<List<PartitionMetrics>> collectPartitionsMetricsFromKafkaWithCache(Long clusterPhyId, String topicName, String metricName) {
|
||||||
List<PartitionMetrics> metricsList = CollectedMetricsLocalCache.getPartitionMetricsList(clusterPhyId, topicName, metricName);
|
String partitionMetricsKey = CollectedMetricsLocalCache.genClusterTopicMetricKey(clusterPhyId, topicName, metricName);
|
||||||
|
|
||||||
|
List<PartitionMetrics> metricsList = CollectedMetricsLocalCache.getPartitionMetricsList(partitionMetricsKey);
|
||||||
if(null != metricsList) {
|
if(null != metricsList) {
|
||||||
return Result.buildSuc(metricsList);
|
return Result.buildSuc(metricsList);
|
||||||
}
|
}
|
||||||
@@ -88,12 +90,7 @@ public class PartitionMetricServiceImpl extends BaseMetricService implements Par
|
|||||||
// 更新cache
|
// 更新cache
|
||||||
PartitionMetrics metrics = metricsResult.getData().get(0);
|
PartitionMetrics metrics = metricsResult.getData().get(0);
|
||||||
metrics.getMetrics().entrySet().forEach(
|
metrics.getMetrics().entrySet().forEach(
|
||||||
metricEntry -> CollectedMetricsLocalCache.putPartitionMetricsList(
|
metricEntry -> CollectedMetricsLocalCache.putPartitionMetricsList(partitionMetricsKey, metricsResult.getData())
|
||||||
clusterPhyId,
|
|
||||||
metrics.getTopic(),
|
|
||||||
metricEntry.getKey(),
|
|
||||||
metricsResult.getData()
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return metricsResult;
|
return metricsResult;
|
||||||
|
|||||||
@@ -77,9 +77,14 @@ public class ReplicaMetricServiceImpl extends BaseMetricService implements Repli
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<ReplicationMetrics> collectReplicaMetricsFromKafkaWithCache(Long clusterPhyId, String topic,
|
public Result<ReplicationMetrics> collectReplicaMetricsFromKafkaWithCache(Long clusterPhyId,
|
||||||
Integer brokerId, Integer partitionId, String metric){
|
String topic,
|
||||||
Float keyValue = CollectedMetricsLocalCache.getReplicaMetrics(clusterPhyId, brokerId, topic, partitionId, metric);
|
Integer brokerId,
|
||||||
|
Integer partitionId,
|
||||||
|
String metric) {
|
||||||
|
String replicaMetricsKey = CollectedMetricsLocalCache.genReplicaMetricCacheKey(clusterPhyId, brokerId, topic, partitionId, metric);
|
||||||
|
|
||||||
|
Float keyValue = CollectedMetricsLocalCache.getReplicaMetrics(replicaMetricsKey);
|
||||||
if(null != keyValue){
|
if(null != keyValue){
|
||||||
ReplicationMetrics replicationMetrics = new ReplicationMetrics(clusterPhyId, topic, partitionId, brokerId);
|
ReplicationMetrics replicationMetrics = new ReplicationMetrics(clusterPhyId, topic, partitionId, brokerId);
|
||||||
replicationMetrics.putMetric(metric, keyValue);
|
replicationMetrics.putMetric(metric, keyValue);
|
||||||
@@ -92,11 +97,7 @@ public class ReplicaMetricServiceImpl extends BaseMetricService implements Repli
|
|||||||
// 更新cache
|
// 更新cache
|
||||||
ret.getData().getMetrics().entrySet().stream().forEach(
|
ret.getData().getMetrics().entrySet().stream().forEach(
|
||||||
metricNameAndValueEntry -> CollectedMetricsLocalCache.putReplicaMetrics(
|
metricNameAndValueEntry -> CollectedMetricsLocalCache.putReplicaMetrics(
|
||||||
clusterPhyId,
|
replicaMetricsKey,
|
||||||
brokerId,
|
|
||||||
topic,
|
|
||||||
partitionId,
|
|
||||||
metricNameAndValueEntry.getKey(),
|
|
||||||
metricNameAndValueEntry.getValue()
|
metricNameAndValueEntry.getValue()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -120,7 +120,9 @@ public class TopicMetricServiceImpl extends BaseMetricService implements TopicMe
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result<List<TopicMetrics>> collectTopicMetricsFromKafkaWithCacheFirst(Long clusterPhyId, String topicName, String metricName) {
|
public Result<List<TopicMetrics>> collectTopicMetricsFromKafkaWithCacheFirst(Long clusterPhyId, String topicName, String metricName) {
|
||||||
List<TopicMetrics> metricsList = CollectedMetricsLocalCache.getTopicMetrics(clusterPhyId, topicName, metricName);
|
String topicMetricsKey = CollectedMetricsLocalCache.genClusterTopicMetricKey(clusterPhyId, topicName, metricName);
|
||||||
|
|
||||||
|
List<TopicMetrics> metricsList = CollectedMetricsLocalCache.getTopicMetrics(topicMetricsKey);
|
||||||
if(null != metricsList) {
|
if(null != metricsList) {
|
||||||
return Result.buildSuc(metricsList);
|
return Result.buildSuc(metricsList);
|
||||||
}
|
}
|
||||||
@@ -133,12 +135,7 @@ public class TopicMetricServiceImpl extends BaseMetricService implements TopicMe
|
|||||||
// 更新cache
|
// 更新cache
|
||||||
TopicMetrics metrics = metricsResult.getData().get(0);
|
TopicMetrics metrics = metricsResult.getData().get(0);
|
||||||
metrics.getMetrics().entrySet().forEach(
|
metrics.getMetrics().entrySet().forEach(
|
||||||
metricEntry -> CollectedMetricsLocalCache.putTopicMetrics(
|
metricEntry -> CollectedMetricsLocalCache.putTopicMetrics(topicMetricsKey, metricsResult.getData())
|
||||||
clusterPhyId,
|
|
||||||
metrics.getTopic(),
|
|
||||||
metricEntry.getKey(),
|
|
||||||
metricsResult.getData()
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return metricsResult;
|
return metricsResult;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ public class ClusterMetricVersionItems extends BaseMetricVersionMetric {
|
|||||||
public static final String CLUSTER_METRIC_HEALTH_SCORE_CLUSTER = "HealthScore_Cluster";
|
public static final String CLUSTER_METRIC_HEALTH_SCORE_CLUSTER = "HealthScore_Cluster";
|
||||||
public static final String CLUSTER_METRIC_HEALTH_CHECK_PASSED_CLUSTER = "HealthCheckPassed_Cluster";
|
public static final String CLUSTER_METRIC_HEALTH_CHECK_PASSED_CLUSTER = "HealthCheckPassed_Cluster";
|
||||||
public static final String CLUSTER_METRIC_HEALTH_CHECK_TOTAL_CLUSTER = "HealthCheckTotal_Cluster";
|
public static final String CLUSTER_METRIC_HEALTH_CHECK_TOTAL_CLUSTER = "HealthCheckTotal_Cluster";
|
||||||
|
|
||||||
public static final String CLUSTER_METRIC_TOTAL_REQ_QUEUE_SIZE = "TotalRequestQueueSize";
|
public static final String CLUSTER_METRIC_TOTAL_REQ_QUEUE_SIZE = "TotalRequestQueueSize";
|
||||||
public static final String CLUSTER_METRIC_TOTAL_RES_QUEUE_SIZE = "TotalResponseQueueSize";
|
public static final String CLUSTER_METRIC_TOTAL_RES_QUEUE_SIZE = "TotalResponseQueueSize";
|
||||||
public static final String CLUSTER_METRIC_EVENT_QUEUE_SIZE = "EventQueueSize";
|
public static final String CLUSTER_METRIC_EVENT_QUEUE_SIZE = "EventQueueSize";
|
||||||
|
|||||||
Reference in New Issue
Block a user