我正在使用FLink Metric(1.7),并且被卡在这里:
我有一个flink工作,负责处理user variables,以通过诸如以下的普罗米修斯记者公开一些自定义业务指标:
目标是拥有这样的普罗米修斯数据:
<job>_<task>_<operator>_my_data_income{website_id="1",country="fr",dc="EUROPE"} 42
我所做的是:
public class MyMetricSink extends RichSinkFunction<AbstractASLogMetricEntity> {
@Override
public void invoke(AbstractASLogMetricEntity value, Context context) {
getRuntimeContext()
.getMetricGroup()
.addGroup( "website_id" , value.getCustomer() )
.addGroup( "country" , value.getCountry() )
.addGroup( "dc" , value.getDatacenter() )
.addGroup( "my_data" )
.counter( "income" )
.inc( value.getIncome() );
}
@Override
public void open(Configuration parameters) {
}
}
不起作用 =>来自AbstractMetricGroup类的警告日志:"Name collision: Group already contains a Metric with the name..."
。
为了使其正常工作,我需要首先在open
方法上创建所有计数器。
因此,我将展示自定义指标的笛卡尔积。
可能在HashMap上存储了120万个计数器。
你们有什么建议可以避免这种情况? 这是正确的方法吗? 是否可以通过在某处使用工作来做我想做的事?
Thx
答案 0 :(得分:0)
这有点超出了flink的度量系统旨在支持的范围。一些尝试使用许多指标的人报告存在问题。
根据最终要实现的目标,您可能会考虑使用连接到Prometheus(或grafana)的influxdb接收器,或者使用Elasticsearch接收器。也许可查询状态更合适。