5分钟搞定Flink1.19本地部署:用JDK17运行WordCount示例教程
5分钟搞定Flink 1.19本地部署用JDK 17运行WordCount示例教程对于很多开发者来说Apache Flink 这个名字既熟悉又陌生。熟悉是因为它作为流处理领域的标杆在各种技术分享和招聘要求中频频出现陌生则是因为其庞大的生态和看似复杂的部署流程让不少想快速上手体验的人望而却步。我们常常被官方文档里详尽的配置选项和推荐环境所包围以至于忘了有时候最简单的“跑起来”才是学习的第一步。今天我们就来打破这个门槛。如果你手头只有一台普通的开发机安装了较新的JDK 17并且希望在喝杯咖啡的间隙里亲眼看到Flink处理数据的“魔力”那么这篇指南就是为你准备的。我们不讨论复杂的集群架构不深究状态后端的选择只聚焦于一个核心目标用最短的时间、最少的步骤在你的本地机器上启动一个Flink集群并成功运行经典的WordCount示例程序。整个过程真的只需要几分钟。1. 环境准备打破“官方推荐”的束缚在开始之前我们先明确一下这次快速体验的基石。很多朋友看到Flink官方文档推荐使用JDK 8或JDK 11而自己电脑上只有更新的JDK 17或21时可能会犹豫是否要为了Flink专门安装一个旧版本JDK。这种顾虑完全可以理解但好消息是对于Flink 1.19这样的较新版本使用JDK 17进行本地启动和基础示例运行通常是可行的。这为我们省去了配置多版本JDK的麻烦。注意虽然本教程演示在JDK 17环境下成功运行但如果你计划进行更深入的功能开发或生产部署仍需仔细阅读官方文档对运行环境的详细要求以确保所有高级特性的兼容性。我们需要准备的东西非常简单Java Development Kit (JDK) 17确保已安装并正确配置了JAVA_HOME环境变量。你可以在终端中通过java -version命令来验证。Apache Flink 1.19.0 二进制发布包我们将使用预编译好的版本避免从源码构建的漫长过程。让我们快速检查一下Java环境。打开你的终端Linux/macOS或命令提示符/PowerShellWindows输入java -version你应该能看到类似下面的输出确认版本是17或更高openjdk version 17.0.10 2024-01-16 OpenJDK Runtime Environment (build 17.0.107) OpenJDK Runtime Environment Temurin-17.0.107 (build 17.0.107) OpenJDK 64-Bit Server VM Temurin-17.0.107 (build 17.0.107, mixed mode, sharing)接下来获取Flink。访问 Apache Flink 官方网站的下载页面找到Apache Flink 1.19.0的发布版本。对于本次快速体验我们选择适用于大多数场景的预编译包推荐下载项flink-1.19.0-bin-scala_2.12.tgz这个包包含了Flink运行所需的所有二进制文件、库和示例。scala_2.12表示其内置的Scala库版本这不会影响我们使用Java API运行示例。将下载好的压缩包放置在你习惯的工作目录下例如~/Downloads或D:\dev。2. 极速部署解压即用的Flink“单机版”Flink的本地部署模式本质上就是启动一个单机伪集群。这个集群包含了JobManager作业管理器和TaskManager任务管理器但它们都运行在你当前这一台机器上。这种模式完美契合了开发、测试和快速体验的需求。第一步解压与目录探秘使用终端进入你存放下载包的目录执行解压命令。以下以Linux/macOS为例Windows用户可以使用类似7-Zip等工具解压。tar -xzf flink-1.19.0-bin-scala_2.12.tgz解压完成后进入新创建的目录cd flink-1.19.0现在让我们花30秒快速浏览一下这个目录里最关键的部分bin/核心所在。所有启动、停止、管理集群和提交作业的脚本都在这里。我们马上就会用到它。conf/配置文件目录。对于本地体验默认配置完全够用。如果你想调整Web UI端口、内存分配等可以修改这里的flink-conf.yaml。examples/宝藏文件夹。里面存放了各种流处理和批处理的示例程序JAR包我们的WordCount就在其中。log/启动集群后日志文件会生成在这里是排查问题的第一站。lib/Flink运行依赖的库文件。第二步一键启动本地集群启动集群的命令简单到不可思议。在flink-1.19.0目录下运行./bin/start-cluster.sh如果你是Windows用户则使用对应的批处理文件.\bin\start-cluster.bat执行后终端会输出一些启动日志。当看到提示Starting cluster.以及后续的Starting standalonesession daemon on host.和Starting taskexecutor daemon on host.等信息时说明启动过程正在进行。稍等片刻直到脚本执行完毕光标重新出现提示符。如何确认启动成功最直观的方式就是访问Flink自带的Web UI。3. 初识仪表盘Flink Web UI快速导览Flink提供了一个功能丰富的Web管理界面即使只是本地运行它也能让我们清晰地看到集群状态和作业执行情况。默认情况下这个界面会在本机的8081端口启动。打开你的浏览器访问http://localhost:8081你应该会看到类似下图的Flink Dashboard仪表盘首页(注此为示意图链接实际为本地页面)首次见面我们可以重点关注以下几个区域集群概览 (Cluster Overview)页面中央会显示当前集群的概况包括TaskManager的数量本地模式通常为1个、可用的任务槽Task Slots总数、以及集群的CPU和内存使用情况。这证实了你的本地集群正在健康运行。作业管理 (Job Manager)这里列出了所有已提交和正在运行的作业。目前应该是空的因为我们还没提交任何任务。任务管理器 (Task Managers)点击左侧边栏的Task Managers你可以看到当前运行的TaskManager实例的详细信息包括它所在的主机、可用槽位、以及资源使用情况。提交新作业 (Submit New Job)在页面上方你可以找到一个Submit New Job的选项卡。这为我们后续通过UI界面提交自定义JAR包提供了入口。这个Web UI不仅仅是一个监控工具它还能用于取消作业、查看详细的执行计划图Job Graph、检查日志等。保持这个浏览器标签页打开我们即将提交第一个作业并在这里观察它的诞生与消亡。4. 运行经典示例剖析WordCount的流处理之旅终于来到了最具成就感的一步——让Flink真正“动”起来。我们将运行一个内置的、堪称大数据领域“Hello World”的示例WordCount词频统计。这个示例程序会读取一段内置的文本统计其中每个单词出现的次数并将结果打印出来。通过命令行提交作业回到你的终端确保当前目录依然是flink-1.19.0。运行以下命令./bin/flink run examples/streaming/WordCount.jar这个命令做了以下几件事./bin/flink run调用Flink的客户端命令用于向集群提交作业。examples/streaming/WordCount.jar指定要运行的JAR包路径。这是一个流处理版本的WordCount示例。命令执行后你会在终端看到大量的日志输出。别担心这是Flink作业启动、执行和打印结果的正常过程。仔细在输出中寻找你会看到类似下面的结果片段(world, 1) (hello, 1) (world, 2) (hello, 2) ...这表示Flink正在以流的方式处理数据每遇到一个单词就更新并输出它当前的计数。最终当内置的简短文本流处理完毕后作业会自动完成。此时刷新你的浏览器中的Flink Web UI (http://localhost:8081)。你会发现在“Running Jobs”或“Completed Jobs”列表里多出了一个名为“WordCount”的作业。点击它你可以进入一个极其详细的作业视图Overview作业的总体信息如状态已完成、开始/结束时间、持续时间。Tasks查看作业中所有并行任务的状态和指标。Checkpoints对于流作业这里会显示检查点的信息本例中可能没有启用。Accumulators累加器信息。Metrics丰富的运行时指标。Stdout非常有用在这里你可以看到作业在TaskManager上打印的标准输出也就是我们刚才在终端看到的(hello, 1)等结果。这对于调试分布式作业至关重要。为了更清晰地理解这个示例作业的内部结构我们来看一下它大致的执行计划通过UI上的“Plan”或“执行图”可以可视化看到组件角色在本例中的行为Source数据源生成一个预定义的、简短的英文句子流如 “hello world hello flink”。FlatMap转换算子将每个句子按空格分割成独立的单词。例如输入 “hello world”输出 “hello” 和 “world” 两个元素。KeyBy分区算子根据单词本身进行哈希分区确保相同的单词会被发送到同一个后续算子实例进行处理。这是实现聚合的关键。Sum聚合算子对每个单词每个key的出现次数进行累加求和。Sink输出端将最终聚合结果单词计数打印到标准输出或日志。这个简单的流水线完美诠释了Flink流处理的核心概念无界数据流、有状态的转换、以及基于事件时间的窗口聚合本例是简单的Keyed Stream上的聚合。虽然我们运行的是流处理版本但Flink的强大之处在于其流批一体的API同样的逻辑稍作调整就能用于处理有界数据集批处理。5. 深入一步自定义输入与作业管理成功运行内置示例很棒但如果我们想处理自己的数据呢或者想更精细地控制作业行为让我们再往前走一小步。尝试一个批处理示例Flink也提供了批处理的WordCount示例。让我们提交它看看有什么不同./bin/flink run examples/batch/WordCount.jar观察终端输出和Web UI。你会发现批处理作业的输出通常是在作业完全结束后一次性打印出所有结果而不是像流处理那样一条条地持续输出。在Web UI上批处理作业的执行图DAG也会呈现出与流作业不同的形态。通过Web UI提交作业除了命令行Web UI也提供了作业提交功能。点击顶部导航栏的Submit New Job。点击 Add New按钮上传你自己打包的Flink作业JAR包如果你有的话。在Entry Class中输入主类的全限定名。可以在Program Arguments中传递参数例如指定输入/输出文件路径。点击Submit作业就会被提交到集群运行。这种方式对于测试和运维非常友好尤其适合需要频繁提交不同参数作业的场景。优雅停止集群体验完毕后我们需要停止本地集群。回到终端在flink-1.19.0目录下运行./bin/stop-cluster.sh或者Windows下.\bin\stop-cluster.bat执行后Web UI (localhost:8081) 将无法再访问所有相关进程会被终止。你的log/目录下会保留本次运行的日志以备排查问题之需。6. 可能遇到的“小坑”与解决思路即使是一个简单的5分钟教程在实际操作中也可能遇到一些小问题。这里列出几个常见情况及其应对方法端口冲突 (Port 8081 already in use)如果8081端口被其他程序占用集群启动会失败。解决方法有两种修改Flink配置编辑conf/flink-conf.yaml文件找到rest.port: 8081这一行将其改为其他未被占用的端口例如8082。然后重启集群并通过localhost:8082访问Web UI。关闭占用端口的程序使用netstat -ano | findstr :8081(Windows) 或lsof -i :8081(Linux/macOS) 查找并终止占用该端口的进程。Java版本不兼容错误如果遇到类似UnsupportedClassVersionError或java.lang.NoSuchMethodError等与类版本相关的问题这可能是Flink二进制包与高版本JDK的某些细微不兼容。可以尝试确认使用的是Flink 1.19.0它对JDK 17的兼容性已经很好。检查环境变量JAVA_HOME是否确实指向了JDK 17的安装路径。在极少数情况下可以尝试在conf/flink-conf.yaml中明确设置JVM参数但本地体验通常不需要。作业提交失败或卡住如果提交作业后长时间没有日志输出或者Web UI显示作业一直处于“CREATED”状态不运行首先检查Web UI的Task Managers页面确认有可用的TaskManager且状态是健康的。查看log/目录下以jobmanager.log和taskmanager.log开头的日志文件寻找错误信息。本地模式下最常见的原因是资源不足如内存。可以尝试在conf/flink-conf.yaml中调低taskmanager.memory.process.size和jobmanager.memory.process.size的值例如改为1024m然后重启集群。WordCount示例没有输出结果确保你运行的是examples/streaming/WordCount.jar或examples/batch/WordCount.jar。有些版本的示例包路径可能略有不同可以用find . -name *WordCount*.jar命令在Flink目录下搜索确认。把Flink在本地跑起来就像第一次成功编译运行一个“Hello World”程序那种瞬间打通任督二脉的成就感是后续深入学习的最佳燃料。这个简单的本地伪集群已经包含了Flink核心的运行时组件你之后学习DataStream API、调试业务逻辑、甚至测试一些简单的状态操作都可以在这个环境下进行。它足够轻量随时可以启停是你探索流处理世界最安全的沙盒。

