开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

大佬们,请教一个问题,flink版本是1.15.1 ha部署,算子设置了多并发 ,如何确保每?

大佬们,请教一个问题,flink版本是1.15.1 ha部署,算子设置了多并发 ,如何确保每一个并发都运行在同一台机器上,现在的效果是这样的,会有某一个并发运行到了另一台机器上,这种情况在1.11的时候还没有?image.png

展开
收起
真的很搞笑 2023-06-11 22:20:13 105 0
5 条回答
写回答
取消 提交回答
  • 相同并行度的one to one操作,Flink这样相连的算子链接在一起形成一个task,原来的算子成为里面的一部分。这样是可以运行在同一台机器上。
    image.png

    ——参考链接

    2024-01-25 16:45:18
    赞同 1 展开评论 打赏
  • 全局有序通常难以保证,因为Flink的设计是为了实现高吞吐量和容错性,并不保证所有数据流全局有序。但在某些特定场景下,例如基于时间窗口的时间排序,可以通过设置时间驱动的窗口来达到一定程度上的全局有序。

    2024-01-21 21:35:08
    赞同 展开评论 打赏
  • 某政企事业单位安全运维工程师,主要从事系统运维及网络安全工作,多次获得阿里云、华为云、腾讯云征文比赛一二等奖;CTF选手,白帽,全国交通行业网络安全大赛二等奖,全国数信杯数据安全大赛银奖,手握多张EDU、CNVD、CNNVD证书。

    要在Apache Flinck集群里确保每个算子的多个并发都在同一台物理机上运行,你需要做以下几个步骤:

    Step 1 - 确保启用TaskManager内存限制功能

    在启动 TaskManager 的时候加入 -Dtaskmanager.memory.process.size= 参数,其中 表示 TaskManager 可用的最大内存量。

    Step 2 - 分配足够的内存给每个并发

    根据你的需求,合理分配每个并发所需的内存大小。一般来说,每个并发都需要一定的内存空间来存储中间结果或缓冲区等临时数据。所以可以根据每个并发的实际工作量来确定它的内存需求。

    Step 3 - 利用约束调度算法

    在 Flink 1.15.x 版本之后引入了新的调度算法——“约束调度”(Constraint-based Scheduling)。这个新特性使得用户能够在不影响整体性能的情况下更好地控制任务分布情况。通过设置一些约束条件,可以让某些任务尽可能地被安排在一个节点上运行。

    Step 4 - 修改默认的调度策略

    如果你想让每个并发都能尽量跑在一起,可以修改默认的调度策略。在 conf/flink-conf.yaml 文件里面增加以下内容:

    jobmanager.scheduler.name:"org.apache.flink.runtime.jobmanager.scheduler.ConstraintBasedScheduler"
    

    同时,你还可以自定义一些约束规则,例如:

    constraint.assignmentConstraints:
    - constraintName: "affinity_constraint"
      targetNodes:
        - hostPortPair: ("localhost", <port>)
          numConcurrentTasksPerNodeMax: 1
    

    这段配置表示将相同主机上的并发任务数量限制为最多一个。注意,这些约束规则需要根据你的实际网络拓扑结构和硬件能力来制定。

    遵循以上四个步骤,理论上可以使每个并发尽可能地运行在同一台物理机上。 不过,即使如此也不能完全避免出现跨物理机的现象。因为在高负载情况下,有时候不得不把一部分任务分散开来,以免造成某一节点过载。所以在设计之初就要考虑到这一点,预留足够大的容量应对突发流量高峰等情况。

    2024-01-19 14:28:52
    赞同 展开评论 打赏
  • 根据你的描述,看起来你想让每个并行任务实例只在一个节点上运行,而不是跨多个节点分配。这是合理的,因为如果所有任务都在同一节点上运行,则可以减少网络延迟和提高性能。
    要在Flink HA集群中做到这一点,首先检查一下是否启用了HA模式。如果是的话,尝试禁用HA模式,看看是否会按照预期的方式分布任务。如果不是,那就继续下面的操作。

    我们需要修改作业的资源配置方式。默认情况下,Flink会在可用资源最少的任务间均衡分配任务。但是,当启用HA模式后,Flink会选择最安全的方式来平衡各个节点的工作量,这就可能导致某个任务跑到另一个节点上去。

    你可以采用以下步骤来限制任务只能在其初始所在的节点上运行:

    Step 1: 在YAML配置文件中找到taskmanager.numberOfTaskSlots部分,将其改为所需的数值。例如,如果你只有一个节点上有两个CPU核心,那么可以设为2;如果有四个核则设为4等等。

    Step 2: 找到taskmanager.memory.size部分,为其设定足够的内存大小。这取决于你的硬件规格及所使用的容器镜像大小等因素。一般来说,至少要比你的应用程序所需要的堆栈空间大一点。

    Step 3: 修改state.backend.typerocksdb或者其他持久化的状态管理器(如HDFS)。这样,一旦发生故障切换,之前的状态信息仍然能够得到保护。

    Step 4: 最后一步是启动Flink JobManager进程,让它监听所有的Worker Node。这通常是通过start-job-manager.sh脚本来完成的。确保Job Manager正确接收到来自Worker Node的消息,并能正常响应。

    以上操作完成后,再次重启Flink JobManager服务看是否有任何变化。如果没有看到期望的结果,那就要进一步排查日志,找出原因并做相应的调试。

    2024-01-15 14:59:03
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在Flink 1.15.1中,为了确保每个并发都运行在同一台机器上,可以通过以下方式进行设置:

    1. 在Flink的配置文件(如:flink-conf.yaml)中,设置taskmanager.numberOfTaskSlots为一个较小的值,例如1。这样,每个TaskManager只会分配一个任务槽,从而确保每个并发都运行在同一台机器上。
    2. 如果你使用的是Flink的HA(高可用)部署模式,那么可以设置high-availability为zookeeper,并确保在所有TaskManager节点上都配置了Zookeeper。这样,Flink会自动将TaskManager注册到Zookeeper,并确保同一台机器上的多个TaskManager实例不会竞争任务槽。
    2024-01-12 21:57:06
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载