环境交代

  1. windows 10 WSL
  2. Flink 1.13.5
  3. windows docker
    1. Docker version 20.10.12, build e91ed57
    2. docker-compose version 1.29.2, build 5becea4c

备注说明

  1. 新版本已经没有window的安装文档了
    1. 旧版存在bat的文档
  2. 我windows直接启动失败,错误日志找不到什么什么类
    1. 放弃了
  3. 下载地址

lib依赖

下述中有两个依赖是我加入

  • 上传的 任务JAR 可以使用 lib下的依赖,
    • 所以自己编写的flink项目可以将公用的jar放到 flink的lib目录下,这样打包的jar就可以不要么大了
      • <scope>provided</scope>
  • 如果新放入新的依赖jar,Flink需要重启
    • 暂时没找到不重启的方法

image.png

Flink配置文件配置说明

image.png

官方配置文档

https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/config/

一个任务槽只能执行一个任务,当任务槽不满的情况下job会无法正常工作

1.13.5 中默认只有一个,我第一次使用时, 启动了两个任务,第二个死活启动不了,异常说无法获取资源

  • 配置 : taskmanager.numberOfTaskSlots: 3

    防止flink 重启 submit的jar包丢失

    每次重启,我上传的jar都不见了,又得重新来一次,测试没事,如果上来生产这TM不是玩我. 我使用的是root账户创建的 下述文件夹,但是启动Flink用的是 非root账户,导致了权限不足从而启动失败

  • 配置: web.upload.dir: /opt/flink/target

    • 注意文件夹是否有当前用户的操作权限
    • 赋权:chown -R 用户名 文件夹路径

      禁止WEBUI上传JAR

  • 配置:web.submit.enable: true

    乱码配置 根据实际现象而定编码

  • env.java.opts: "-Dfile.encoding=UTF-8"

配置checkpoint 保存文件夹

  • state.checkpoints.dir: hdfs://namenode-host:port/flink-checkpoints
  • state.checkpoints.dir: file:////opt/flink/ck # chinkPoint FsStateBackend 注意当前用在对这个目录是否有操作权限

通过 WSL 安装

开始进入 wsl 的目录 \\wsl$

1. 进入 wsl terminal

2. 通过wsl 进入下载的并解压好的 flink/bin

你也可以将下好的Flink放进wsl的目录中去

3. ./start-cluster.sh

这样就启动了一个集群了 (一个master 一个 slave)

image.png
image.png

Docker-compose 安装

官网

dockerComposeFile

  • E:/FLINK/docker/to/lib:/opt/flink/lib : 如果配置了这个必须要实现把flink原本来lib中的jar放一份,要不然启动会失败
  1. version: "2.2"
  2. services:
  3. jobmanager:
  4. image: flink:1.13.5-scala_2.12
  5. # 给容器取个名字
  6. container_name: jobflink
  7. ports:
  8. - "8081:8081"
  9. command: jobmanager
  10. volumes:
  11. - E:/FLINK/docker/to/job/artifacts:/opt/flink/usrlib # job jar 上传你自己写的工作包
  12. - E:/FLINK/docker/to/lib:/opt/flink/lib # 环境jar, 工作中需要依赖的jar,将lib映射出来方便我随时添加新的公共依赖
  13. - E:/FLINK/docker/to/ck:/opt/flink/ck # chinkPoint 保存的路径挂载出去
  14. - E:/FLINK/docker/to/target:/opt/flink/target # 防止flink 重启 submit的jar包丢失
  15. environment:
  16. - |
  17. FLINK_PROPERTIES=
  18. jobmanager.rpc.address: jobmanager
  19. parallelism.default: 2
  20. state.backend: hashmap # chinkPoint FsStateBackend (taskmanager不用配置)
  21. state.checkpoints.dir: file:////opt/flink/ck # chinkPoint FsStateBackend 注意当前用在对这个目录是否有操作权限
  22. web.upload.dir: /opt/flink/target # 防止flink 重启 submit的jar包丢失(taskmanager不用配置)
  23. taskmanager:
  24. image: flink:1.13.5-scala_2.12
  25. # 给容器取个名字
  26. container_name: task1flink
  27. depends_on:
  28. - jobmanager
  29. command: taskmanager
  30. volumes:
  31. - E:/FLINK/docker/to/job/artifacts:/opt/flink/usrlib
  32. - E:/FLINK/docker/to/lib:/opt/flink/lib
  33. environment:
  34. - |
  35. FLINK_PROPERTIES=
  36. jobmanager.rpc.address: jobmanager
  37. taskmanager.numberOfTaskSlots: 2 # 1.13.5 默认只有一个
  38. parallelism.default: 2

启动命令

  1. docker-compose -f docker-compose-flink.yml -p flink up -d