我使用JMX作为度量标准报告器来获取Flink指标,但有没有办法将其作为终端输出?
我想为每个运算符绘制numRecordsInPerSecond
以进行性能分析,我该怎么做?
我已经看到了累加器的一些例子,但它没有给我正确的见解我如何进行Flink的性能分析。我会在这里举个例子
这是我的Flink计划的执行计划,我有多个问题,但我想问基本的一个
如何衡量每个运营商的延迟,然后将其添加到计算复杂事件的总延迟时间。
如何衡量输出吞吐量?目前,我已经在select函数中编写了一些代码,这些函数计算了所见的复杂事件数和Flink引擎启动时间。这是最好的方法吗?
但基本问题仍然存在,即如何通过代码在终端输出中显示Flink metrics中提到的系统指标的输出,因为我想绘制图表以获得性能,而JMX的问题是它在某种意义上向我显示了需求指标,当我点击JMX控制台中的特定指标时,我看到了这些值,这不适合分析系统。
P.S - 我发现在StackOverflow上有一个question用于计算吞吐量和延迟,答案是这样的
private static class MyMapper extends RichMapFunction<String, Object> {
private transient Meter meter;
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
this.meter = getRuntimeContext()
.getMetricGroup()
.meter("myMeter", new DropwizardMeterWrapper(new com.codahale.metrics.Meter()));
}
@Override
public Object map(String value) throws Exception {
this.meter.markEvent();
return value;
}
}
我已经在我的代码中添加了上面的类但没有看到任何输出,我也想知道这段代码将如何显示吞吐量或延迟,因为我们没有提到我们想要找到延迟的运算符?例如,我想在执行计划的中间而不是在计划结束时找到运营商的吞吐量,上面的代码是否会为我做这个?
答案 0 :(得分:0)
您已经拥有Flink仪表板上列出的每个组件的所有延迟和每秒输入/输出数量,无需实现额外的自定义计数器或度量标准来计算每秒的记录输入/输出每个组成部分。
如果您想要实现自己的计数器/ Meter,那么您需要使用此代码,并且必须将其映射到您要定位的任何组件。