forked from apache/pulsar
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[improve] [client] Add api to get producer/consumer stats for partiti…
…on topic (apache#18212) * [improve] [client] Add api to get producer/consumer stats for partition topic * introduce partition topic stats interface
- Loading branch information
Showing
11 changed files
with
292 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
39 changes: 39 additions & 0 deletions
39
pulsar-client-api/src/main/java/org/apache/pulsar/client/api/MultiTopicConsumerStats.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* | ||
* Licensed to the Apache Software Foundation (ASF) under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. The ASF licenses this file | ||
* to you under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
package org.apache.pulsar.client.api; | ||
|
||
import java.util.Map; | ||
import org.apache.pulsar.common.classification.InterfaceAudience; | ||
import org.apache.pulsar.common.classification.InterfaceStability; | ||
|
||
/** | ||
* Multi-topic Consumer statistics recorded by client. | ||
* | ||
* <p>All the stats are relative to the last recording period. The interval of the stats refreshes is configured with | ||
* {@link ClientBuilder#statsInterval(long, java.util.concurrent.TimeUnit)} with a default of 1 minute. | ||
*/ | ||
@InterfaceAudience.Public | ||
@InterfaceStability.Stable | ||
public interface MultiTopicConsumerStats extends ConsumerStats { | ||
|
||
/** | ||
* @return stats for each partition if topic is partitioned topic | ||
*/ | ||
Map<String, ConsumerStats> getPartitionStats(); | ||
} |
40 changes: 40 additions & 0 deletions
40
...-client-api/src/main/java/org/apache/pulsar/client/api/PartitionedTopicProducerStats.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/* | ||
* Licensed to the Apache Software Foundation (ASF) under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. The ASF licenses this file | ||
* to you under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
package org.apache.pulsar.client.api; | ||
|
||
import java.util.Map; | ||
import org.apache.pulsar.common.classification.InterfaceAudience; | ||
import org.apache.pulsar.common.classification.InterfaceStability; | ||
|
||
/** | ||
* Partitioned topic Producer statistics recorded by client. | ||
* | ||
* <p>All the stats are relative to the last recording period. The interval of the stats refreshes is configured with | ||
* {@link ClientBuilder#statsInterval(long, java.util.concurrent.TimeUnit)} with a default of 1 minute. | ||
*/ | ||
@InterfaceAudience.Public | ||
@InterfaceStability.Stable | ||
public interface PartitionedTopicProducerStats extends ProducerStats { | ||
|
||
/** | ||
* @return stats for each partition if topic is partitioned topic | ||
*/ | ||
Map<String, ProducerStats> getPartitionStats(); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 59 additions & 0 deletions
59
...ient/src/main/java/org/apache/pulsar/client/impl/MultiTopicConsumerStatsRecorderImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* | ||
* Licensed to the Apache Software Foundation (ASF) under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. The ASF licenses this file | ||
* to you under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
package org.apache.pulsar.client.impl; | ||
|
||
import java.util.Map; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
import org.apache.pulsar.client.api.Consumer; | ||
import org.apache.pulsar.client.api.ConsumerStats; | ||
import org.apache.pulsar.client.api.MultiTopicConsumerStats; | ||
import org.apache.pulsar.client.impl.conf.ConsumerConfigurationData; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
public class MultiTopicConsumerStatsRecorderImpl extends ConsumerStatsRecorderImpl implements MultiTopicConsumerStats { | ||
|
||
private static final long serialVersionUID = 1L; | ||
private Map<String, ConsumerStats> partitionStats = new ConcurrentHashMap<>(); | ||
|
||
public MultiTopicConsumerStatsRecorderImpl() { | ||
super(); | ||
} | ||
|
||
public MultiTopicConsumerStatsRecorderImpl(Consumer<?> consumer) { | ||
super(consumer); | ||
} | ||
|
||
public MultiTopicConsumerStatsRecorderImpl(PulsarClientImpl pulsarClient, ConsumerConfigurationData<?> conf, | ||
Consumer<?> consumer) { | ||
super(pulsarClient, conf, consumer); | ||
} | ||
|
||
public void updateCumulativeStats(String partition, ConsumerStats stats) { | ||
super.updateCumulativeStats(stats); | ||
partitionStats.put(partition, stats); | ||
} | ||
|
||
@Override | ||
public Map<String, ConsumerStats> getPartitionStats() { | ||
return partitionStats; | ||
} | ||
|
||
private static final Logger log = LoggerFactory.getLogger(MultiTopicConsumerStatsRecorderImpl.class); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
79 changes: 79 additions & 0 deletions
79
...rc/main/java/org/apache/pulsar/client/impl/PartitionedTopicProducerStatsRecorderImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
/* | ||
* Licensed to the Apache Software Foundation (ASF) under one | ||
* or more contributor license agreements. See the NOTICE file | ||
* distributed with this work for additional information | ||
* regarding copyright ownership. The ASF licenses this file | ||
* to you under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, | ||
* software distributed under the License is distributed on an | ||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
* KIND, either express or implied. See the License for the | ||
* specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
package org.apache.pulsar.client.impl; | ||
|
||
import java.util.Collections; | ||
import java.util.Map; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
import java.util.concurrent.atomic.DoubleAdder; | ||
import org.apache.pulsar.client.api.PartitionedTopicProducerStats; | ||
import org.apache.pulsar.client.api.ProducerStats; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
|
||
public class PartitionedTopicProducerStatsRecorderImpl extends ProducerStatsRecorderImpl | ||
implements PartitionedTopicProducerStats { | ||
|
||
private static final long serialVersionUID = 1L; | ||
private Map<String, ProducerStats> partitionStats = Collections.emptyMap(); | ||
private final DoubleAdder sendMsgsRateAggregate; | ||
private final DoubleAdder sendBytesRateAggregate; | ||
private int partitions = 0; | ||
|
||
public PartitionedTopicProducerStatsRecorderImpl() { | ||
super(); | ||
partitionStats = new ConcurrentHashMap<>(); | ||
sendMsgsRateAggregate = new DoubleAdder(); | ||
sendBytesRateAggregate = new DoubleAdder(); | ||
} | ||
|
||
void reset() { | ||
super.reset(); | ||
partitions = 0; | ||
} | ||
|
||
void updateCumulativeStats(String partition, ProducerStats stats) { | ||
super.updateCumulativeStats(stats); | ||
if (stats == null) { | ||
return; | ||
} | ||
partitionStats.put(partition, stats); | ||
// update rates | ||
sendMsgsRateAggregate.add(stats.getSendMsgsRate()); | ||
sendBytesRateAggregate.add(stats.getSendBytesRate()); | ||
partitions++; | ||
} | ||
|
||
@Override | ||
public double getSendMsgsRate() { | ||
return sendMsgsRateAggregate.doubleValue() / partitions; | ||
} | ||
|
||
@Override | ||
public double getSendBytesRate() { | ||
return sendBytesRateAggregate.doubleValue() / partitions; | ||
} | ||
|
||
@Override | ||
public Map<String, ProducerStats> getPartitionStats() { | ||
return partitionStats; | ||
} | ||
|
||
private static final Logger log = LoggerFactory.getLogger(PartitionedTopicProducerStatsRecorderImpl.class); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -132,4 +132,5 @@ public double getSendLatencyMillisMax() { | |
public int getPendingQueueSize() { | ||
return 0; | ||
} | ||
|
||
} |
Oops, something went wrong.