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之网络配置的使用

    Docker之网络配置的使用

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

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

    【Docker】网络配置及自定义网络的使用

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

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

    Linux多虚拟机集群化配置详解(Zookeeper集群、Kafka集群、Hadoop集群、HBase集群、Spark集群、Flink集群、Zabbix、Grafana部署)

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

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

    Docker中网络的使用和配置用法详解

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

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

    Docker_安装使用_容器镜像_Docker-compose_常用指令_网络配置

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

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

    Docker:Docker集群配置与应用(Docker Swarm)

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

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

    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日
    浏览(12)
  • docker网络及部署集群和打包镜像

    docker网络及部署集群和打包镜像

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

    2024年02月02日
    浏览(13)
  • 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日
    浏览(8)
  • Flink on K8S生产集群使用StreamPark管理

    Flink on K8S生产集群使用StreamPark管理

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

    2024年02月03日
    浏览(14)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包