前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >任务运维和数据指标相关的使用

任务运维和数据指标相关的使用

作者头像
袋鼠云数栈
发布2021-05-14 15:00:26
1.2K0
发布2021-05-14 15:00:26
举报
文章被收录于专栏:数栈技术分享

一、实时开发常见问题

1、一个实时计算任务该分配多少资源?

建议:一些简单ETL任务,并且源数据流量在一定范围内, tm个数1、全局并行度1、内存1G。

分析:

  • 全局并行度为1,对于简单ETL任务会有operator chain,在一个task(线程)中运行、减少线程切换、减少消息序列化/反序列化等,该类问题的瓶颈一般在下游写入端。
  • 写入端是瓶颈:一般建议开启批量写入(需要控制批量大小,防止内存溢出)、开启多并行度写入。
  • 如果是单台数据库的瓶颈:开启多个并行度就没法提升性能、一般建议按照一定路由规则写入多台数据库、建议使用分布式数据库(如Hbase:提前建立分区、避免数据热点写入等)。

2、为什么写入Kafka结果中有些分区没有数据?

建议:如果现有topic已经存在,并且是多个分区,结果表并行度设置partition数一样。 分析:

  • 由于Flink写Kafka默认采用的是FixedPartitioner。如果并行度比partition大,则数据都会发送到partition中,但是如果并行度比partition小,则有部分分区是没有数据的。
  • source端,如果并行度小于partition,会取模的方式分给并行度,都会消费到数据。如果并行度大于partition,则会有部分task消费不到数据。

3、为什么和维表关联后任务处理数据的能力变慢?

建议:小数据量不常更新的维表使用ALL模式。大数据量的维表使用使用LRU模式,并且根据数据库不同做相应的处理(比如关系型数据库则建立索引等)。

分析:1.ALL模式启动时候直接将数据全量加载到内存中,每次关联数据不需要查库,没有其他开销。2.异步(async)查询模式

  • LRU异步查询数据库,可以并发地处理多个请求。
  • 根据SQL中的关联字段顺序建立复合索引。
  • 防止关联字段索引失效(关联顺序不对、关联列做计算等)。
  • 如果维表字段个数少,考虑将将多余字段都加入到索引中,减少回表(带来的问题是索引变大)。

4、为什么某些任务提高并行度能提升性能,某些不能?

建议:查看是否数据倾斜,如果是将数据打散。

分析:

  • 源头是否数据倾斜。
  • SQL中是否存在导致倾斜的语句。
  • 登陆到Flink web页面查看。
  • 通过修改SQL解决或者打散groupby字段。

二、实时任务运维

1、配置反压告警

场景:反压导致cp失败,数据出现延迟或者不产出。

排查方法: 1)借助Flink web-ui 提供的的反压功能查找具体的operatorChain。 2)查询Flink metric 'inPoolUsage、outPoolUsage' 来确定具体的反压算子。

2、配置cp失败告警

场景:cp失败导致数据无法真正落地,任务恢复间隔太长。

排查方法:

1)是否存在反压。 2)检查集群负载、IO、CPU、MEM 是否处于高负荷状态。

3、拆分实时任务日志

场景: Flink实时任务运行时间长之后导致日志占用磁盘大,另外一个大的日志文件不利于排查问题。

解决方法:

配置log4j.log的滚动参数,设置日志按日期或者大小滚动生产,并且限制保留的大小。

4、监控任务运行中tm日志

场景: 任务执行中产生的运行日志没有监控,比如网络抖动导致的链接失败等等。

解决方法:

修改Flink自带的log4j jar包中的代码,将异常日志重定向一份到Kafka或ES中,进行后续分析,找到程序中可能存在的隐藏bug。

5、脏数据管理

场景:由于数据源都是从Kafka过来的数据,可能存在数据类型错误、字段名称错误、字段阈值在Flink中超范围等。落库过程中,由于字段类型不匹配、阈值超范围等等情况。

解决方法:

在数据解析和数据落库等代码中,对catch中的数据进行收集。当异常数据达到一定的量时,告警通知。线下离线修正结果数据。

三、通过Metrics定位问题

1.常用内置Metrics介绍

端到端的延时(最大、平均、百分位):

flink_taskmanager_job_latency_source_id_operator_id_operator_subtask_index_latency

输入数据量:

flink_taskmanager_job_task_operator_numRecordsIn

flink_taskmanager_job_task_numBytesIn

输出数据量:

flink_taskmanager_job_task_operator_numRecordsOut

flink_taskmanager_job_task_numBytesOut

反压值:

flink_taskmanager_job_task_isBackPressured

任务buffer:

inPoolUsage、outPoolUsage等其他

2、flinkStreamSql中常用metrics

业务延迟:

flink_taskmanager_job_task_operator_dtEventDelay(单位s)

数据本身的时间和进入flink的当前时间的差值。

各个输入源的脏数据:

flink_taskmanager_job_task_operator_dtDirtyData

从Kafka获取的数据解析失败视为脏数据。

各Source的数据输入TPS:

flink_taskmanager_job_task_operator_dtNumRecordsInRate

Kafka接受的记录数(未解析前)/s。

各Source的数据输入RPS:

flink_taskmanager_job_task_operator_dtNumRecordsInResolveRate

Kafka接受的记录数(未解析前)/s。

各Source的数据输入BPS:

flink_taskmanager_job_task_operator_dtNumBytestInRate

Kafka接受的字节数/s。

Kafka作为输入源的各个分区的延迟数:

flink_taskmanager_job_task_operator_topic_partition_dtTopicPartitionLag

当前Kafka10、Kafka11有采集该指标。

各个输入源RPS:

fink_taskmanager_job_task_operator_dtNumRecordsOutRate

写入的外部记录数/s。

四、FlinkStreamSQL v1.11.1介绍

1.DDL建表语句和FlinkStreamSql v1.10之前版本保持一致。

2.DML语句有两种不同的模式:

dtstack模式:和之前的版本是一致的。

Flink模式:和Flink原生的语法保持一致。

3.主要区别点:和维表join方式不同。

4.如何使用:在提交任务的时候加上 -planner dtstack/flink即可。


本文作者:刘星(花名:吹雪),袋鼠云大数据开发工程师。

本文首发于:数栈研习社

我们在github上有一个flinkx的开源项目,欢迎大家来讨论交流~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档