使用实践:对接Flink常见问题诊断

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文总结了Hologres对接Flink/Blink时的常见问题以及对应的诊断方法。

本文总结了Hologres对接Flink/Blink时的常见问题以及对应的诊断方法。

Common Sense

1. Hologres性能

写入性能:

列存表  InsertOrIgnore > InsertOrReplace > InsertOrUpdate

行存表  InsertOrReplcae = InsertOrUpdate > InsertOrIgnore


  • InsertOrIgnore: 结果表有主键,实时写入时如果主键重复,丢弃后到的数据
  • InsertOrReplace: 结果表有主键,实时写入时如果主键重复,按照主键更新,如果写入的一行数据不包含所有列,缺失的列的数据补Null
  • InsertOrUpdate: 结果表有主键,实时写入时如果主键重复,按照主键更新,如果写入的一行数据不包含所有列,缺失的列不更新


点查性能: 行存 = 行列混存 > 列存


2.Blink/Flink(VVP)/开源Flink支持程度

产品形态

源表

结果表

维表

Binlog

Hologres Catalog

备注

Flink全托管

支持行、列存

支持行、列存

推荐使用行存

支持

支持

开源Flink1.10

支持行、列存

支持行、列存

-

不支持

不支持

开源Flink1.11

支持行、列存

支持行、列存

推荐使用行存

不支持

不支持

从开源Flink1.11版本开始,Hologres代码已开源,详细使用请参考git

开源Flink1.12

支持行、列存

支持行、列存

推荐使用行存

支持

不支持

Blink独享(贝叶斯)


支持行、列存

支持行、列存

推荐使用行存

Hologres 0.8版本只支持行存

0.9及以上支持行存、列存

推荐使用行存

不支持

已开始逐步下线,推荐使用阿里云Flink全托管

3.Blink/Flink SQL例子:


Blink/VVP/Flink SQL,都是在Flink侧声明一张表,然后根据参数映射至Hologres的一张具体的物理表,所以不支持映射至外表


实时写入慢问题排查流程

步骤1:首先确认写入相关配置

  • 目标表是行存表,还是列存表,还是行列混存
  • Insert模式是InsertOrIgnore、InsertOrUpdate还是InsertOrReplace
  • 确认表的Table group及Shard Count

步骤2:看监控指标的实时写入延迟。

如果平均写入延迟偏高,在百毫秒甚至秒级别,通常便是后端达到了写入瓶颈,这时候有若干种可能:

  1. 使用了列存表的InsertOrUpdate,即局部更新,且流量较高,这种情况下会导致整体实例的CPU负载和写入延迟偏高。解决办法:这种情况下通常建议使用行存表,1.1版本后可以选择行列混存表
  2. 去监控查看整体实例的CPU负载,整体水位接近100%,但没有列存表的局部更新,那么通常情况下是由于高qps的查询,或者本身写入量较高导致的,解决办法:该情况下可以考虑扩容实例资源
  3. 确认是否有不断的Insert into select from,触发了该表的Bulkload写入,当前Bulkload写入会Block实时写入,解决办法:将Bulkload写入也转成实时写入,或者错峰执行

排查步骤3: 看是否有数据倾斜

通过一些sql看下是否有数据倾斜,或者找值班在后台查看是否shard上有数据倾斜。

select count(1) from t1 group by hg_shard_id;

解决办法:修改Distribution key

排查步骤4:后端压力

如果上述步骤检查下来没有明显问题,写入性能突然下降,一般情况是后端集群压力比较大,存在瓶颈。可以找值班确认情况

排查步骤5: 查看Blink/Flink侧的反压情况

如果上述步骤排查下来,发现Hologres侧没有明显的异常,通常情况下是客户端慢了,也就是Blink/Flink侧本身就慢了,这时候可以确认是否是Sink节点反压了。

如果作业只有一个节点,就无法看出是否反压了,这时候可以将Sink节点单独拆开再观察。具体可以请联系Flink技术支持排查。


写入的数据有问题排查流程

