Flink报错问题之写入Hive报错如何解决

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。

问题一:flink sql消费kafka join普通表为何会性能爬坡?

大家好,

flink sql消费kafka join普通表是会性能爬坡吗?

背景是flink 1.12.0 使用flink sql在yarn per-job发布,消费kafka topic=trades,然后join 数据库里的维表 shop_meta 现在发现每次重启flink sql job,或上游突然增加大量写入时,flink sql的消费速度总是慢慢增加上来,这样就会造成上游积压,等flink sql消费速度上来之后才能慢慢把积压消费完毕。

更多的信息: trades是avro格式,大概有10个字段,但其中有一个字段full_info是一个大json,我这边写了处理json的UDF,就为每个字段都需要处理那个大json。最后生成将近25个字段写下游kafka shop_meta是普通表,没有时间字段,总共有12个字段,30000行左右。整个表数据和索引加起来是16MB;更新频率非常低。现在读jdbc的配置为lookup.cache.max-rows = 20000;lookup.cache.ttl = 2h;scan.fetch-size = 1000 SQL示例如下

SELECT
t.shop_id, s.shop_name,
...
CAST(json_path_to_str(full_info, '$.response.trade.price', '0.0') AS DOUBLE) price, "
CAST(json_path_to_str(full_info, '$.response.trade.payment', '0.0') AS DOUBLE) payment, "
CAST(json_path_to_str(full_info, '$.response.trade.total_fee', '0.0') AS DOUBLE) total_fee, "
CAST(json_path_to_str(full_info, '$.response.trade.discount_fee', '0.0') AS DOUBLE) discount_fee, "
CAST(json_path_to_str(full_info, '$.response.trade.adjust_fee', '0.0') AS DOUBLE) adjust_fee, "
CAST(json_path_to_str(full_info, '$.response.trade.received_payment', '0.0') AS DOUBLE) received_payment, "
CAST(json_path_to_str(full_info, '$.response.trade.post_fee', '0.0') AS DOUBLE) post_fee, "
json_path_to_str(full_info, '$.response.trade.receiver_name', '') receiver_name, "
json_path_to_str(full_info, '$.response.trade.receiver_country', '') receiver_country, "
json_path_to_str(full_info, '$.response.trade.receiver_state', '') receiver_state, "
json_path_to_str(full_info, '$.response.trade.receiver_city', '') receiver_city, "
FROM trades t LEFT JOIN shop_meta FOR SYSTEM_TIME AS OF t.proc_time AS s
ON t.shop_id=s.shop_id

考虑到整个job里只有简单的ETL,不涉及中间状态,flink对task_manager的配置为 taskmanager.memory.managed.fraction = 0.1 taskmanager.memory.network.fraction = 0.05 实际运行中,task_manager总内存为6G,6 slots,最大并行度为6,所以只有一个task manager。 在监控页面看到task heap=4.13 GB,实际使用heap_used指标比较稳定。 在监控页面中可以看到随着消费速度越来越快,task manager CPU利用率越来越高,KafkaConsumer_topic_partition_currentOffsets - KafkaConsumer_topic_partition_committedOffsets 也在随着消费速度上涨,新生代GC次数和时间也在上涨 当消费完积压后,前两个指标降低,新生代GC趋于平稳

请问有什么调查或解决的方向吗?*来自志愿者整理的flink邮件归档



参考答案:

为了测试到底是因为SQL里的parse json导致性能瓶颈,还是因为join维表 我在SQL中去掉join维表之后重启,发现只需要70s即可达到消费速度=3.8k,整个因为重启导致的积压被压缩到3分钟

所以应该是维表JOIN的问题 现在连的数据库是TiDB,连接串属性为 useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370040?spm=a2c6h.13066369.question.8.33bf585fyxGC7d



问题二:flink mysql cdc疑问

大佬们,有几个问题想问下,关于flink mysql cdc 1.flink mysql cdc一个任务同步同一个mysql实例的多个表时,会不会创建多个同步管道,读取全部的binlog数据在客户端过滤,可能造成mysql 流量过大呢?*来自志愿者整理的flink邮件归档



