我有一个 Flink 作业,它从 Kafka (v0.9) 读取并写入 Redis。我想监控 Kafka 发出的records-consumed-rate
和records-lag-max
指标,Flink 应该能够转发这些指标。在这种情况下,我转发给Datadog。
当我以并行度 1 启动作业时,我看到这个指标发出得很好。但是,如果我使并行度大于 1,则不再转发此指标。当并行度> 1 时,作业正在运行,因为我可以看到正在写入 Redis 的条目。
我在 AWS EMR 上运行 Flink (v1.6.2):
- 主节点:(1)m4.大
- 核心节点:1 个 C4.2x大型
- 任务经理数: 1
- slots.per.task.manager: 7
- 并行度:7
并行性由 streamExecutionEnvironment.setParallelism() 设置。每个 Kafka 使用者都使用相同的 group.id 和唯一的 client.id 进行实例化。
DD 代理在群集上运行良好。正在发出许多指标,例如已完成检查点的数量和正常运行时间等。
如果并行度大于 1,Flink 有什么理由不从 Kafka 转发这些指标吗?
更新:我还尝试从Redis RichSinkFunction发送自定义DD指标(counter.inc()
)。当并行度 = 1 时,指标发送正常。当并行度 = 7 时,不会发送指标,但会调用它(添加了调试行)。因此,它似乎不仅限于来自 Kafka 的转发指标。
问题是HTTPRequest的大小越大,并行性就越高,这是有意义的。我正在返回"请求实体太大",但是异常未正确注销,所以我错过了它。
似乎 Flink DatadogHttpReporter 在构建请求时没有考虑请求的大小。我修改了报告器,将每个请求的指标数限制为 1000。现在指标显示得很好。