代码结构:
Sink对比spark的Sink
ConsoleSink对比spark的consoleSink
source对比spark的SOurce
ASource对比ApplicationSource
MetricsSystem对比MetricsSystem
sink代码
public interface Sink {
void start();
}
public class ConsoleSink implements Sink
{
public MetricRegistry metricRegistry;
public ConsoleSink(MetricRegistry metricRegistry){
this.metricRegistry = metricRegistry;
}
@Override
public void start() {
ConsoleReporter consoleReporter = ConsoleReporter.forRegistry(metricRegistry)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.convertRatesTo(TimeUnit.SECONDS)
.build();
consoleReporter.start(5,TimeUnit.SECONDS);
}
}
source代码
public class Source {
private String name;
private MetricRegistry metricRegistry;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public MetricRegistry getMetricRegistry() {
return metricRegistry;
}
public void setMetricRegistry(MetricRegistry metricRegistry) {
this.metricRegistry = metricRegistry;
}
}
public class ASource extends Source {
private String name;
private MetricRegistry metricRegistry;
public ASource(){
this.name="Asource";
this.metricRegistry = new MetricRegistry();
Counter counter = new Counter();
counter.inc();
metricRegistry.register("Asource",counter);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public MetricRegistry getMetricRegistry() {
return metricRegistry;
}
public void setMetricRegistry(MetricRegistry metricRegistry) {
this.metricRegistry = metricRegistry;
}
}
。。。
MystricsSystem
public class MetricSystem {
public MetricRegistry metricRegistry;
public List<MetricRegistry> list;
public List<Sink> sinks;
public MetricSystem(MetricRegistry metricRegistry){
this.metricRegistry = metricRegistry;
list = new ArrayList<MetricRegistry>();
sinks = new ArrayList<Sink>();
}
public void registSource(String name, Source source){
list.add(source.getMetricRegistry());
metricRegistry.register(name,source.getMetricRegistry());
}
public void registSink(String sinkName) throws Exception{
Sink sink = (Sink) Class.forName(sinkName).getConstructor(MetricRegistry.class).newInstance(this.metricRegistry);
sinks.add(sink);
}
public void start(){
for(Sink sink:sinks){
sink.start();
}
}
}
测试:
可以看到三个source的统计输出。
metrics相关方法: https://blog.csdn.net/tracymkgld/article/details/51899721