相关新闻

如何在RTX 4090上快速部署Qwen2.5-7B大模型?保姆级教程(含常见错误解决方案)

如何在RTX 4090上快速部署Qwen2.5-7B大模型?保姆级教程(含常见错误解决方案)

在RTX 4090上高效部署Qwen2.5-7B:从零到一的实战指南与深度排错 拥有一块RTX 4090这样的顶级GPU,意味着你手握了探索前沿大语言模型的强大钥匙。但如何将这把钥匙精准地插入锁孔,流畅地启动像Qwen2.5-7B这样的模型,对于许多开发者…

2026/7/3 15:11:04 阅读更多 →
Transformer模型原理图解:用Python从头实现一个简易版

Transformer模型原理图解:用Python从头实现一个简易版

Transformer模型原理图解:用Python从头实现一个简易版 如果你已经对深度学习,尤其是自然语言处理领域有所涉猎,那么“Transformer”这个名字对你来说一定如雷贯耳。它早已不是2017年那篇论文里的一个新颖架构,而是成为了驱动当今绝…

2026/5/17 7:15:13 阅读更多 →
单细胞分析新手指南:如何用monocle3轻松搞定细胞轨迹推断(附完整代码)

单细胞分析新手指南:如何用monocle3轻松搞定细胞轨迹推断(附完整代码)

