当前位置: 首页 > article >正文

Flink 1.18.0 新手避坑指南:从第一个WordCount程序到独立部署(附常见报错解决)

Flink 1.18.0 新手避坑指南从第一个WordCount程序到独立部署第一次接触Flink时那种既兴奋又忐忑的心情我至今记忆犹新。作为一款强大的分布式流处理框架Flink 1.18.0版本带来了诸多改进但对于新手来说从编写第一个WordCount程序到完成独立部署这条路上布满了各种坑。本文将带你避开这些常见陷阱用最短的时间掌握Flink的核心使用技巧。1. 开发环境准备与第一个WordCount程序1.1 依赖配置的正确姿势新手最容易栽跟头的地方往往在项目依赖配置。Flink 1.18.0的Maven依赖需要特别注意版本一致性dependencies !-- 核心依赖 -- dependency groupIdorg.apache.flink/groupId artifactIdflink-java/artifactId version1.18.0/version /dependency dependency groupIdorg.apache.flink/groupId artifactIdflink-streaming-java_2.12/artifactId version1.18.0/version scopeprovided/scope /dependency !-- 日志依赖 -- dependency groupIdorg.slf4j/groupId artifactIdslf4j-simple/artifactId version1.7.36/version /dependency /dependencies注意所有Flink依赖的版本号必须严格一致否则会出现难以排查的兼容性问题。provided范围表示这些依赖在部署时由集群提供。1.2 WordCount程序的三种实现方式批处理版本已弃用但仍有参考价值ExecutionEnvironment env ExecutionEnvironment.getExecutionEnvironment(); DataSetString text env.readTextFile(input.txt); DataSetTuple2String, Integer counts text.flatMap(new Tokenizer()) .groupBy(0) .sum(1); counts.print();流处理版本推荐StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment(); DataStreamString text env.readTextFile(input.txt); DataStreamTuple2String, Integer counts text.flatMap(new Tokenizer()) .keyBy(value - value.f0) .sum(1); counts.print(); env.execute(WordCount Stream);批流一体版本Flink 1.18.0新特性StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment(); env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC); DataStreamString text env.readTextFile(input.txt); DataStreamTuple2String, Integer counts text.flatMap(new Tokenizer()) .keyBy(value - value.f0) .sum(1); counts.print(); env.execute(WordCount Universal);提示Flink 1.18.0已弃用DataSet API建议优先使用DataStream API配合RuntimeExecutionMode实现批流一体处理。1.3 Lambda表达式的类型擦除问题使用Lambda表达式时Java的类型擦除机制会导致Flink无法自动推断类型信息。以下是正确写法DataStreamTuple2String, Integer wordCounts text .flatMap((String value, CollectorTuple2String, Integer out) - { for (String word : value.split(\\s)) { out.collect(new Tuple2(word, 1)); } }) .returns(Types.TUPLE(Types.STRING, Types.INT)) // 必须显式声明类型 .keyBy(value - value.f0) .sum(1);2. 本地开发环境常见问题排查2.1 Web UI无法启动的解决方案尝试启动本地Web UI时很多新手会遇到端口冲突或无法访问的问题。正确的配置方式Configuration config new Configuration(); config.setInteger(rest.port, 8082); // 自定义端口 StreamExecutionEnvironment env StreamExecutionEnvironment .createLocalEnvironmentWithWebUI(config);如果仍然无法访问检查以下事项确保没有防火墙阻止端口访问检查是否与其他服务如Tomcat端口冲突尝试使用http://localhost:8082而非127.0.0.12.2 作业不执行的常见原因新手经常困惑为什么作业没有输出结果主要原因包括忘记调用env.execute()方法流处理必须调用使用了print()但未设置并行度本地模式默认并行度CPU核心数输入文件路径错误使用绝对路径更可靠2.3 日志配置技巧在resources目录下创建log4j.properties文件log4j.rootLoggerINFO, console log4j.appender.consoleorg.apache.log4j.ConsoleAppender log4j.appender.console.layoutorg.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 降低Flink日志级别 log4j.logger.org.apache.flinkWARN3. Standalone模式部署实战3.1 集群部署步骤下载并解压Flink 1.18.0二进制包修改conf/flink-conf.yaml关键配置# JobManager配置 jobmanager.rpc.address: 主机IP jobmanager.bind-host: 0.0.0.0 jobmanager.memory.process.size: 1600m # TaskManager配置 taskmanager.numberOfTaskSlots: 4 taskmanager.memory.process.size: 4096m # Web UI配置 rest.address: 主机IP rest.bind-address: 0.0.0.0修改conf/workers文件添加所有TaskManager节点启动集群# 在JobManager节点执行 bin/start-cluster.sh3.2 部署后常见问题Web UI无法访问检查防火墙设置确认rest.address配置正确查看log/flink-*-standalonesession-*.log日志文件TaskManager未注册检查网络连通性确认workers文件中的主机名可解析检查TaskManager日志中的连接错误3.3 作业提交方式对比提交方式命令示例适用场景特点命令行bin/flink run -c main.Class app.jar生产环境支持参数传递Web UI通过上传界面提交开发测试可视化操作REST APIcurl -X POST -H Content-Type: application/json -d job.json http://host:port/jars/upload自动化部署适合CI/CD4. 生产环境注意事项4.1 资源配置建议对于生产环境这些配置项需要特别关注# 网络配置 taskmanager.network.memory.fraction: 0.1 taskmanager.network.memory.max: 1gb # 检查点配置 execution.checkpointing.interval: 30s execution.checkpointing.mode: EXACTLY_ONCE state.backend: filesystem state.checkpoints.dir: hdfs://namenode:8020/flink/checkpoints # 高可用配置 high-availability: zookeeper high-availability.storageDir: hdfs://namenode:8020/flink/ha/ high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:21814.2 监控与调优关键监控指标及其意义背压BackPressure表示下游处理速度跟不上上游生产速度检查点持续时间反映状态保存的开销垃圾回收时间GC停顿会影响实时性调优建议合理设置并行度通常为CPU核心数的2-3倍对于状态较大的作业增加TaskManager堆内存使用RocksDB状态后端处理大状态4.3 版本升级注意事项从旧版本升级到1.18.0时需要注意DataSet API已被标记为废弃建议迁移到DataStream API部分配置项名称发生变化如state.backend替代state.backend.type检查依赖的兼容性特别是连接器版本5. 常见报错与解决方案5.1 编译时问题问题1NoSuchMethodErrorjava.lang.NoSuchMethodError: org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.getCheckpointConfig()原因依赖版本冲突解决执行mvn dependency:tree检查依赖树排除重复依赖问题2类型推断失败The generic type parameters of Tuple2 are missing.原因Lambda表达式类型擦除解决添加.returns(TypeInformation)明确指定类型5.2 运行时问题问题3作业卡住不执行Job appears to be stuck排查步骤检查是否调用了env.execute()查看TaskManager日志是否有异常检查网络连接是否正常问题4Checkpoint失败Checkpoint expired before completing解决方案增加检查点超时时间优化作业性能减少检查点持续时间检查存储系统是否正常5.3 部署问题问题5端口冲突Address already in use解决修改rest.port配置杀死占用端口的进程或使用不同端口部署问题6资源不足Not enough resource slots available解决增加TaskManager数量调整每个TaskManager的slot数量优化作业并行度设置在实际项目中我发现最常出现的问题是环境配置不当和依赖冲突。建议新手从最简单的Standalone模式开始逐步过渡到YARN或Kubernetes集群。遇到问题时首先检查日志中的ERROR和WARN信息Flink的错误提示通常比较明确。

