Flink CDC里flink on yarn模式下,从MySQL同步到Doris报错是为什么啊?同任务在standalone模式下就能顺利运行,不知道是哪里的编码问题?flink run-application -t yarn-application \
-Dyarn.application.name="Sync_Mysql_to_Doris" \
-Dfile.encoding=UTF-8 \
-Dsun.jnu.encoding=UTF-8 \
-Dyarn.provided.lib.dirs="hdfs://wxcluster/flink-dist" \
-Dexecution.checkpointing.interval=30s \
-Dparallelism.default=3 \
-c org.apache.doris.flink.tools.cdc.CdcTools \
hdfs://wxcluster/flink-jars/flink-doris-connector-1.18-1.5.2.jar \
mysql-sync-database \
--database ods \
--job-name sync_mysql_todoris \
--table-prefix ods \
--mysql-conf hostname=hadoop15 \
--mysql-conf username=root \
--mysql-conf password=admin \
--mysql-conf database-name=rhine3_user \
--including-tables "company" \
--sink-conf fenodes=hadoop43:8030,hadoop44:8030,hadoop45:8030 \
--sink-conf username=root \
--sink-conf password=admin \
--sink-conf jdbc-url=jdbc:mysql://hadoop43:9030 \
--sink-conf sink.label-prefix=doris_sink \
--table-conf replication_num=1
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的信息,Flink CDC任务在 standalone 模式 下可以正常运行,但在 Flink on Yarn 模式 下报错。这表明问题可能与以下因素相关:
-Dfile.encoding=UTF-8
和 -Dsun.jnu.encoding=UTF-8
参数。以下是针对可能原因的详细分析和解决方案。
Flink on Yarn 模式下,任务运行在 Yarn 容器中,容器的默认编码可能与 standalone 模式不同。如果数据源(MySQL)或目标端(Doris)涉及非 ASCII 字符(如中文),可能会导致编码不一致问题。
解决方案: - 确保所有节点(包括 Flink Client、Yarn NodeManager 和 TaskManager)的编码设置为 UTF-8。 - 在提交任务时,明确指定编码参数:
-Dfile.encoding=UTF-8 \
-Dsun.jnu.encoding=UTF-8 \
您已经在命令中添加了这些参数,但需要确认 Yarn 容器内的 JVM 是否正确应用了这些设置。可以通过在任务日志中打印 System.getProperty("file.encoding")
来验证。
Flink on Yarn 模式下,任务依赖的 JAR 包需要通过 --classpath
或 yarn.provided.lib.dirs
提供给 Yarn 容器。如果依赖库未正确加载,可能导致类找不到或版本冲突问题。
解决方案: - 确保 flink-doris-connector-1.18-1.5.2.jar
和其他必要的依赖库已上传到 HDFS 路径 hdfs://wxcluster/flink-jars/
。 - 验证 yarn.provided.lib.dirs
参数是否正确指向依赖库路径:
-Dyarn.provided.lib.dirs="hdfs://wxcluster/flink-dist"
Flink on Yarn 模式下,任务的资源分配由 Yarn 管理。如果资源不足或配置不当,可能导致任务失败。
解决方案: - 检查 Yarn 集群的资源使用情况,确保有足够的内存和 CPU 资源。 - 增加 TaskManager 的资源分配,例如:
-Dtaskmanager.memory.process.size=4096m \
-Dtaskmanager.numberOfTaskSlots=3 \
parallelism.default=3
),确保每个 TaskManager 的 Slot 数量足够。MySQL CDC Source 的配置可能在 Yarn 模式下出现问题,例如 server-id
冲突或 Binlog 读取失败。
解决方案: - 确保每个 MySQL CDC 数据源配置了唯一的 server-id
。可以通过动态 Hints 配置 server-id
:
'server-id' = '5400-6400'
ROW
,并且 Binlog 保留时间足够长。Doris Sink 的配置可能在 Yarn 模式下出现问题,例如连接超时或写入失败。
解决方案: - 检查 Doris 的 FE 节点地址和端口是否正确:
--sink-conf fenodes=hadoop43:8030,hadoop44:8030,hadoop45:8030
--sink-conf jdbc-url=jdbc:mysql://hadoop43:9030 \
--sink-conf username=root \
--sink-conf password=admin
replication_num
)和批量写入大小。如果上述方法无法解决问题,建议通过日志进一步排查: - 查看 Flink JobManager 和 TaskManager 的日志,定位具体的错误信息。 - 检查 Yarn 容器的日志,确认是否有资源不足或依赖加载失败的问题。
根据您的描述,问题可能与 编码设置、依赖库加载 或 Yarn 资源配置 有关。建议按照以下步骤逐一排查: 1. 确认 Yarn 容器内的编码设置为 UTF-8。 2. 确保所有依赖库已正确加载到 HDFS 路径。 3. 检查 Yarn 集群的资源分配,增加 TaskManager 的内存和 CPU。 4. 验证 MySQL CDC Source 和 Doris Sink 的配置是否正确。
如果问题仍未解决,请提供具体的错误日志,以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。