单细胞轨迹分析实战:从零上手monocle3,解锁细胞命运的动态密码 如果你刚刚踏入单细胞转录组的世界,面对海量的细胞和基因,除了聚类和差异分析,是否好奇过这些细胞之间“流动”的故事?它们从哪里来&#xff…

2026/5/17 12:39:35 阅读更多 →

最新新闻

Windows 11本地部署GLM-5.2:集成Claw与Agent知识库的AI智能体实践

Windows 11本地部署GLM-5.2:集成Claw与Agent知识库的AI智能体实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 如果你正在寻找一个能在本地高效运行、支持复杂AI智能体(Agent)和知识库功能,并且完全兼容Windows…

2026/7/4 3:56:00 阅读更多 →
奇门取号报“订单号不一致”?一次 trade_order_list 的排查实录

奇门取号报“订单号不一致”?一次 trade_order_list 的排查实录

奇门取号报“订单号不一致”?一次 trade_order_list 的排查实录 摘要:在多包裹奇门取号时,系统突然报错“子母件批量取号订单号应保持一致”。经过逐层排查发现,请求中每个包裹的 trade_order_list 都包含了全部明细的不同订单号&…

2026/7/4 3:56:00 阅读更多 →
Kimi    LeetCode 3454. 分割正方形 II C++实现

