2026/4/12 19:57:57
网站建设
项目流程
自定义网站模板,网上商城运营推广思路,wordpress 软件 主题,小程序公司1. Standalone 适合什么场景#xff1f;
本地快速验证#xff1a;SQL/Connector/UDF 先跑通测试环境#xff1a;不想引入 K8s/YARN 的复杂度小规模稳定集群#xff1a;资源固定、运维能接受手工管理想把“Flink 运行机制”看得更清楚#xff1a;进程、日志、端口、类加载…1. Standalone 适合什么场景本地快速验证SQL/Connector/UDF 先跑通测试环境不想引入 K8s/YARN 的复杂度小规模稳定集群资源固定、运维能接受手工管理想把“Flink 运行机制”看得更清楚进程、日志、端口、类加载都一目了然如果你需要自动扩缩容、资源隔离、作业弹性调度通常就要上 Kubernetes 或 YARN。2. 准备工作Standalone 的基本要求很简单Java 1.8Flink 2.x 生产更建议 Java 17下载并解压 Flink 发行版类 UNIX 环境Linux / macOS / Cygwin你只要记住一个路径Flink 解压后的根目录后面所有脚本都从这里跑。3. 30 秒起一个 Standalone 集群Session ModeSession Mode 的特点先启动一个长期运行的集群再往里面提交多个作业。最适合本地/测试/共享集群。3.1 启动集群# 进入 Flink 根目录./bin/start-cluster.sh启动后至少会起来两个进程JobManager含 Web UITaskManager执行算子Web UI 默认在http://localhost:80813.2 提交一个示例作业./bin/flink run ./examples/streaming/TopSpeedWindowing.jar3.3 停止集群./bin/stop-cluster.sh很多同学第一次跑到这里就结束了但真正实战的关键在下面Session/Application、脚本管理、HA 与排障。4. Session Mode vs Application Mode怎么选不纠结4.1 Session Modestart-cluster.sh你先起一个集群多个作业共享 TaskManager 资源优点启动快、成本低、适合多人共用测试风险一个作业搞崩 TM可能影响同机器上其他作业资源抢占更明显典型用法本地 SQL Client 提交 SQL 作业测试集群长期在线大家都往里投作业4.2 Application Modestandalone-job.shApplication Mode 的特点为一个应用通常一个 main启动一个 JobManager作业“贴着 JobManager 跑”资源隔离更好。核心脚本bin/standalone-job.sh启动带应用的 JobManagerbin/taskmanager.sh启动 TaskManager方式 A把作业 JAR 放到 lib/最省事cp./examples/streaming/TopSpeedWindowing.jar lib/ ./bin/standalone-job.sh start\--job-classname org.apache.flink.streaming.examples.windowing.TopSpeedWindowing# 再启动一个或多个 TaskManager./bin/taskmanager.sh startWeb UI 仍然默认http://localhost:8081方式 B用 --jars 拉取适合管理 artifacts./bin/standalone-job.sh start\-D user.artifacts.base-dir/tmp/flink-artifacts\--jars local:///path/to/TopSpeedWindowing.jar如果你发现 application 启不起来大概率是你忘了先起 TaskManager。停止多实例时可反复 stop./bin/taskmanager.sh stop ./bin/standalone-job.sh stop4.3 一句话决策本地快速跑通、多人共享Session Mode想要更强隔离、每个应用单独生命周期Application Mode5. 从本地扩展到“分布式 Standalone”Standalone 的分布式靠两个文件驱动conf/mastersJobManager 主机conf/workersTaskManager 主机列表5.1 本地起多个 TaskManager模拟集群conf/masterslocalhostconf/workerslocalhost localhost再启动./bin/start-cluster.sh5.2 真分布式多机器假设 4 台机器master1 / worker1 / worker2 / worker3conf/mastersmaster1conf/workersworker1 worker2 worker3并且要在conf/flink-conf.yaml里指定jobmanager.rpc.address:master1然后在 master1 上执行./bin/start-cluster.sh前提条件机器之间网络互通配好免密 SSH脚本支持远程拉起各机器 Flink 目录结构一致脚本默认依赖一致的路径6. Standalone 的排障入口先看日志再说Standalone 出问题第一入口永远是日志日志目录log/每个组件都有独立日志JM/TM/HistoryServer 等默认每次启动会做日志轮转旧日志会带数字后缀另一个很方便的入口Web UI 里也能直接看 JobManager / TaskManager 日志6.1 什么时候要把日志级别开到 DEBUG当你遇到这些情况作业行为不符合预期例如数据没进来、checkpoint 一直卡连接器初始化失败但提示不够类加载冲突、NoClassDefFoundError修改conf/log4j.properties把 rootLogger.level 调成 DEBUG注意别长期在线上开日志量会爆7. 动态参数覆盖脚本 -D 的优先级更高你可以在启动脚本里用-D直接覆盖配置项优先级高于 flink-conf.yaml非常适合临时改端口、改 rpc address./bin/jobmanager.sh start\-D jobmanager.rpc.addresslocalhost\-D rest.port8081同理适用于standalone-job.shtaskmanager.shhistoryserver.sh实战建议本地端口冲突时优先用-D rest.portxxxx临时改比改配置文件快很多8. Standalone 开 HAZooKeeper 多 JobManagerStandalone 要高可用HA就离不开 ZooKeeper并且要启动多个 JobManager 做主备切换。8.1 flink-conf.yaml 关键配置示例high-availability.type:zookeeperhigh-availability.zookeeper.quorum:localhost:2181high-availability.zookeeper.path.root:/flinkhigh-availability.cluster-id:/cluster_onehigh-availability.storageDir:hdfs:///flink/recovery这里最容易踩坑的是high-availability.cluster-id不同集群必须不一样不然元数据会串high-availability.storageDir需要可靠存储通常 HDFS / 分布式 FS别指望单机磁盘扛住故障恢复8.2 masters 配置多 JM并指定 Web UI 端口conf/masterslocalhost:8081 localhost:8082你还可以通过high-availability.jobmanager.port固定/范围化 JM 通信端口方便防火墙与运维管理。8.3 启动 ZooKeeper Quorum 启集群./bin/start-zookeeper-quorum.sh ./bin/start-cluster.sh停止./bin/stop-cluster.sh ./bin/stop-zookeeper-quorum.sh9. Standalone 的 Classpath为什么你“加了 jar 还是找不到类”Standalone 下哪些 jar 会进用户 classpath取决于模式Session Mode提交命令里指定的 JARApplication Mode启动命令指定的 JAR usrlib/目录下所有 JAR这意味着一个非常实用的技巧Application Mode 想让所有 TM/JM 都“天然带着某些依赖”就把依赖丢到usrlib/Session Mode 下则更依赖你提交时的打包与 classpath 管理遇到类加载冲突时尤其多个 connector / 不同版本依赖先明确你是在 Session 还是 Application再检查 JAR 到底是通过提交命令带进去还是放在 usrlib/lib最后才去看“谁覆盖了谁”10. Windows Cygwin 常见坑脚本报 $‘\r’ command not found如果你在 Windows Git Shell/Cygwin 下跑脚本出现$\r: command not found本质原因是git 把 UNIX 换行转换成了 Windows CRLFCygwin 解析不了。修复思路按文档做在 Cygwin 的 home 目录.bash_profile追加export SHELLOPTSset -o igncr重开一个 bash shell更省心的替代方案在 WSL2/Linux 环境运行 Flink更推荐11. 你可以直接复用的“最短闭环”操作手册本地验证Session Mode./bin/start-cluster.sh打开 Web UIlocalhost:8081./bin/flink run ...出问题先看log/或 Web UI 日志./bin/stop-cluster.sh本地验证Application Modecp xxx.jar lib/或--jars local:///..../bin/standalone-job.sh start --job-classname ..../bin/taskmanager.sh start可多起几个./bin/taskmanager.sh stop/./bin/standalone-job.sh stop分布式扩展配conf/mastersconf/workers配jobmanager.rpc.address确保免密 SSH 与目录一致HA配 ZK 多 masters storageDirstart-zookeeper-quorum.sh再start-cluster.sh