开发者社区 问答 正文

在统一FLINK Application中(一个main class)用FLINK Kafka C

在统一FLINK Application中(一个main class)用FLINK Kafka SQL Connector 都多个Kafka TOPIC, 然后对每一个Kafka Table, 取出一些字段后, insert后续Kafka Table。

任务提交到Yarn后, 为什么每一个SQL语句都会启动一个JobManager? 甚至都一个Kafka Source Table, SINK两次的话, 每一个SINK都是一个独立的Job?

是我的用户不对吗? 请各位指教。

展开
收起
游客kpgrmhlkg4uoy 2021-01-10 17:45:23 573 分享 版权
阿里云 AI 助理回答

在Apache Flink中,JobManager负责协调和管理作业的执行计划,而TaskManager则负责实际的数据处理任务。当你在一个Flink Application中编写多个SQL查询,并且每个查询都涉及到读取Kafka Topic数据并写入到另一个Kafka Topic时,实际上你是在定义多个数据流转换操作,这在Flink内部会被编译成一个或多个独立的执行计划(即job)。

对于你的观察,通常情况下,一个Flink Application提交后,会由一个单一的JobManager实例来管理整个应用中的所有job。如果你看到每个SQL语句或者每个sink操作似乎都启动了一个新的JobManager,这可能是因为配置或者理解上的误会。

这里有几个可能的原因和建议:

  1. 配置问题:检查你的Flink应用配置,确保没有误配置为每个查询或sink操作创建一个新的Flink集群或JobManager。通常,你应该只配置一个JobManager地址用于提交所有作业。

  2. SQL Client模式:如果你是通过Flink SQL CLI或者以类似的方式运行这些SQL查询,每次执行SQL命令实际上可能会被视为一个独立的交互式查询,从而导致看起来像是为每个查询启动了新的JobManager。在生产部署中,应将所有SQL整合到一个脚本或应用程序中统一提交。

  3. 理解误区:可能是对日志或监控信息的误解。有时候,Flink的Web UI或日志输出可能会让人感觉每个操作都有独立的管理器,但实际上它们可能是指向同一个JobManager的不同视图或记录。

  4. 并行度与任务链:虽然不直接关联到JobManager的数量,但高并行度设置或未优化的任务链可能会导致资源分配看起来分散,影响性能感知。确保合理设置并行度,并考虑使用任务链以减少数据在task之间的传输开销。

  5. 版本特性或Bug:确认使用的Flink版本是否存在已知的此类行为。查看官方文档和社区讨论,看是否有其他用户遇到相似问题,并确认是否有相关的修复或工作绕过。

综上所述,正常情况下,一个Flink Application即使包含多个SQL转换,也应该被编排为一个或有限数量的jobs,由单个JobManager管理。如果遇到不符合预期的行为,建议详细审查应用配置、监控日志,并参考最新的Flink文档或寻求社区帮助。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答