Kimi LeetCode 3454. 分割正方形 II C++实现

这是 LeetCode 3454. 分割正方形 II 的 C 实现,基于扫描线 线段树算法。核心思路题目要求找到一条水平线 y k,使得该线以上和以下的正方形并集面积相等。由于正方形可能重叠,需要使用扫描线算法:1. 离散化 x 坐标:收…

2026/7/4 3:56:00 阅读更多 →
Java SHA256加密实战:从原理到密码存储与API签名的完整指南

Java SHA256加密实战:从原理到密码存储与API签名的完整指南

1. 项目概述:为什么我们需要SHA256? 在开发中,处理敏感数据是家常便饭,无论是用户密码、支付凭证还是API签名。直接存储明文密码是开发中的大忌,一旦数据库泄露,后果不堪设想。因此,我们必须对这…

2026/7/4 3:51:58 阅读更多 →
数据产业服务分类(25)——数据要素——数据要素转化的主体

数据产业服务分类(25)——数据要素——数据要素转化的主体

人是数据要素与其他生产要素转化的核心与主体。实践活动是纽带数据与现实世界并非彼此割裂、独立存在,而是通过人类实践活动这一关键纽带实现了紧密相连。人类实践活动充当着数据与现实世界连接的桥梁。人类在现实世界中开展各类实践活动,这些活动产生了…

2026/7/4 3:49:58 阅读更多 →
揭秘租赁行业潜规则:为什么大厂都在租翻新打印机?

揭秘租赁行业潜规则:为什么大厂都在租翻新打印机?

很多人好奇,为什么大型企业、连锁公司、上市公司,明明有预算,却偏偏不租新机,反而首选翻新打印机?今天揭秘租赁行业没人说的真话。一、大厂只看实用性,不看面子对专业企业来说,打印机只是办公工…

2026/7/4 3:49:58 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