相关文章:

Flink 1.18.0 新手避坑指南:从第一个WordCount程序到独立部署(附常见报错解决)

Flink 1.18.0 新手避坑指南:从第一个WordCount程序到独立部署 第一次接触Flink时,那种既兴奋又忐忑的心情我至今记忆犹新。作为一款强大的分布式流处理框架,Flink 1.18.0版本带来了诸多改进,但对于新手来说,从编写第一…...

RVC语音可控性进阶:音素级对齐、时长预测、韵律建模技巧

RVC语音可控性进阶:音素级对齐、时长预测、韵律建模技巧 1. 从“能用”到“好用”:为什么需要进阶技巧? 你可能已经体验过RVC(Retrieval-based Voice Conversion)的强大,它能快速将你的声音变成另一个人的…...

深度学习图像恢复实战:基于Blurr库的统一处理框架与应用

1. 项目概述:当图像处理遇上深度学习最近在折腾一个图像处理相关的项目,需要快速实现一套从模糊图像中恢复细节的流程。说实话,这活儿听起来简单,做起来坑不少。传统的图像锐化滤镜,比如Photoshop里的USM,对…...

AIGC如何重塑软件开发流程:从工具应用到流程再造

1. 项目概述:当开源社区遇上生成式AI最近在GitHub上闲逛,又看到了Phodal(左耳朵耗子)的新项目aigc。说实话,这个名字本身就充满了想象空间——AIGC,人工智能生成内容,这几乎是过去一年里技术圈最…...

