当前位置: 首页 > article >正文

Flink 实时数据处理中的问题与解决方案

在使用 Flink 进行实时数据加工时,连接 MySQL 数据源是一项常见的任务。本文将详细描述在我使用 Flink 进行 MySQL 数据实时加工时遇到的一些问题,以及如何解决这些问题。

我用的Flink版本是1.20.0

问题一:jar 包版本不匹配

错误信息

在连接 MySQL 时,报错如下:

java.lang.NoSuchMethodError: 'java.lang.String com.mysql.cj.CharsetMapping.getStaticJavaEncodingForMysqlCharset(java.lang.String)'
   at io.debezium.connector.mysql.MySqlConnection$CharsetMappingWrapper.getJavaEncodingForMysqlCharSet(MySqlConnection.java:554) ~[flink-sql-connector-mysql-cdc-3.2.1.jar:3.2.1]
   at io.debezium.connector.mysql.MySqlConnection.getJavaEncodingForMysqlCharSet(MySqlConnection.java:548) ~[flink-sql-connector-mysql-cdc-3.2.1.jar:3.2.1]
   at io.debezium.connector.mysql.MySqlValueConverters.charsetFor(MySqlValueConverters.java:382) ~[flink-sql-connector-mysql-cdc-3.2.1.jar:3.2.1]

原因分析

该错误表明 flink-sql-connector-mysql-cdc 使用的 MySQL 驱动版本与当前项目的 MySQL 驱动版本不匹配。具体来说,com.mysql.cj.CharsetMapping.getStaticJavaEncodingForMysqlCharset 方法是 MySQL 驱动较新版本中引入的,如果使用的是较旧版本的 MySQL 驱动,就会出现 NoSuchMethodError

解决方案

  1. 1. 检查当前项目中使用的 MySQL 驱动版本。

  2. 2. 升级 MySQL 驱动版本,确保与 flink-sql-connector-mysql-cdc 兼容。推荐使用 MySQL Connector/J 8.0.28 或更高版本

  3. 3. 下载与 Flink MySQL CDC 连接器兼容的 JAR 文件:

  • • mysql-connector-j-8.0.33.jar

  • • flink-sql-connector-mysql-cdc-3.2.1.jar

  • • flink-connector-jdbc-3.2.0-1.19.jar

问题二:JDK 版本不匹配

错误信息

java.lang.UnsupportedClassVersionError:io/debezium/connector/mysql/MySqlConnectorConfighasbeencompiledbyamorerecentversionoftheJavaRuntime(class file version 61.0),thisversionoftheJavaRuntimeonlyrecognizesclassfileversionsupto 52.0

原因分析

这个错误表明,Debezium 依赖库是用较新的 JDK 版本编译的,而当前 Java 运行时版本(Java 8)不支持该类文件。Debezium 需要至少 Java 17(版本 61.0)来运行。

解决方案

升级 Java 运行时到 Java 17 或更高版本。可以通过以下命令来下载并安装 Java 17:

wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.8.1+1/OpenJDK17U-jdk_x64_linux_hotspot_17.0.8.1_1.tar.gz
tar xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.8.1_1.tar.gz -C /usr/local/

让 Debezium 使用 Java 17,而其他应用仍使用 Java 8。

系统全局环境变量仍指向 Java 8

修改启动脚本 start-cluster.sh,在脚本顶部添加以下内容,指定需要的 Java 版本路径:

#!/usr/bin/env bash
export JAVA_HOME=/usr/local/jdk-17
export PATH=$JAVA_HOME/bin:$PATH

问题三:Flink 任务异常停止,但仍继续读取 Binlog

在运行 Flink 任务时,即使执行了 ./stop-cluster.sh 停止了 Flink 集群,任务依然继续同步 Binlog。

f00bf1987dd573c5b6d9b361200da314.png

3a86d0b35818b81c44b06b76f95b5fc8.png

可以看到,flink-sql-client-1.20.0.jar 依然在执行。这时,需要手动杀掉进程,才能彻底停止同步。

解决方案

在 Flink 集群停止后,查看进程是否仍在运行:

ps -ef | grep flink-sql-client

手动杀掉对应的进程:

kill -9 <pid>

http://www.kler.cn/a/470038.html

相关文章:

  • 蓝桥杯 第十五届 研究生组 第二题 召唤数学精灵
  • Spring Boot项目中使用单一动态SQL方法可能带来的问题
  • Android Telephony | 协议测试针对 test SIM attach network 的问题解决(3GPP TS 36523-1-i60)
  • nodeJS下npm和yarn的关系和区别详解
  • 数据挖掘——数据预处理
  • 基于transformer的目标检测:DETR
  • 【简博士统计学习方法】3. 统计学习方法的三要素
  • laravel 批量更新:‌INSERT ... ON DUPLICATE KEY UPDATE
  • 移动端自动化测试Appium-java
  • AI大模型的搭建和训练
  • Linux——修改文件夹的所属用户组和用户
  • 【A-Lab】部署手册:开源AAA解决方案 —FreeRADIUS
  • Git - 记录一次由于少输入了一个命令导致的更改丢失
  • HTML——72. 下拉列表分组(下拉列表中多选)
  • STM32 I2C通信外设
  • 用ResNet50+Qwen2-VL-2B-Instruct+LoRA模仿Diffusion-VLA的论文思路,在3090显卡上训练和测试成功
  • frameworks 之 Winscope 工具
  • 5. CSS引入方式
  • 安装和配置 Apache 及 PHP
  • 【蓝桥杯——物联网设计与开发】Part1:GPIO
  • AWS ELB基础知识
  • 题库刷题知识点总结
  • 如何用gunicorn部署python的web应用
  • LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 教程 (4)
  • 三甲医院等级评审八维数据分析应用(八)--数据治理的持续改进与反馈机制篇
  • 桌面运维岗面试三十问