Flink 本地安装与运行教程

一、环境要求

确认你的环境

  • Java: 11
  • Scala: 2.12
  • Spark: 3.5.0

推荐 Flink 版本

  • Flink 1.17.2 (完全兼容上述环境)

二、安装 Flink

1. 下载 Flink

使用 aria2 多线程下载(推荐):

# 进入安装目录
cd /opt/bigdata

# 使用清华镜像下载
sudo aria2c -x 16 https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.17.2/flink-1.17.2-bin-scala_2.12.tgz

或使用 curl:

sudo curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/flink/flink-1.17.2/flink-1.17.2-bin-scala_2.12.tgz

国内其他镜像源:

  • 华为云:https://repo.huaweicloud.com/apache/flink/flink-1.17.2/flink-1.17.2-bin-scala_2.12.tgz
  • 阿里云:https://mirrors.aliyun.com/apache/flink/flink-1.17.2/flink-1.17.2-bin-scala_2.12.tgz

2. 解压和配置

# 解压文件
sudo tar -xzf flink-1.17.2-bin-scala_2.12.tgz

# 重命名(可选,方便使用)
sudo mv flink-1.17.2 flink

# 修改权限
sudo chown -R $(whoami) /opt/bigdata/flink

# 清理安装包(可选)
sudo rm flink-1.17.2-bin-scala_2.12.tgz

3. 配置环境变量

编辑 shell 配置文件:

nano ~/.zshrc

在文件末尾添加:

# Flink 配置
export FLINK_HOME=/opt/bigdata/flink
export PATH=$FLINK_HOME/bin:$PATH

保存并退出(按 Ctrl+X,然后按 Y,再按 Enter

使配置生效:

source ~/.zshrc

4. 验证安装

flink --version

应该看到类似输出:

Version: 1.17.2, Commit ID: ...

三、修改端口配置(避免与 Spark 冲突)

1. 编辑 Flink 配置文件

nano /opt/bigdata/flink/conf/flink-conf.yaml

2. 修改关键配置

找到或添加以下配置:

# JobManager 地址
jobmanager.rpc.address: localhost

# JobManager RPC 端口
jobmanager.rpc.port: 6123

# Web UI 端口(改成 8082,避免与 Spark 8081 冲突)
rest.port: 8082

# TaskManager 配置
taskmanager.numberOfTaskSlots: 4

# 内存配置
taskmanager.memory.process.size: 1728m
jobmanager.memory.process.size: 1600m

# 默认并行度
parallelism.default: 1

保存并退出。

3. 端口分配说明

服务端口说明
Spark Master UI8080Spark 集群管理界面
Spark Application UI4040Spark 任务运行界面
Spark History Server8081Spark 历史任务界面
Flink Dashboard8082Flink Web 管理界面

四、启动 Flink 集群

1. 启动集群

start-cluster.sh

2. 验证启动成功

检查 Java 进程:

jps

应该看到:

  • StandaloneSessionClusterEntrypoint (JobManager)
  • TaskManagerRunner (TaskManager)

检查端口占用:

lsof -i :8082

查看日志:

tail -f /opt/bigdata/flink/log/flink-*-standalonesession-*.log

3. 访问 Web UI

打开浏览器访问:http://localhost:8082

注意:正常默认的端口号是8081,与spark ui的端口号冲突,这里需要先停止flink程序,然后修改默认的端口号为8082.

你应该看到 Flink Dashboard,包含:

  • 任务管理
  • Task Managers
  • Job Manager
  • 配置信息

4. 停止集群

stop-cluster.sh

五、运行测试示例

1. 运行内置的 WordCount 示例

# 确保集群已启动
start-cluster.sh

# 运行示例程序
flink run /opt/bigdata/flink/examples/streaming/WordCount.jar

# 查看输出结果
tail -f /opt/bigdata/flink/log/flink-*-taskexecutor-*.out

2. 在 Web UI 中查看

访问 http://localhost:8082,可以看到:

  • 正在运行的任务
  • 任务执行计划
  • 性能指标

六、在 IDEA 中开发 Flink 程序

1. 创建或更新 Maven 项目

在你的 pom.xml 中添加 Flink 依赖:

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <scala.version>2.12.18</scala.version>
    <scala.binary.version>2.12</scala.binary.version>
    <spark.version>3.5.0</spark.version>
    <flink.version>1.17.2</flink.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <!-- Scala 核心库 -->
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>${scala.version}</version>
    </dependency>

    <!-- Flink Streaming Scala API -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-scala_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <!-- Flink 客户端 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients</artifactId>
        <version>${flink.version}</version>
    </dependency>

    <!-- Flink Table API (可选) -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-api-scala-bridge_${scala.binary.version}</artifactId>
        <version>${flink.version}</version>
    </dependency>
</dependencies>

2. 创建第一个 Flink 程序

src/main/scala/com/example 下创建 FlinkDemo.scala

package com.example

import org.apache.flink.streaming.api.scala._

object FlinkDemo {
  def main(args: Array[String]): Unit = {
    // 创建流执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    
    // 创建数据源
    val data = env.fromElements(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    
    // 过滤小于 5 的数字
    val filtered = data.filter(_ < 5)
    
    // 打印结果
    filtered.print()
    
    // 执行任务
    env.execute("Flink Demo")
  }
}

3. 运行程序

在 IDEA 中:

  1. 右键点击 FlinkDemo.scala
  2. 选择 Run 'FlinkDemo'

输出结果:

1
2
3
4

七、常用命令总结

集群管理

# 启动集群
start-cluster.sh

# 停止集群
stop-cluster.sh

# 查看 Flink 进程
jps | grep -E "Standalone|TaskManager"

# 查看版本
flink --version

任务提交

# 提交任务
flink run /path/to/your-job.jar

# 列出正在运行的任务
flink list

# 取消任务
flink cancel <job-id>

日志查看

# 查看 JobManager 日志
tail -f $FLINK_HOME/log/flink-*-standalonesession-*.log

# 查看 TaskManager 日志
tail -f $FLINK_HOME/log/flink-*-taskexecutor-*.log

# 查看任务输出
tail -f $FLINK_HOME/log/flink-*-taskexecutor-*.out

清理日志

rm -rf /opt/bigdata/flink/log/*

八、常见问题排查

1. 端口被占用

问题:启动失败,提示端口已被占用

解决

# 查看端口占用
lsof -i :8082

# 杀掉占用端口的进程
kill -9 <PID>

# 或修改配置文件中的 rest.port

2. Java 版本不匹配

问题:启动失败,Java 版本错误

解决

# 检查 Java 版本
java -version

# 如果需要,设置 JAVA_HOME
export JAVA_HOME=/path/to/java11

3. 内存不足

问题:TaskManager 启动失败

解决:修改 flink-conf.yaml

taskmanager.memory.process.size: 1024m
jobmanager.memory.process.size: 1024m

4. 权限问题

问题:无法启动或写入日志

解决

sudo chown -R $(whoami) /opt/bigdata/flink
chmod -R 755 /opt/bigdata/flink

九、版本兼容性总结

组件版本状态
Java11✅ 完美兼容
Scala2.12✅ 完美兼容
Spark3.5.0✅ 稳定版本
Flink1.17.2✅ 推荐版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值