参考答案:

其实我不是和别建议直接用CDC,一般用分布式存储的消息去解决,或者你做多个从库,从从库拉取binlog来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370041?spm=a2c6h.13066369.question.7.33bf585fn7Im55



问题三:flink 1.12.2 sql-cli 写入Hive报错 is_generic

当配置好HiveCatalog后, SQL-Cli 也可以查到hive库表信息 创建kafka表:

create table test.test_kafka( word VARCHAR ) WITH ( 'connector' = 'kafka', 'topic' = 'xx', 'scan.startup.mode' = 'latest-offset', 'properties.bootstrap.servers' = 'xx', 'properties.group.id' = 'test', 'format' = 'json', 'json.ignore-parse-errors' = 'true' ); 在 Hive里面可以查到改表 hive > DESCRIBE FORMATTED test_kafka ........... is_generic true .........

但是我在 Flink SQL > select * from test.test_kafka; 报错: org.apache.flink.table.api.ValidationException: Unsupported options found for connector 'kafka'. Unsupported options: is_generic Supported options: connector format json.fail-on-missing-field json.ignore-parse-errors*来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370042?spm=a2c6h.13066369.question.10.33bf585f0c3xAA



问题四:設置look up table source

hi all,

flink在使用temporal join只支持look up table source。我在做單元測試的時候, 下載了hive 表裡面的數據,嘗試了用filesystem註冊temporal table。可是後來發現file system不支持lookup。查詢了文檔( https://ci.apache.org/projects/flink/flink-docs-stable/dev/table/legacySourceSinks.html),用戶可以自定義look up table source。可是我找不到類似用csv設置look up table source的方法。所以想請問有什麼例子我可以參考嗎?

Regards,*来自志愿者整理的flink邮件归档



参考答案:

你可以参考 JdbcDynamicTableSource [1] 这个 table source 实现了 LookupTableSource 接口,你需要写一个类似 JdbcRowDataLookupFunction 即可 的函数即可。

祝好, Leonard [1] https://github.com/apache/flink/blob/4be9aff3eccb3808df1f10ef7c30480ec11a9cb0/flink-connectors/flink-connector-jdbc/src/main/java/org/apache/flink/connector/jdbc/table/JdbcDynamicTableSource.java#L70 来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370043?spm=a2c6h.13066369.question.11.33bf585fTOAPCU



问题五:flink1.11版本 -C 指令并未上传udf jar包

执行指令:flink run

-m yarn-cluster

-C file:///xxxx/flink-demo-1.0.jar

xxxxx

在Client端能够构建成功jobgraph,但是在yarn上会报UDF类找不到。我看Classpath中并未上传该JAR包*来自志愿者整理的flink邮件归档



参考答案:

-C 不会上传对应路径下的 jar,最终会被添加到集群的 classpath 中,需要运行的机器对应的路径下要有同样的Jar包才可以。 可以放在私服或者oss的服务,通过 http 的方式加载的 udf jar -C "http://host:port/xxx.jar" 来自志愿者整理的flink邮件归档



关于本问题的更多回答可点击进行查看:

https://developer.aliyun.com/ask/370044?spm=a2c6h.13066369.question.12.33bf585fcrDQUh

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
1月前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
52 2
|
1月前
|
Java 关系型数据库 MySQL
Flink CDC有见这个报错不?
【2月更文挑战第29天】Flink CDC有见这个报错不?
22 2
|
1月前
|
存储 关系型数据库 MySQL
Flink CDC产品常见问题之写hudi的时候报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
资源调度 关系型数据库 测试技术
Flink CDC产品常见问题之没有报错但是一直监听不到数据如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
缓存 监控 Java
Flink CDC产品常见问题之flink集群jps命令报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
Oracle 关系型数据库 MySQL
Flink CDC产品常见问题之用superset连接starrocks报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
Oracle 关系型数据库 MySQL
flink cdc 增量问题之增量数据会报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
4月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
101 1
|
4月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
78 0
|
6月前
|
SQL 分布式计算 大数据
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 入门
73 0

相关产品

  • 实时计算 Flink版