flink集群(docker版)配置及使用

这篇具有很好参考价值的文章主要介绍了flink集群(docker版)配置及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 环境说明

注意:以下所有操作都在root用户下完成 sudo su - root

ip

操作系统版本

用途

192.168.30.18

Ubuntu 18.04.4 LTS

jobmanager容器、nfs服务(存储flink的checkpoint、savepoint)

192.168.30.17

Ubuntu 18.04.4 LTS

taskmanager02容器

192.168.30.16

Ubuntu 18.04.4 LTS

taskmanager01容器

2 部署nfs

在192.168.30.18节点上操作

2.1安装nfs软件包

# apt-get install rpcbind -y
# apt-get install nfs-kernel-server -y

2.2 配置参数,映射checkpoints存储目录

# vim /etc/exports
/home/liuchan/config/flink/ 192.168.30.0/24(rw,sync,no_root_squash,no_all_squash)

2.3 重启nfs服务并加入开机自启动

# systemctl restart rpcbind
# systemctl enable rpcbind

# systemctl restart nfs-kernel-server
# systemctl enable nfs-kernel-server

2.4 查看nfs状态

# rpcinfo -p localhost
   program vers proto   port  service
   100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  34715  mountd
    100005    1   tcp  46897  mountd
    100005    2   udp  48806  mountd
    100005    2   tcp  39469  mountd
    100005    3   udp  41227  mountd
    100005    3   tcp  34733  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049
    100003    3   udp   2049  nfs
    100227    3   udp   2049
    100021    1   udp  35642  nlockmgr
    100021    3   udp  35642  nlockmgr
    100021    4   udp  35642  nlockmgr
    100021    1   tcp  42347  nlockmgr
    100021    3   tcp  42347  nlockmgr
    100021    4   tcp  42347  nlockmgr

2.5 查看nfs映射信息

# exportfs -v
/home/liuchan/config/flink
192.168.30.0/24(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)

3 客户端挂载nfs

在192.168.30.16、17节点上操作

3.1 安装nfs挂载工具

# apt install nfs-common

# showmount -e 192.168.30.18
Export list for 192.168.30.18:
/home/liuchan/config/flink 192.168.30.0/24

3.2 创建挂载目录

# mkdir -p /home/liuchan/config/flink

3.3 挂载nfs并写入到/etc/fstab

# echo '192.168.30.18:/home/liuchan/config/flink /home/liuchan/config/flink nfs defaults 0 0' >> /etc/fstab
# mount -a

4 集群通用配置说明

4.1 docker-compose说明

1 compose目录结构

# tree -LFa 1 flink/
flink
├── conf/                 # flink容器配置文件目录
├── docker-compose.yml    # docker-compose配置文件
├── Dockerfile            # 构建flink镜像用到的Dockerfile文件
├── .env                  # docker-compose环境变量文件
├── flink-1.10.0.tar.gz   # 构建flink镜像用到的flink-1.10.0压缩包
├── jdk1.8.0_251.tar.gz   # 构建flink镜像用到的jdk1.8.0_251压缩包
├── log/                  # flink容器日志目录
├── run.sh                # 构建flink镜像用到的flink容器启动脚本
└── tmp/                  # flink容器临时文件目录

3 directories, 6 files

 

2 .env文件

# cat flink/.env
IMAGE=flink:1.10.0-v01
FLINK_HOME=/usr/local/flink-1.10.0

 

3 Dockerfile文件

# cat flink/Dockerfile
FROM centos:7
LABEL maintainer lc

ARG FLINK_VERSION=flink-1.10.0
ARG JDK_VERSION=jdk1.8.0_251