这种情况通常是由于数据乱序引起的,比如相同主键的数据分部在不同的Flink Task上,写入的时候无法保序。需要确认Flink SQL的逻辑,最后写出到Hologres的时候,是否按照Hologres表的主键进行Shuffle了。


维表查询问题排查流程

维表join和双流Join

对于读Hologres的场景,需要首先确认用户是否使用对了,是否错将双流Join当成维表Join来使用了。以下是Hologres作为维表的用法,如果少了以下关键字,则会变成双流Join!

维表查询

1. 首先确认维表存储格式

确认是行存表、列存表还是行列混存

2. 维表查询延迟高

维表的使用,最常见的问题就是Flink/Blink侧用户反馈Join节点有反压,导致整个作业的吞吐上不去

排查步骤1: 确认Flink维表Join的模式

当前Hologres Flink Connector的维表Join功能支持同步和异步模式两种,异步模式性能要优于同步模式,具体需要看Flink Sql进行区分,以下是一个开启异步维表查询功能的SQL实例:

注意:这里的async参数,该参数的默认值为False,即如果Flink SQL没有该参数,则没有开启异步模式,可以建议开启异步模式。

CREATE TABLE hologres_dim(

id INT,

len INT,

content VARCHAR

) with (

 'connector'='hologres',

 'dbname'='',  --Hologres的数据库名称。

 'tablename'='',  --Hologres用于接收数据的表名称。

 'username'='',  --当前阿里云账号的AccessKey ID。

 'password'='',  --当前阿里云账号的AccessKey Secret。

 'endpoint'=''  --当前Hologres实例VPC网络的Endpoint。

 'async' = 'true'--异步模式

);

排查步骤2: 确认后端查询延迟

同实时写入一样,依旧去监控界面查看延迟:


  • 确认是否是列存表在做维表,列存表的维表在高QPS场景下开销很高。
  • 如果是行存表,且延迟高,通常情况下是实例整体负载较高导致的,需要进行扩容。


排查步骤3: 确认Join的Key是否是Hologres表的主键

自VVR 4.x (Flink 1.13) 版本开始,Hologres Connector基于Holo Client实现了Hologres表的非主键查询,这种情况通常性能会比较差、实例负载也比较高,尤其是建表没有特别优化过的情况。这时候需要引导优化表结构,最常见的就是将Join的key设置成Distribution Key,这样就能实现Shard Pruning。


排查步骤4 查看Blink侧的反压情况

同写入,同样可以排查是否是Join节点导致的反压。


常见问题

ERPC_ERROR_TIMEOUT或者ERPC CONNECTION CLOSED

出现如下报错:com.alibaba.blink.store.core.rpc.RpcException: request xx UpsertRecordBatchRequest failed on final try 4, maxAttempts=4, errorCode=3, msg=ERPC_ERROR_TIMEOUT,

报错原因:一般是写入压力太大写入失败或者集群比较繁忙,可以观察Holo实例的CPU负载是否打满, CONNECTION CLOSED可能是负载过大导致后端节点挂掉了,OOM或者Coredump。

解决办法:如果是偶尔一次可以正常重试可以忽略;如果频繁出现可以联系值班排查原因。


BackPresure Exceed Reject Limit

报错原因:通常是Hologres后端写入压力过大,导致Memtable来不及刷盘导致写入失败。

解决办法:如偶发失败可忽略该问题,或者Sink加上参数rpcRetries = '100' 来调大写入重试次数。如果一直报该错误,需要联系Hologres值班同学确认后端实例状态。


The requested table name xxx mismatches the version of the table xxx from server/org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.Caused by: java.net.SocketTimeoutException: Read timed out

报错原因:通常是用户做了Alter Table导致Blink写入所带表的Schema版本号低于Server端版本号导致的,并且超过了客户端的重试次数。

解决办法:

  1. 如果不是经常发生可以忽略该报错
  2. 若是重试多次还是报错,请联系值班同学处理


Failed to query table meta for table

报错原因:对于该报错,一种可能是用户读写了一张Hologres的外表,Hologres Connector不支持读写外表。

如果不是,可能是Hologres实例 Meta出现了问题,联系Hologres值班同学确认


