繁体   English   中英

如何在 Flink 中使用多个计数器

[英]How to use multiple counters in Flink

(有点与如何在 Flink 中创建动态指标有关

我有一个 stream events(someid:String, name:String) ,出于监控原因,我需要每个事件 ID 的计数器。 例如,在所有 Flink 文档和示例中,我可以看到计数器是用 map function 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
  }
}

或者基本上我可以实现我自己的计数器,让我通过一个维度? 如果是,如何?

对于这种用例有什么建议或最佳实践吗?

如果保留计数器的缓存太大,那么我认为使用指标不会以满足您要求的方式进行扩展。

几种选择:

  • 使用侧面输出在一些外部、可查询/可视化的数据存储中收集有意义的事件——例如,influxdb。

  • 将信息保存在键入的 state 中,并根据需要使用广播消息触发其相关部分的 output(再次使用侧输出)。

  • 将信息保存在键入的 state 中,并获取定期保存点,然后使用 state 处理器 API 通过查询进行分析。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM