在aggregateFunction 不能使用metrics
- 在aggregateFunction 由于没有继承richFunction, 没有open方法,
无法使用getRuntimeContext()获取RuntimeContext对象
- 使用richAggregateFunction,存在open方法和getRuntimeContext()
- 结果报错:
Exception in thread "main" java.lang.UnsupportedOperationException: This aggregation function cannot be a RichFunction. at org.apache.flink.streaming.api.datastream.WindowedStream.aggregate(WindowedStream.java:289)
- 此问题暂时 没有解决方法
-
通过flink官网 可以得知,metrics的使用是需要使用继承RichFunction的类
-
使用getRuntimeContext().getMetricGroup()将metrics注册到flink
-
由上述问题可知,使用richAggregateFunction启动会抛出异常,This aggregation function cannot be a RichFunction
最后结论
放弃在aggregateFunction中收集metrics
,aggregate只做数据的简单处理后将数据收集成一个batch,后面接一个RichFlatMapFunction调用外部方法 ,在这获取RuntimeContext收集数据的metrics