Flink 集群与部署

部署一个 Flink 集群,首先需要根据自己的实际情况选择适合自己的部署模式和部署平台

1.1 部署模式主要根据以下需求而不同:

  1. 不同模式的集群生命周期和资源隔离不同。
  2. 应用的 main 方法可能在客户端执行也可能在服务端执行。如果在客户端执行,客户端需要下载程序依赖,生成 JobGraph ,上传依赖及 JobGraph 到服务端,这样的话,客户端资源消耗将更多。如果程序要在用户间共享,这个问题将更加凸显。

1.2 主要的部署模式有:

  • session 模式
  1. 所有应用程序运行在同一个集群,竞争同样的资源。
  2. 单个应用程序导致 Task Manager 挂掉,会影响该 Task Manager 的所有程序,造成严重的批量启动开销。
  3. 增加了 JobManager 的压力。
  4. 应用的 main 方法在客户端执行
  • per-job 模式
  1. per-job 模式提供了更好的资源隔离。
  2. 它借助集群管理框架 (如. YARN, Kubernetes) 为每个新提交的 Job 分配资源。 Job 完成后回收资源。单个程序异常只会影响到自身。
  3. 减轻了 JobManager 的压力。
  4. 生产环境,per-job 模式用的更多。
  5. 应用的 main 方法在客户端执行
  • application 模式
  1. 应用的 main 方法在服务端执行。这里要求你在环境中使用 registerCachedFile() 注册的任何路径都要能被 JobManager 访问。
  2. 给每一个 application 创建一个 session 集群。
  3. 该模式运行提交的应用包含多个 Job,这些 Job 的执行顺序不受部署模式的影响,而是受调用方式的影响。使用 execute() 阻塞方法,下一个Job 将等到当前 Job 完成才能执行。当使用 executeAsync() 非阻塞方法,下一个Job 将无需等待当前 Job 完成。
  4. 注意: 虽然在该模式下运行同时运行多 Job。但是这样不支持高可用。只有在单 Job 执行模式下支持高可用。

3. 部署平台包括:

  • Local :在本地运行 Flink ,主要用于基础测试和实验
  • Standalone :一个简单的方案,在裸机或虚拟机上运行 Flink
  • Yarn :Yarn 是 Hadoop 的资源管理器
  • Kubernetes :K8s 是一个容器化应用的自动部署系统
  • Mesos :Mesos 是一个通用的分布式系统的资源管理器
  • Docker :Docker 是一个流行的容器化环境方案

4. 部署最佳实践:

4.1 如何添加依赖

  • lib/ 文件夹下的文件 在启动 Flink 的时候会添加到 classpath 。这种方式比较适合添加像 Hadoop 或文件系统这类不太适合作为插件的库。这里要注意,当你加入一个 Flink 已经提供的库,且版本不一致时,会产生冲突。
  • plugins// 在运行时由单独的 classloaders 加载,可以避免与Flink 自身包产生冲突。只有预先准备好的插件能用这种方式添加。

4.2 本地下载 Maven 依赖

可以用下面的模版加上自己需要的依赖设置,运行 mvn package, 就可以将依赖下载到 jars 文件夹中。



  4.0.0
  org.apache.flink
  docker-dependencies
  1.0-SNAPSHOT

  
        
  

  
      
        
          org.apache.maven.plugins
          maven-dependency-plugin
          3.1.2
          
            
              copy-dependencies
              package
              copy-dependencies
              jars
            
          
        
      
  

你可能感兴趣的:(Flink 集群与部署)