1.修改 Flink 配置文件 (flink-conf.yaml)
Flink 中的 TaskManager 是根据 slots 来分配任务的,默认情况下,一个 TaskManager 可以有多个 slots。你可以通过调整 flink-conf.yaml 中的以下配置来控制每个 TaskManager 的 slot 数量:
taskmanager.numberOfTaskSlots: <number_of_slots>`
(1)先找到配置文件路径
(1.1)使用 find
命令
find
命令可以帮助你从指定的目录下递归查找文件。假设你不知道具体的 Flink 安装目录,可以从根目录 / 开始查找:
find / -name flink-conf.yaml
(1.2)使用 locate
命令
如果系统中安装了 locate,它可以通过预先构建的文件索引快速查找文件。首先确保更新索引数据库:
sudo updatedb
然后使用 locate 查找文件:
locate flink-conf.yaml
(1.3)使用 grep
命令
如果你知道 flink-conf.yaml 的大致目录,可以使用 grep 搜索文件内容中的关键字。假设 Flink 安装在 /opt/flink 目录下,可以通过以下命令查找包含特定配置项的文件:
grep -r "taskmanager.numberOfTaskSlots" /opt/flink
这样可以直接找到包含配置项的文件路径。
(2)修改配置文件参数
修改如下参数即可
2.重启Flink集群
这里要区分不同的Flink启动方式, 方式不同要修改配置文件的数量不同
(1)Standalone 模式
在 Standalone 模式下,Flink 集群由多个 TaskManager 和 JobManager 组成,每个节点(无论是运行 JobManager 还是 TaskManager)都需要加载自己的 flink-conf.yaml
配置文件。
操作步骤:
- 每台机器都需要修改:由于每个 TaskManager 都依赖于本地的配置文件来确定 slots 的数量,因此你需要在三台机器上分别修改
flink-conf.yaml
中的taskmanager.numberOfTaskSlots
参数。
操作步骤如下:- 在每一台机器上找到 Flink 安装目录。
- 打开
conf/flink-conf.yaml
文件。 - 修改
taskmanager.numberOfTaskSlots
的值。 - 保存修改。
- 重启整个集群:在修改配置之后,需要重启 Flink 集群。每台机器上运行的 TaskManager 都会根据新的配置文件加载 slots 数量。
- 你可以通过以下步骤完成重启:
- 在主节点(JobManager 所在的机器)上停止集群:
./bin/stop-cluster.sh
- 然后在主节点上重新启动集群:
./bin/start-cluster.sh
- 在主节点(JobManager 所在的机器)上停止集群:
Flink 会自动从主节点调度任务到所有的 TaskManager(即每个节点),因此每台机器的配置需要保持一致。
(2)YARN 模式
如果你使用的是 YARN 或 Kubernetes 部署模式,集群的 TaskManager 是动态分配的,而不是直接安装在每台机器上。
- 在 YARN 模式下,配置文件通常只需要在 JobManager 启动时生效,因此你可以在主节点(YARN Client)修改配置,然后重新提交作业。YARN 会根据这些配置分配 TaskManager 的资源。
可以通过以下步骤重新启动集群:
- 如果作业正在运行,你可以使用以下命令手动停止作业:
其中,<application_id> 是 YARN 分配给该 Flink 作业的 ID,可以通过以下命令查看当前运行的作业:yarn application -kill <application_id>
另外,你也可以在 Flink Web UI 上通过点击 "Cancel Job" 按钮停止正在运行的作业。yarn application -list
- 启动 YARN 会话集群
如果你希望启动一个 YARN 会话集群,可以使用以下命令:./bin/yarn-session.sh -n <number_of_taskmanagers> -jm <jobmanager_memory> -tm <taskmanager_memory>
-n
:指定 TaskManager 数量。
-jm
:指定 JobManager 的内存大小。
-tm
:指定每个 TaskManager 的内存大小。
启动会话集群后,你可以通过 Flink Web UI(默认地址 http://<JobManager_IP>:8081)提交多个作业到这个会话集群 - 示例:
bin/yarn-session.sh -nm flink-yarn-session-ha-dev -d
(3)Kubernetes 模式
如果你使用的是 YARN 或 Kubernetes 部署模式,集群的 TaskManager 是动态分配的,而不是直接安装在每台机器上。
操作步骤:
- 在 Kubernetes 中,TaskManager 是作为容器动态创建的。你只需要修改 Kubernetes 配置文件或者 Flink 的
ConfigMap
,并在 Kubernetes 集群中重新部署 TaskManager,所有新的 TaskManager 都会使用你配置的 slots 数量。
(4)总结
- Standalone 模式:你需要在所有三台机器上修改
flink-conf.yaml
文件,因为每个 TaskManager 节点会独立加载配置文件。 - YARN/Kubernetes 模式:一般只需要在 JobManager 或客户端节点上修改配置,并通过 YARN 或 Kubernetes 动态分配 TaskManager。
因此,在 Standalone 模式下,每台机器都要同步修改flink-conf.yaml
,而 YARN 或 Kubernetes 模式下的操作会稍微简单一些,只需修改主节点上的配置。