Scala 如何在Flink中使用多个计数器
(有点像) 我有一个Scala 如何在Flink中使用多个计数器,scala,apache-flink,metrics,Scala,Apache Flink,Metrics,(有点像) 我有一个事件流(someid:String,name:String),出于监控的原因,我需要一个计数器每个事件ID。 在所有的Flink文档和示例中,我可以看到计数器是用map函数的open中的名称初始化的 但在我的情况下,我不能初始化计数器,因为我需要每个eventId一个计数器,而且我事先不知道该值。此外,我理解每次在MapFunction的map()方法中通过偶数时创建一个新计数器的成本有多高。 最后,我不能保留计数器的“缓存”,因为它太大了 理想情况下,我想要这样的东西: c
事件流(someid:String,name:String)
,出于监控的原因,我需要一个计数器每个事件ID。
在所有的Flink文档和示例中,我可以看到计数器是用map函数的open
中的名称初始化的
但在我的情况下,我不能初始化计数器,因为我需要每个eventId一个计数器,而且我事先不知道该值。此外,我理解每次在MapFunction的map()
方法中通过偶数时创建一个新计数器的成本有多高。
最后,我不能保留计数器的“缓存”,因为它太大了
理想情况下,我想要这样的东西:
class Event(id: String, name: String)
class ExampleMapFunction extends RichMapFunction[Event, Event] {
@transient private var counter: Counter = _
override def open(parameters: Configuration): Unit = {
counter = new Counter()
}
override def map(event: Event): Event = {
counter.inc(event.id)
event
}
}
或者基本上我可以实现我自己的计数器,让我通过一个维度?如果是,如何进行
对于这种用例有什么建议或最佳实践吗?如果保留计数器的缓存太大,那么我认为使用度量不会以满足您需求的方式扩展 有几个备选方案:
- 使用端输出在一些外部可查询/可视化数据存储中收集有意义的事件,例如XDB
- 将信息保持在键控状态,并根据需要使用广播消息触发信息相关部分的输出(再次使用侧输出)
- 将信息保持在键控状态,并定期获取保存点,然后使用状态处理器API通过查询进行分析