Flink Metric用户变量

时间:2019-02-21 23:52:24

标签: apache-flink

我正在使用FLink Metric(1.7),并且被卡在这里:

我有一个flink工作,负责处理user variables,以通过诸如以下的普罗米修斯记者公开一些自定义业务指标:

  • 由customer_id以及按国家/地区和数据中心处理的Protobuf消息数。
  • 按customer_id和国家/地区和类型划分的支出美元数(存储在Protobuf消息中的变量上)。
  • 等。

目标是拥有这样的普罗米修斯数据:

<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

1 个答案:

答案 0 :(得分:0)

这有点超出了flink的度量系统旨在支持的范围。一些尝试使用许多指标的人报告存在问题。

根据最终要实现的目标,您可能会考虑使用连接到Prometheus(或grafana)的influxdb接收器,或者使用Elasticsearch接收器。也许可查询状态更合适。