Flink CDC本地测试 设置 env.setParallelism(4) 就不能检测cdc,设置为1就能检测到,这是为啥?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Flink CDC进行本地测试时,设置 env.setParallelism(4) 无法检测到CDC数据,而设置为 env.setParallelism(1) 却可以正常检测到,这种现象通常与Flink作业的并行度配置以及CDC源表的实现机制有关。以下是详细的原因分析和解决方案:
CDC源表的单线程限制
Source复用未开启
WITH参数或SQL Hint配置),每个CDC源表会独立创建一个连接到数据库的Binlog读取器。在这种情况下,多线程可能导致多个子任务竞争同一个Binlog位点,从而引发冲突或数据丢失。本地调试环境的限制
调整并行度
env.setParallelism(1);
开启Source复用
server-id范围,确保多个子任务共享同一个Binlog读取器:SELECT * FROM source_table /*+ OPTIONS('server-id'='123456-123457') */;
with参数配置server-id范围:MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
.serverId("123456-123457")
.build();
检查本地调试数据量
升级Flink版本
通过以上调整,您可以解决因并行度设置不当导致的CDC数据检测问题。如果问题仍然存在,建议进一步检查日志中的错误信息,并参考相关文档排查具体原因。