Cloud authentication failed for access id

报错原因:该报错通常是用户配置的AK信息不对,或者用户没有添加账号至Hologres实例。

解决办法:

1.检查当前账户的access id 和access key填写是否正确,一般是access key错误或者有空格。

2.检查不出原因可以用当前ak连接holoweb(使用账号密码方式登录),在测试联通性时看报错是什么,还是一样的报错说明access key有问题,若是报错没有FATAL:role“ALIYUN$xxxx“does not exist,说明账号没有实例的权限,需要管理员给授权。


Hologres维表Join不到数据

确认用户的Hologres维表是不是使用了分区表,Hologres维表暂不支持分区表‘


Modify record by primary key is not on this table

报错原因:实时写入的时候选择了更新模式,但是hologres的结果表没有主键


shard columns count is no match

报错原因:用户写入Hologres的时候,没有写入完整的distribution key的列(默认是主键)


Full row is required, but the column xxx is missing

报错原因:Hologres 老版本的报错信息不是很明显,这个通常是用户没有写某列数据,而那一列是not nullable的

VVP用户读写Hologres导致JDBC连接数暴涨

报错原因:VVP Hologres Connector读写Hologres(除了Binlog),采用JDBC模式,最大占用读写holo表数量*并发度 * connectionSize(VVP表的参数,默认为3)个连接

解决办法:合理规划任务连接数,降低并发度或者connectionSize。如无法调低并发度或connectionSize,可以为表设置参数useRpcMode = 'true' 切回至Rpc模式。

Blink/VVP用户读写Hologres报错显示无法连接Hologres

报错原因:弹外Blink/VVP集群默认访问公网很慢或者无法访问。

解决办法:需要保证和Hologres实例在相同Region,且使用VPC的Endpoint


Hologres rpc mode dimension table does not support one to many join

Blink/VVP的rpc mode维表必须是行存表,且join的字段必须是主键,抛此异常的原因往往是以上两个条件不满足;jdbc模式没有这个要求,但是维表仅推荐使用行存表或者行列共存表。

DatahubClientException

Caused by: com.aliyun.datahub.client.exception.DatahubClientException: [httpStatus:503, requestId:null, errorCode:null, errorMessage:{"ErrorCode":"ServiceUnavailable","ErrorMessage":"Queue Full"}]

大量消费binlog作业由于某种原因同时重启导致线程池被占满,可以分批次恢复作业。


Error occurs when reading data from  datahub

Error occurs when reading data from  datahub, msg: [httpStatus:500, requestId:xxx, errorCode:InternalServerError, errorMessage:Get binlog timeout.]

