【问题标题】:How can I specify that parts of my flink job run in different taskmanagers如何指定我的 flink 作业的一部分在不同的任务管理器中运行
【发布时间】:2021-11-25 17:37:50
【问题描述】:

我有一个包含多个任务管理器的集群。每个任务管理器(每个 TM 1 个任务槽)正在运行不同种类的作业。

我有一个由阶段组成的特定工作,它在 1 个任务管理器中运行(没有重新平衡,因此图形优化器将所有内容合并到同一个线程中),我希望他们的 3 个操作员在 3 个不同的任务管理器中运行,我该怎么做设置吗?

【问题讨论】:

  • 听起来您可能有一个不寻常/有趣的用例。是什么让您认为这会表现得更好?
  • 这是一个检查点非常慢的情况(尝试了对齐和未对齐的障碍)。 UI 显示一些操作员非常忙碌,但不一定背压。鉴于所有的图形运行合并为一个块,我虽然可能将不同的操作员拆分到多个任务管理器中,这样忙碌的操作员可以享受完整 TM 的资源
  • 您是否无法通过增加并行度来横向扩展作业?
  • 不幸的是,在这个特定的用例中,没有我们可以 keyBy 或并行化的部分(我们拟合的 ML 模型的约束)

标签: flink-streaming


【解决方案1】:

您正在寻找的机制是slot sharing groups。这将允许您强制管道的每个阶段进入其自己的插槽。

如果您禁用运算符链接(env.disableOperatorChaining() 将强制每个管道阶段进入其自己的线程)然后在每个插槽使用 2 或 3 个 CPU 内核的 TM 上运行此作业,您的应用程序可能会执行得更好。使用此配置,您将使用共享内存进行阶段之间的通信,而不是网络。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多