大模型代码生成质量差异分析与优化实践

1. 项目概述:大模型代码生成能力的差异研究最近在多个技术社区看到开发者讨论不同大语言模型(LLM)的代码生成质量差异,这让我想起去年参与的一个企业级代码生成项目。当时我们对比了市面上主流的7款LLM,发现虽然所有模型都能产出可运行的代码…...

别再手动传文件了!用Ansible自动化部署Kettle 8.3服务器(附Playbook)

从手动到自动化:基于Ansible的Kettle 8.3服务器高效部署指南 在数据集成与ETL领域,Pentaho Data Integration(Kettle)作为开源工具的代表,已成为企业级数据处理的标配。然而传统的手动部署方式在面对多节点、高频率更新…...

Windows 11中WSL 2安装与配置全指南

1. Windows Subsystem for Linux (WSL) 发展历程回顾Windows Subsystem for Linux(简称WSL)是微软在2016年推出的一项革命性功能,它首次让开发者能够在Windows系统上原生运行Linux二进制文件。作为一个在Windows内核上实现的兼容层&#xff0…...

Windows Cleaner:彻底释放C盘空间的智能解决方案

Windows Cleaner:彻底释放C盘空间的智能解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你的C盘是否经常亮起红色警告?系统运行越…...

ChatGPT因果推理能力评估:从事件识别到解释生成的实践与洞见

1. 项目概述与背景最近在跟进大语言模型(LLM)在特定认知任务上的表现,特别是因果推理这个领域。因果推理能力是很多高级NLP应用,比如问答、决策支持、事件预测的基石。ChatGPT这类模型在对话、创作上表现惊艳,但它真的…...

告别手忙脚乱!用立创EDA焊接辅助工具,像玩游戏一样轻松焊接你的PCB板

像玩游戏一样轻松焊接:立创EDA焊接辅助工具实战指南 焊接电路板对许多电子爱好者来说,既是创作的乐趣所在,也是容易出错的技术难点。传统焊接过程中,我们需要不断对照原理图、BOM表和实物板子,稍不留神就可能焊错元件或…...

C/C++中线程基本概念与创建详解

一、线程基本概念线程是在进程中产生的一个执行单元,是CPU调度和分配的最小单元,其在同一个进程中与其他线程并行运行,他们可以共享进程内的资源,比如内存、地址空间、打开的文件等等。线程是CPU调度和分派的基本单位,…...

如何免费解锁8大网盘全速下载:网盘直链下载助手终极指南

如何免费解锁8大网盘全速下载:网盘直链下载助手终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

F-RAM技术原理、优势与应用场景解析

1. F-RAM技术原理与核心特性解析铁电随机存取存储器(Ferroelectric Random Access Memory,简称F-RAM)是一种基于铁电材料极化特性的非易失性存储技术。与传统存储器相比,F-RAM在物理结构和工作原理上有着本质区别。1.1 铁电效应与…...

别再乱用res.send了!Express响应方法res.write、res.end、res.send、res.json的保姆级选择指南

Express响应方法深度解析:如何精准选择res.write、res.end、res.send和res.json 在Node.js开发中,Express框架的响应处理是每个开发者必须掌握的核心技能。面对不同的业务场景,如何选择合适的响应方法直接影响着应用的性能和开发效率。本文将…...

WarcraftHelper:魔兽争霸III终极性能增强与兼容性修复解决方案

WarcraftHelper:魔兽争霸III终极性能增强与兼容性修复解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是专为魔兽争…...

ARM浮动许可证管理实战与优化指南

1. ARM浮动许可证管理基础与核心概念在嵌入式开发领域,ARM工具链的许可证管理是每个技术团队必须掌握的技能。作为从业十余年的嵌入式系统架构师,我处理过各种复杂的许可证配置场景,今天将系统性地分享ARM浮动许可证服务器的实战经验。浮动许…...

自适应剪枝高斯过程优化高维鞍点搜索效率

1. 项目背景与核心挑战在复杂系统优化领域,鞍点搜索一直是计算密集型任务中的关键瓶颈。传统的高斯过程(Gaussian Process, GP)方法虽然能有效建模非线性响应面,但在高维参数空间中面临两大痛点:一是计算复杂度随样本量…...

ADLINK SBC35-ALN单板计算机:工业自动化与边缘计算新选择

1. ADLINK SBC35-ALN 3.5英寸单板计算机深度解析在工业自动化和嵌入式系统领域,ADLINK最新推出的SBC35-ALN 3.5英寸单板计算机引起了广泛关注。这款基于Intel Alder Lake-N架构的产品,凭借其紧凑尺寸和丰富接口,为边缘计算和专用设备开发提供…...