RUN yum install wget curl unzip iproute net-tools -y && \
    yum clean all && \
    rm -rf /var/cache/yum/* && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ADD ${FLINK_VERSION}.tar.gz /usr/local
ADD ${JDK_VERSION}.tar.gz   /usr/local

ENV JAVA_HOME /usr/local/${JDK_VERSION}
ENV CLASSPATH $JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
ENV PATH $JAVA_HOME/bin:$PATH
ENV FLINK_HOME=/usr/local/${FLINK_VERSION}

COPY run.sh /root

WORKDIR ${FLINK_HOME}
EXPOSE 8081 6123
ENTRYPOINT ["/root/run.sh"]

 

4 run.sh文件

#!/bin/bash

FLINK_JOB_MANAGER_SH=$FLINK_HOME/bin/jobmanager.sh
FLINK_TASK_MANAGER_SH=$FLINK_HOME/bin/taskmanager.sh

case "$1" in
"jobmanager")
$FLINK_JOB_MANAGER_SH start-foreground
;;

"taskmanager")
$FLINK_TASK_MANAGER_SH start-foreground
;;

*)
echo "COMMAND ERROR"
;;
esac

4.2 flink集群配置文件

1 修改flink-conf.yaml

# vim flink/conf/flink-conf.yaml
# jobmanager节点地址
jobmanager.rpc.address: 192.168.30.18
# checkpoints保留的个数,全局配置
state.checkpoints.num-retained: 16
# Blog Server
taskmanager.rpc.port: 40010-40020
# Task Manager
metrics.internal.query-service.port: 40030-40040
# Metrics
blob.server.port: 40050-40060

 

2 修改masters

# vim flink/conf/masters
192.168.30.18:8081

 

3 修改slaves

# cat flink/conf/slaves 
192.168.30.16
192.168.30.17

5 启动容器

5.1 jobmanager

192.168.30.18节点

1 docker-compose.yml配置文件

# cat flink/docker-compose.yml
version: '3'
networks:
  rulr-network:
    external: true
services:

  flink-1.10.0-v01:
    image: flink:1.10.0-v01
    build:
      context: ./
      dockerfile: Dockerfile

  jobmanager:
    container_name: jobmanager
    hostname: jobmanager
    image: ${IMAGE}
    volumes:
      - ./conf:${FLINK_HOME}/conf
      - ./tmp/jobmanager-tmp:/tmp
      - ./log/jobmanager-log:${FLINK_HOME}/log
      - /home/liuchan/config/flink:/home/liuchan/config/flink
      - /home/liuchan/servers/compute-streaming:/home/liuchan/servers/compute-streaming
      - /home/liuchan/config/servers:/home/liuchan/config/servers
    ports:
      - "8081:8081"
      - "6123:6123"
      - "40010-40020:40010-40020"
      - "40030-40040:40030-40040"
      - "40050-40060:40050-40060"
    command: jobmanager
    restart: always
    networks:
      - rulr-network
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G

 

2 构建容器

# cd flink-jobmanager/
# docker-compose build
# docker-compose up -d

5.2 taskmanager02

192.168.30.17节点

1 docker-compose.yml配置文件

# cat flink/docker-compose.yml
version: '3'
networks:
  rulr-network:
    external: true
services:

  flink-1.10.0-v01:
    image: flink:1.10.0-v01
    build:
      context: ./
      dockerfile: Dockerfile

  taskmanager02:
    container_name: taskmanager02
    hostname: taskmanager02
    image: ${IMAGE}
    ports:
      - "40010-40020:40010-40020"
      - "40030-40040:40030-40040"
      - "40050-40060:40050-40060"
    volumes:
      - ./conf:${FLINK_HOME}/conf
      - ./tmp/taskmanager02-tmp:/tmp
      - ./log/taskmanager02-log:${FLINK_HOME}/log
      - /home/liuchan/config/flink:/home/liuchan/config/flink
    command: taskmanager
    restart: always
    networks:
      - rulr-network
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G

 

2 构建容器

# cd flink-taskmanager02/
# docker-compose build
# docker-compose up -d

5.3 taskmanager01

192.168.30.16节点

1 docker-compose.yml配置文件

# cat flink/docker-compose.yml
version: '3'
networks:
  rulr-network:
    external: true
services:

  flink-1.10.0-v01:
    image: flink:1.10.0-v01
    build:
      context: ./
      dockerfile: Dockerfile

  taskmanager01:
    container_name: taskmanager01
    hostname: taskmanager01
    image: ${IMAGE}
    ports:
      - "40010-40020:40010-40020"
      - "40030-40040:40030-40040"
      - "40050-40060:40050-40060"
    volumes:
      - ./conf:${FLINK_HOME}/conf
      - ./tmp/taskmanager01-tmp:/tmp
      - ./log/taskmanager01-log:${FLINK_HOME}/log
      - /home/liuchan/config/flink:/home/liuchan/config/flink
    command: taskmanager
    restart: always
    networks:
      - rulr-network
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G

 

2 构建容器

# cd flink-taskmanager01/
# docker-compose build
# docker-compose up -d

6 运行flink任务

6.1 运行jar包

# docker exec -it flink-jobmanager bash
[root@jobmanager flink-1.10.0]# bin/flink run -d /home/liuchan/servers/compute-streaming/compute-streaming.jar --appMode=2

6.2 在flink的UI页面查看

URL: http://192.168.30.18:8081/

# 总体概览


# Task Managers信息


# 查看JOB详细信息

6.3 测试

1 停掉正在运行job的TaskManager容器

从上面的截图可以判断出ip为172.18.0.10容器正在运行job,该容器在192.168.30.17服务器上。停掉taskmanager02容器。

# cd flink-taskmanager02/
# docker-compose down

 

2 在flink的UI中查看

从下图可以看到,job经历超时报错后,运行的TaskManager节点由taskmanager02容器转移到了taskmanager01容器

 

 

 

 

 

3 恢复taskmanager02容器

# cd flink-taskmanager02/
# docker-compose up -d
# 在flink的UI可以看到taskmanager02容器又上线了

7 Checkpoint、Savepoint

7.1 Checkpoint、Savepoint说明

1 Checkpoint

(1) Flink Checkpoint是一种容错恢复机制。这种机制保证了实时程序运行时,即使突然遇到异常也能够进行自我恢复,不需要用户指定。Checkpoint是增量做的,每次的时间较短,数据量较小。

(2) Checkpoint对于用户层面,是透明的,用户会感觉程序一直在运行。

(3) Flink Checkpoint是Flink自身的系统行为,用户无法对其进行交互,用户可以在程序启动之前,设置好实时程序Checkpoint相关参数,当程序启动之后,剩下的就全交给Flink自行管理。

(4) Checkpoint默认关闭,Checkpoint的启用、存储方式、存储位置,在应用代码中配置,其中存储方式、存储位置,也可以在flink-conf.yaml文件中通过state.backend、state.checkpoints.dir参数配置全局参数,但应用代码中配置优先级更高。

(5) Checkpoint 默认保留数为1,通过修改flink-conf.yaml文件中state.checkpoints.num-retained参数设置Checkpoint保留数量。

(6) Checkpoint默认job程序取消后删除,在应用代码中通过设置以下代码实现保留:
"getCheckpointConfig().enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);"
(5) Checkpoint的组成:Checkpoint根目录/CheckpointID

 

2 Savepoint

(1) Flink Savepoint你可以把它当做在某个时间点程序状态全局镜像,以后程序在进行升级,或者修改bug、并行度等情况,还能从保存的状态位继续启动恢复,需要用户指定。是全量做的,每次的时间较长,数据量较大。

(2) Flink Savepoint一般存储在文件系统上面,它需要用户主动进行触发。

(3) Savepoint会一直保存,除非用户删除。

(4) flink-conf.yaml文件state.savepoints.dir参数用以配置savepoints的存储目录,默认none。

(5) Savepoint的组成:Savepoint根目录/savepoint-jobid前六位-12随机数字及字母组合

7.2 flink常用命令

1 通用命令

(1) 命令执行
bin/flink run [OPTIONS] <jar-file> <arguments>
options:
-d: 任务提交后,断开session,会话继续保持,即表示将job放到后台运行。

示例:后台运行job
# bin/flink run -d /home/liuchan/servers/compute-streaming/compute-streaming.jar --appMode=2

(2) 查看任务列表
bin/flink list [OPTIONS]
options:
-a: 全部显示所有程序及其作业ID
-r: 仅显示正在运行的程序及其作业ID
-s: 仅显示计划的程序及其作业ID

示例:查看正在运行的job
# bin/flink list -r

 

2 操作Savepoint

(1) 在取消任务时保存Savepoint
bin/flink cancel [OPTIONS] <Job ID>
options: 
-s: 触发保存点并取消作业。目标目录是可选的。如果未指定目录,则
配置的默认目录使用(state.savepoints.dir)。
官方文档已经不推荐使用,建议使用stop。

示例:
# bin/flink cancel -s /home/liuchan/config/flink/savepoints 1af3e95778850085614d175657948369

(2) 在停止任务时保存Savepoint
bin/flink stop [OPTIONS] <Job ID>
options:
-p: <savepointPath>保存点的路径,如果没有指定目录时,将使
用默认值配置(state.savepoints.dir)。

示例:
# bin/flink stop -p /home/liuchan/config/flink/savepoints 1504a27aaecba591877a68a233ee9240


(3) 触发Savepoint
bin/flink savepoint [OPTIONS] <Job ID> [<target directory>]
options:

示例:
# bin/flink savepoint 3b74f51cc4186aa4bf5bf84e7e716d0f /home/liuchan/config/flink/savepoints


(4) 从指定的savepoint运行job
bin/flink run [OPTIONS] <jar-file> <arguments>
options:
-s: 从savepoint<savepointPath>路径到用于还原作业的保存点

示例:
# bin/flink run -d -s /home/liuchan/config/flink/savepoints/savepoint-1af3e9-7a3891c86538 /home/liuchan/servers/compute-streaming/compute-streaming.jar --appMode=2

 

3 取消和停止job的区别如下

(1) cancel()调用,立即调用作业算子的cancel()方法,以尽快取消他们。如果算子在接
到cancel()调用后没有停止,flink将开始定期中断算子线程的执行,直到所有算子停止
为止。

(2) stop()是更加优雅的方式,仅适用于source实现了stoppableFunction接口的作业。
当用户请求停止作业时,作业的所有source都将被stop()方法调用,指导所有source
正常关闭时,作业才会正常结束,这种方式,使作业正常处理完所有作业。
文章来源地址https://www.toymoban.com/news/detail-772459.html

到了这里,关于flink集群(docker版)配置及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker之网络配置的使用

         🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《Docker之网络配置的使用》。🎯🎯 🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁         在上期的博客的分享过程中我们分享了Dockerfile如何去

    2024年01月17日
    浏览(45)
  • 【Docker】网络配置及自定义网络的使用

            Docker的网络配置主要是指Docker容器与外部网络之间的连接设置,包括容器内部的IP地址、端口号等。Docker提供了多种网络模式,包括bridge、host、none等,以满足不同的需求。         默认情况下,Docker使用bridge模式,即创建一个虚拟网桥,将容器连接到该网桥上

    2024年01月20日
    浏览(44)
  • Linux多虚拟机集群化配置详解(Zookeeper集群、Kafka集群、Hadoop集群、HBase集群、Spark集群、Flink集群、Zabbix、Grafana部署)

    前面安装的软件,都是以单机模式运行的,学习大数据相关的软件部署,后续安装软件服务,大多数都是以集群化(多台服务器共同工作)模式运行的。所以,需要完成集群化环境的前置准备,包括创建多台虚拟机,配置主机名映射,SSH免密登录等等。 我们可以使用VMware提供

    2024年02月04日
    浏览(52)
  • Docker中网络的使用和配置用法详解

    1.1 Docker默认网桥         安装Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。 使用 docker network ls 命令查看: Docker 安装时会自动在 host 上创建三个网络

    2023年04月15日
    浏览(30)
  • Docker_安装使用_容器镜像_Docker-compose_常用指令_网络配置

    相关概念 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题。 Docker解决依赖的兼容问题: Docker允

    2024年02月02日
    浏览(58)
  • Docker:Docker集群配置与应用(Docker Swarm)

    可以认为Docker Swarm(Go语言开发)将一个Docker主机池变成了一个单独的虚拟机。 了解 Docker Swarm,掌握 Swarm 集群 建立及节点管理 ; 了解 Swarm 服务,学会在 集群中部署和管理服务 ; 了解 Swarm 网络, 掌握 overlay 网络的创建和使用 ; 了解 Swarm 高可用性和负载平衡,学会配置外部

    2024年02月03日
    浏览(48)
  • CentOS 7 使用Docker方式搭建ElasticSearch 7.7.0 三节点集群,并配置elasticsearch-head插件,ik分词器,以及Kibana可视化平台

    IP 角色 172.16.31.191 elasticsearch-1 172.16.31.192 elasticsearch-2 172.16.31.193 elasticsearch-3 并创建相关挂载目录,3台虚拟机都要,如下 还要对文件夹加设置开放权限,如果不开放权限,则会报错无法写入数据的情况,3台虚拟机都要,如下 172.16.31.191 172.16.31.192 172.16.31.193 172.16.31.191 172.16.3

    2024年02月04日
    浏览(48)
  • docker网络及部署集群和打包镜像

    清空下前面的docker 镜像、容器 测试 三个网络 问题: docker 是如果处理容器网络访问的? 原理 1、我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要按照了docker,就会有一个docker0桥接模式,使用的技术是veth-pair技术! 再次测试 ip addr 2 、再启动一个容器测

    2024年02月02日
    浏览(38)
  • docker 配置 Mysql主从集群

    Docker version 20.10.17, build 100c701 MySQL Image version: 8.0.32 Docker container mysql-master is source. mysql-replica is replication. master == source. replica == slave.名称叫法不一样而已。 Choose one of the way,与replica同步数据两种情况: source有存在的数据并且你想同步到replica,这种需要mysqldump备份source数据,

    2023年04月14日
    浏览(47)
  • Flink on K8S生产集群使用StreamPark管理

    Flink on Native Kubernetes 目前支持 Application 模式和 Session 模式,两者对比 Application 模式部署规避了 Session 模式的资源隔离问题、以及客户端资源消耗问题,因此生产环境更推荐采用 Application Mode 部署 Flink 任务。下面我们分别看看使用原始脚本的方式和使用 StreamPark 开发部署一个

    2024年02月03日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包