首页 > 解决方案 > 在 Flink 延迟指标中获取算子名称

问题描述

我正在尝试使用 Flink 导出的延迟指标来估计我的事件的端到端元组延迟(我正在使用 Prometheus 指标报告器)。一切都很好,我可以在我的 Grafana/Prom 仪表板中看到延迟指标。看起来像

flink_taskmanager_job_latency_source_id_source_subtask_index_operator_id_operator_subtask_index_latency{
  host="",instance="",job="",
  job_id="",job_name="",operator_id="",operator_subtask_index="0",
  quantile="0.99",source_id="",source_subtask_index="0",tm_id=""}

我的这个测试工作是一个简单的source->map->sink操作,并行度设置为 1。我可以从 Flink 仪表板看到所有这些都被链接在一起成为一个任务。对于我的一次工作,我看到了两组延迟指标。每组显示所有分位数,如 (.5, .95..)。两组之间唯一不同的是operator_id。我认为这意味着一个operator_id属于map运营商,另一个属于sink.

map vs sink现在我的问题是,仅通过查看指标就没有直观的方法来区分两者(找出哪个 operator_id 是)。所以我的问题基本上是:

  1. 我的假设正确吗?
  2. 区分这两个运算符的最佳方法是什么?我尝试为我的map和分配名称sink。即使这些名称出现在其他指标中,例如numRecordsIn,这些名称也不会出现在延迟指标中。
  3. 有没有办法获得和之间的operator_id映射operator_name

标签: apache-flink

解决方案


当前operator_id是一个哈希值,或者是从输入的哈希值和节点本身计算出来的,或者如果你uid为一个操作符设置了一个 UID,它被计算为murmur3_128这个 id 的哈希值。

请打开一个 JIRA 问题以将此功能添加到 Flink。


推荐阅读