Nginx等保测评避坑指南:数据备份、冗余与‘不适用’项到底怎么判?

Nginx等保测评实战解析:数据备份、冗余设计与"不适用"项判定逻辑 在等保测评的实际操作中,Nginx作为反向代理和Web服务器的角色定位,常常让测评人员和安全顾问在"数据备份恢复"、"冗余设计"等关键项的判定上陷…...

Proxmox VE模板制作实战:将Ubuntu 22.04 Cloud-Init镜像打造成你的“黄金镜像”

Proxmox VE黄金镜像实战:从Ubuntu 22.04 Cloud-Init到企业级模板的深度优化 在虚拟化环境中,标准化镜像的管理效率直接决定了运维团队的生产力水平。想象一下这样的场景:凌晨三点收到业务扩容需求,你需要快速部署20台配置一致的Ub…...

OpenClaw智能路由插件:基于任务类型自动分配AI模型

1. 项目概述:一个让AI“各司其职”的智能路由插件最近在折腾一个叫OpenClaw的AI网关项目,它本身是个挺有意思的东西,能把各种大模型(比如Claude、GPT、本地跑的Llama)统一管理起来,通过一个入口&#xff08…...

基于Python与GPT的自动化股票报告生成系统实践

1. 项目概述:从零构建一个AI驱动的自动化股票报告生成器最近在捣鼓一个挺有意思的小项目,我把它叫做“AI股票报告生成器”。核心想法很简单:能不能让程序自动去抓取我关心的股票数据,然后扔给类似ChatGPT这样的AI模型,…...

SwiftLLM:专为LLM推理优化研究设计的极简高性能框架

1. SwiftLLM:为研究而生的极简高性能LLM推理引擎 如果你正在研究大语言模型(LLM)的推理优化,比如想尝试新的调度算法、改进注意力机制,或者验证某个内存管理的新点子,你可能会立刻想到 vLLM、LightLLM 这些…...

Arm Cortex-X925系统寄存器解析与优化实践

1. Arm Cortex-X925系统寄存器深度解析在Armv9架构的Cortex-X925高性能核心中,系统寄存器扮演着处理器控制中枢的角色。作为一位长期从事Arm架构开发的工程师,我经常需要深入理解这些寄存器的行为特性。今天我们就来重点剖析AFSR1_EL1和AMAIR_EL1这两个关…...

AI插件跨平台开发指南:一次编写,多平台分发实战

1. 项目概述:一个AI插件,一次编写,全平台分发如果你和我一样,最近在折腾各种AI开发工具,比如Claude Code、Cursor、Gemini CLI,那你肯定遇到过这个头疼的问题:为每个平台写插件,就像…...

告别C++!用Python给SolidWorks 2022写插件,5步搞定自定义菜单(附完整源码)

Python驱动SolidWorks二次开发:5步构建高效插件体系 在工业设计领域,SolidWorks长期占据着三维CAD软件的领导地位,但其传统的C/VB二次开发方式让许多现代开发者望而却步。当Python遇上SolidWorks,我们不仅获得了语法简洁的开发体验…...

苹果CMSv10高端定制版 附带采集插件

内容目录一、详细介绍安装部署建议二、效果展示1.部分代码2.效果图展示一、详细介绍 与官方区别就是去掉了官方更新远程代码,没有沿用官方的新界面,简单点就是安全基数升级了 运行目录设定为: public ,采集插件请在应用中启用##…...

批量更新不用游标:CASE WHEN + 集合操作,一行SQL搞定!

📌 今日关键词:批量更新、效率优化、CASE WHEN、集合操作、MySQL​技巧 大家好呀!我是数据库小学妹👋 今天上午我们学了​游标​——它能逐行处理数据,但在处理大量数据时容易“卡顿”。那有没有更简单、更高效的办法呢…...

Cursor编辑器AI补全增强插件:让代码助手更懂你的项目

1. 项目概述:一个为 Cursor 编辑器注入 AI 灵魂的插件如果你和我一样,日常开发重度依赖 Cursor 这款“AI 原生”的代码编辑器,那你肯定对它的 AI 自动补全(Autocomplete)功能又爱又恨。爱的是,它确实能根据…...

企业网盘,基于 .NET 技术开发,用于构建安全高效的文件云存储和云管理平台。

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 企业网盘,基于 .NET 技术开发,用于构建安全高效的文件云存储和云管理平台。 自动同步提供智能化的文件上传、下载及版本更替功能,实现便捷的文件云备份和云共享解决方…...