可能是binlog每条数据太大,乘上攒批之后,每个rpc请求的大小超过限制,在每行数据字段较多且有很长的字符串等字段时,可以减小攒批配置。

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
5月前
|
存储 监控 数据挖掘
京东物流基于Flink & StarRocks的湖仓建设实践
本文整理自京东物流高级数据开发工程师梁宝彬在Flink Forward Asia 2024的分享,聚焦实时湖仓的探索与建设、应用实践、问题思考及未来展望。内容涵盖京东物流通过Flink和Paimon等技术构建实时湖仓体系的过程,解决复杂业务场景下的数据分析挑战,如多维OLAP分析、大屏监控等。同时,文章详细介绍了基于StarRocks的湖仓一体方案,优化存储成本并提升查询效率,以及存算分离的应用实践。最后,对未来数据服务的发展方向进行了展望,计划推广长周期数据存储服务和原生数据湖建设,进一步提升数据分析能力。
415 1
京东物流基于Flink & StarRocks的湖仓建设实践
|
3月前
|
资源调度 Kubernetes 流计算
Flink在B站的大规模云原生实践
本文基于哔哩哔哩资深开发工程师丁国涛在Flink Forward Asia 2024云原生专场的分享,围绕Flink On K8S的实践展开。内容涵盖五个部分:背景介绍、功能及稳定性优化、性能优化、运维优化和未来展望。文章详细分析了从YARN迁移到K8S的优势与挑战,包括资源池统一、环境一致性改进及隔离性提升,并针对镜像优化、Pod异常处理、启动速度优化等问题提出解决方案。此外,还探讨了多机房容灾、负载均衡及潮汐混部等未来发展方向,为Flink云原生化提供了全面的技术参考。
193 9
Flink在B站的大规模云原生实践
|
4月前
|
SQL 存储 NoSQL
Flink x Paimon 在抖音集团生活服务的落地实践
本文整理自抖音集团数据工程师陆魏与流式计算工程冯向宇在Flink Forward Asia 2024的分享,聚焦抖音生活服务业务中的实时数仓技术演变及Paimon湖仓实践。文章分为三部分:背景及现状、Paimon湖仓实践与技术优化。通过引入Paimon,解决了传统实时数仓开发效率低、资源浪费、稳定性差等问题,显著提升了开发运维效率、节省资源并增强了任务稳定性。同时,文中详细探讨了Paimon在维表实践、宽表建设、标签变更检测等场景的应用,并介绍了其核心技术优化与未来规划。
407 10
Flink x Paimon 在抖音集团生活服务的落地实践
|
4月前
|
资源调度 Kubernetes 调度
网易游戏 Flink 云原生实践
本文分享了网易游戏在Flink实时计算领域的资源管理与架构演进经验,从Yarn到K8s云原生,再到混合云的实践历程。文章详细解析了各阶段的技术挑战与解决方案,包括资源隔离、弹性伸缩、自动扩缩容及服务混部等关键能力的实现。通过混合云架构,网易游戏显著提升了资源利用率,降低了30%机器成本,小作业计算成本下降40%,并为未来性能优化、流批一体及智能运维奠定了基础。
223 9
网易游戏 Flink 云原生实践
|
6月前
|
存储 运维 监控
阿里妈妈基于 Flink+Paimon 的 Lakehouse 应用实践
本文总结了阿里妈妈数据技术专家陈亮在Flink Forward Asia 2024大会上的分享,围绕广告业务背景、架构设计及湖仓方案演进展开。内容涵盖广告生态运作、实时数仓挑战与优化,以及基于Paimon的湖仓方案优势。通过分层设计与技术优化,实现业务交付周期缩短30%以上,资源开销降低40%,并大幅提升系统稳定性和运营效率。文章还介绍了阿里云实时计算Flink版的免费试用活动,助力企业探索实时计算与湖仓一体化解决方案。
767 3
阿里妈妈基于 Flink+Paimon 的 Lakehouse 应用实践
|
6月前
|
存储 SQL Java
Flink CDC + Hologres高性能数据同步优化实践
本文整理自阿里云高级技术专家胡一博老师在Flink Forward Asia 2024数据集成(二)专场的分享,主要内容包括:1. Hologres介绍:实时数据仓库,支持毫秒级写入和高QPS查询;2. 写入优化:通过改进缓冲队列、连接池和COPY模式提高吞吐量和降低延迟;3. 消费优化:优化离线场景和分区表的消费逻辑,提升性能和资源利用率;4. 未来展望:进一步简化用户操作,支持更多DDL操作及全增量消费。Hologres 3.0全新升级为一体化实时湖仓平台,提供多项新功能并降低使用成本。
479 1
Flink CDC + Hologres高性能数据同步优化实践
|
6月前
|
SQL 存储 调度
基于 Flink 进行增量批计算的探索与实践
基于 Flink 进行增量批计算的探索与实践
123 1
基于 Flink 进行增量批计算的探索与实践
|
6月前
|
存储 运维 BI
万字长文带你深入广告场景Paimon+Flink全链路探索与实践
本文将结合实时、离线数据研发痛点和当下Paimon的特性,以实例呈现低门槛、低成本、分钟级延迟的流批一体化方案,点击文章阅读详细内容~
|
6月前
|
SQL 弹性计算 DataWorks
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
Flink CDC 在阿里云 DataWorks 数据集成入湖场景的应用实践
235 6
|
6月前
|
SQL 存储 HIVE
鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目
鹰角基于 Flink + Paimon + Trino 构建湖仓一体化平台实践项目
356 2