记录解决flink通过pushgateway导致指标缺失问题

最近在做一个flink程序的监控,技术选型以后最终选择将flink指标通过pushgateway来写道prometheus中,程序架构如下:

JobManager和TaskManager进程都独立将指标push给PushGateway,然后Prometheus再定时去抓去PushGateway中指标,指标进Prometheus以后再通过grafana配置监控图。

flink配置参数如下:

metrics.reporter.promgateway.class: "org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter"
metrics.reporter.promgateway.host: "pushgateway"
metrics.reporter.promgateway.port: "9091"
metrics.reporter.promgateway.jobName: "jobName"
metrics.reporter.promgateway.randomJobNameSuffix: "false"
metrics.reporter.promgateway.deleteOnShutdown: "true"
metrics.reporter.promgateway.interval: "10 SECONDS"
metrics.reporter.promgateway.groupingKey: "instanceId=1"

其中flink默认的randomJobNameSuffix为true flink会在jobName后拼接一个32位长度的字符串,具体源码见

org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporterFactory#createMetricReporter

由于配置监控图时候需要用到jobName所以就将该属性改为false了,刚改完以后看pushgateway那边以及grafana感觉没啥问题,后来发现很多指标莫名其妙断断续续的,自己将两个指标放到一起观察才发现问题,如下图:

 基本上JobManager和TaskManager图是互补的,两个图中的数据加起来才是完整的,为了验证这个猜测拿grafana将指标放一起,取最近几分钟数据观察一下:

 图中每一个点之间间隔是15s,更加确定了上述猜想,即同一时刻多个进程写到PushGateway中的数据是互相覆盖掉的,查找PushGateway相关文档以后才知道在JobName和GroupingKey完全一样的情况下会出现这样的问题,这会才知道为啥Flink要提供randomJobNameSuffix这个参数,并且默认为true了。

所以最终结局办法就是将metrics.reporter.promgateway.randomJobNameSuffix参数改为true,然后查询的地方通过metrics.reporter.promgateway.groupingKey中的instanceId来查询。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要解决Flink写入Kudu性能低的问题,可以考虑以下几点: 1. 优化Flink的作业设置:可以通过调整Flink作业的并行度和缓冲区大小来提高写入性能。 2. 优化Kudu表的设计:可以通过合理设计Kudu表的分区键和索引来提高写入性能。 3. 使用Kudu异步写入API:可以通过使用Kudu的异步写入API来提高写入性能。 4. 增加Kudu集群的资源:如果Kudu集群的资源不足,可以通过增加机器数量或者升级机器配置来提高性能。 希望这些建议能帮助你解决Flink写入Kudu性能低的问题。 ### 回答2: Flink 是一款快速、可靠的流式处理框架,但在将数据写入 Kudu 时可能会遇到性能低的问题。以下是解决这个问题的一些建议: 1. 增加并行度:增加 Flink 作业的并行度可以提高写入 Kudu 的性能。可以通过调整 Flink 作业的并行度参数,使多个任务并行执行,以充分利用计算资源。 2. 批量写入:将 Flink 的输出数据批量写入 Kudu,而不是逐条写入。可以在 Flink 中缓冲数据,当数据达到一定大小或者一定时间间隔时批量写入 Kudu,以减少写入操作的开销。 3. 调整 Kudu 配置:根据具体场景和硬件资源,适当调整 Kudu 的配置参数,例如副本数、分片数等,以优化 Kudu 的性能。 4. 使用异步写入:Flink 可以使用异步写入来提高写入 Kudu 的性能。可以设置 Flink 的异步方式,将数据写入 Kudu 的缓冲队列,然后异步写入 Kudu,以提高吞吐量。 5. 设置适当的参数:在 Flink 中,可以设置一些参数来优化 Kudu 写入的性能,例如调整批处理大小、缓冲时间等。 6. 数据分区:将数据按照某种规则进行分区,将不同分区的数据写入不同的 Kudu 表,以减轻单表写入的压力,提升性能。 总之,针对 Flink 写入 Kudu 性能低的问题,我们可以通过增加并行度、批量写入、调整配置、使用异步写入、设置适当的参数和数据分区等方法来提高性能。需要根据具体的场景和需求进行调优,以达到较好的性能表现。 ### 回答3: 要解决Flink写入Kudu性能低的问题,可以采取以下措施: 1. 调整Flink和Kudu的并发度:通过调整Flink和Kudu的并发度来提高写入性能。可以增加Flink作业的并发度,使其能够同时处理更多的数据,并将写入操作分散到多个Kudu服务器上,从而提高写入性能。 2. 使用批量写入:使用批量写入的方式可以减少网络开销和资源消耗,提高写入性能。可以在Flink中将数据累积到一定量后再一次性写入Kudu,而不是一条一条地写入。如果需要实时写入,可以设置适当的批量写入间隔。 3. 调优Kudu的配置:可以根据实际情况调优Kudu的配置,以提高写入性能。例如,可以调整Kudu的服务器配置、调整写入相关的参数(如WalReplicationFactor、FlushMode等),或者调整Kudu表的分布和分区策略,以提高写入性能。 4. 使用异步写入:可以使用异步写入的方式将写入操作提交到Kudu客户端的线程池中进行处理,从而减少主线程的等待时间,提高写入性能。可以在Flink中使用异步IO或者自定义异步写入逻辑来实现。 5. 避免频繁的连接和断开:频繁的连接和断开会增加额外的开销和延迟,降低写入性能。可以考虑在Flink中使用连接池来管理Kudu连接,或者保持长连接的方式来减少连接和断开的次数,从而提高写入性能。 总之,通过调整Flink和Kudu的并发度、使用批量写入、调优Kudu的配置、使用异步写入和避免频繁的连接和断开等方式,可以有效解决Flink写入Kudu性能低的问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值