Flink实时计算中台Kubernates功能改造点

news2024/11/23 20:51:24

背景

平台为数据开发人员提供基本的实时作业的管理功能,其中包括jar、sql等作业的在线开发;因此中台需要提供一个统一的SDK支持平台能够实现flink jar作业的发布;绝大多数情况下企业可能会考虑Flink On Yarn的这个发布模式,但是伴随云原生的呼声越来越大,一些企业不希望部署一套YARN繁重的基座平台作为资源调度平台,期望使用容器的特性实现存储分离的架构;还有很多其他的原因…不在赘述

改造步骤

  • 基于官方镜像重新打包flink服务,实现能够讲平台容器日志直接传输到kafka中,其次我们复写了Kubernates flink native的客户端,因此需修改flink-console.sh脚本,因此我们需要编写DockerFile重新打包镜像
    文件路径
FROM flink:1.17.1-scala_2.12
MAINTAINER jiangzhongzhou <jiangzhongzhou@jd.com>

# 拷贝 client/kafka append文件到flink的lib下
COPY client-1.17.1-1.0.jar $FLINK_HOME/lib/
COPY kafka-clients-2.2.0.jar $FLINK_HOME/lib/
# 修改flink-console.sh脚本启动类
COPY flink-console.sh $FLINK_HOME/bin/flink-console.sh
# 设定容器时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

flink-console.sh
flink-console.sh脚本
在Kubernetes的其他节点安装改镜像,我这里把名字为flink-mirror:1.0

[root@CentOSB flink-mirror]# docker build -t flink-mirror:1.0 .
[+] Building 0.1s (10/10) FINISHED                                                                                                                                d
 => [internal] load .dockerignore
 => => transferring context: 2B
 => [internal] load build definition from Dockerfile
 => => transferring dockerfile: 574B
 => [internal] load metadata for docker.io/library/flink:1.17.1-scala_2.12
 => [1/5] FROM docker.io/library/flink:1.17.1-scala_2.12
 => [internal] load build context
 => => transferring context: 432B
 => CACHED [2/5] COPY client-1.17.1-1.0.jar /opt/flink/lib/
 => CACHED [3/5] COPY kafka-clients-2.2.0.jar /opt/flink/lib/
 => CACHED [4/5] COPY flink-console.sh /opt/flink/bin/flink-console.sh
 => CACHED [5/5] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone
 => exporting to image
 => => exporting layers
 => => writing image sha256:2c97c90b70f63a0a52241b2237f4eaa22316756001f54d5704ba86f85512c5c5
 => => naming to docker.io/library/flink-mirror:1.0
[root@CentOSB flink-mirror]# docker images
REPOSITORY                                                       TAG                 IMAGE ID       CREATED         SIZE
flink-mirror                                                     1.0                 2c97c90b70f6   4 hours ago     859MB
...
  • 痛点二
    安装官方的使用说明,在镜像Application-Mode部署的时候,用户需要更具发布的jar包每次都需要重新打包镜像,启动作业,这样在生产场景下比较满,导致作业的制作工艺比较复杂,因此我们需要针对TaskManager和JobManagwer的pod进行修改,总体思想是通过在构建TaskManager、JobManagwer pod的时候,自动挂载本地的NFS镜像资源Volume到镜像的/opt/flink/usrLib目录下,这样就可以不需要每个作业都打包了;同时在考虑kubernates可能需要访问大数据平台的组件,但是大数据平台的组件,基本上都是基于主机名的,因此我们还需要在kubernates上实现主机名挂载;

  • 卷挂载解决用户jar的问题


/*在指定路径下挂载userLib服务*/
public class UserLibMountDecorator extends AbstractKubernetesStepDecorator {
   

    private final AbstractKubernetesParameters kubernetesComponentConf;

    public UserLibMountDecorator(AbstractKubernetesParameters kubernetesComponentConf) {
   
        this.kubernetesComponentConf = checkNotNull(kubernetesComponentConf);
    }

    @Override
    public FlinkPod decorateFlinkPod(FlinkPod flinkPod) {
   
        final Pod mountedPod = decoratePod(flinkPod.getPodWithoutMainContainer());

        final Container mountedMainContainer =
                new ContainerBuilder(flinkPod.getMainContainer())
                        .addNewVolumeMount()
                        .withName(getUserLibName(kubernetesComponentConf.getClusterId()))
                        .withMountPath(FLINK_USER_LIB)
                        .endVolumeMount()
                        .build();

        return new FlinkPod.Builder(flinkPod)
                .withPod(mountedPod)
                .withMainContainer(mountedMainContainer)
                .build();
    }

    private Pod decoratePod(Pod pod) {
   

        final Volume podTemplateVolume =
                new VolumeBuilder()
                        .withName(getUserLibName(kubernetesComponentConf.getClusterId()))
                        .withNfs(
                                new NFSVolumeSource(
                                        kubernetesComponentConf
                                                .getFlinkConfiguration()
                                                .getValue

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/964406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

肖sir__linux详解__002(系统命令)

linux系统命令 1、df 查看磁盘使用情况 &#xff08;1&#xff09;df 查看磁盘使用情况&#xff08;按kb单位显示&#xff09; &#xff08;2&#xff09;df -h 按单位显示磁盘使用情况 2、top 实时查看动态进程 &#xff08;1&#xff09;top 详解&#xff1a; 第一行&…

股票贷款行业,给你一个低成本有效的获客渠道

我们比市场上的同行公司具有更多的质量优势。我们的推广部门不断使用大数据引导和定位技术以及促销策略的迭代升级&#xff0c;具有足够强大的硬实力&#xff0c;可以引导客户提供更优质的投资者。为金融公司带来更好的资源。现在的股票加粉主要是&#xff1a;微信加粉/Q组/留电…

C语言:三子棋小游戏

简介&#xff1a; 目标很简单&#xff1a;实现一个 三子棋小游戏。三子棋大家都玩过&#xff0c;规则就不提及了。本博文中实现的三子棋在对局中&#xff0c;电脑落子是随机的&#xff0c;不具有智能性&#xff0c;玩家的落子位置使用键盘输入坐标。下面开始详细介绍如何实现一…

2023年王炸面试题每日一练--为什么会有精度的损失

基本数据类型中为什么会出现精度损失&#xff0c;怎么样会避免出现精度损失 loat 32位 出现精度损失的原因&#xff1a; 输入的值为十进制&#xff0c;而在计算的过程中&#xff0c;是要把十进制的小数位值在有限位的情况下转变为二进制的小数&#xff0c;就会出现精度的损失…

十一、MySQL(DQL)聚合函数

1、聚合函数 注意&#xff1a;在使用聚合函数时&#xff0c;所有的NULL是不参与运算的。 2、实际操作&#xff1a; &#xff08;1&#xff09;初始化表格 &#xff08;2&#xff09;统计该列数据的个数 基础语法&#xff1a; select count(字段名) from 表名; &#xff1b;统…

绿色光伏代步工具

太阳能是可再生能源&#xff0c;光线的来源是太阳&#xff0c;几乎不会枯竭。相比化石燃料等非可再生能源&#xff0c;太阳能的利用不会对资源造成耗竭和短缺问题&#xff0c;在现今社会中的文化&#xff0c;旅游层面&#xff0c;也已经得到充分的发展和拓展出多方面的应用模式…

JAVA 求最小公因数

JAVA 求最小公因数 文章目录 JAVA 求最小公因数方法一&#xff1a;枚举法的第一种方法一&#xff1a;枚举法的第二种方法二&#xff1a;展转相除法(欧几里德算法)方法三&#xff1a;递归拓展 求最小公倍数公式为 题目&#xff1a;任意输入两个整数&#xff0c;如何求他们的最大…

使用VisualStudio制作上位机(六)

文章目录 使用VisualStudio制作上位机&#xff08;六&#xff09;第五部分&#xff1a;应用程序打包第一步&#xff1a;勾选为Release模式第二步&#xff1a;生成解决方案第三步&#xff1a;将我们额外添加的文件放入到Release这个文件夹里 使用VisualStudio制作上位机&#xf…

400. 第 N 位数字

链接&#xff1a; ​​​​​​400. 第 N 位数字 题解&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class Solution { public:int findNthDigit(int n) {int len1;//初始数字长度为1int base1;//初始范围为1~9while(n>(long)len…

ROS机器人编程ROS机器人编程---------(三)创建工作空间和功能包

创建工作空间和功能包 创建工作空间 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace编译工作空间 cd ~/catkin_ws/ catkin_make设置环境变量 source devel/setup.bash检查环境变量 echo $ROS_PACKAGE_PATH创建功能包 cd ~/catkin_ws/src catkin_crea…

【word密码】如何限制word文件中部分内容?

Word文件中有一部分内容不想他人编辑&#xff0c;我们可以设置限制编辑&#xff0c;可以对一部分内容设置限制编辑&#xff0c;具体方法如下&#xff1a; 我们将需要将可以编辑的地方选中&#xff0c;然后打开限制编辑功能 然后勾选限制编辑设置界面中的【限制编辑】和【每个人…

RT-Thread 中断管理学习(一)

中断管理 什么是中断&#xff1f;简单的解释就是系统正在处理某一个正常事件&#xff0c;忽然被另一个需要马上处理的紧急事件打断&#xff0c;系统转而处理这个紧急事件&#xff0c;待处理完毕&#xff0c;再恢复运行刚才被打断的事件。生活中&#xff0c;我们经常会遇到这样…

LDAP服务器如何重启

1、find / -name ldap 该命令只会从根路径下查看ldap文件夹 find / -name ldap2、该命令会从根路径/查看所有包含ldap路径的文件夹&#xff0c;会查询出所有&#xff0c;相当于全局查询 find / -name *ldap*2、启动OpenLADP 找到LDAP安装目录后&#xff0c;执行以下命令 #直…

Mysql主从服务安装配置

1.下载地址 MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 2.安装配置 1.下载解压后&#xff0c;拷贝一份作为slave的安装目录 3.配置my.ini 由于下载mysql8版本&#xff0c;解压后&#xff0c;没有相关的my…

每日一题-动态规划(从不同类型的物品中各挑选一个,使得最后花费总和等于1000)

四种类型的物品&#xff0c;每一种类型物品数量都是n&#xff0c;先要从每种类型的物品中挑选一件&#xff0c;使得最后花费总和等于1000 暴力做法10000^4 看到花费总和是1000&#xff0c;很小且固定的数字&#xff0c;肯定有玄机&#xff0c;从这里想应该是用dp&#xff0c;不…

数据库-DQL

DQL&#xff1a;用来查询数据库表中的记录 关键字&#xff1a;SELECT 语法&#xff1a; select&#xff1a;字段列表 from&#xff1a;表名列表 where&#xff1a;条件列表 group by&#xff1a;分组列表 having&#xff1a;分组后条件列表 order by&#xff1a;排序字段列表…

解决windows下安装python并终端运行python弹出windows商店的最终解决方案

最近在windows下安装了python&#xff0c;在终端中运行python命令的时候总是会弹出windows商店 为了解决这个问题&#xff0c;我修改系统的环境变量也一直不起作用&#xff0c;只有指定绝对路径时才能正常启动&#xff0c;这个问题困扰了我很长一段时间&#xff0c;后来了解到…

Linux知识点 -- Linux多线程(四)

Linux知识点 – Linux多线程&#xff08;四&#xff09; 文章目录 Linux知识点 -- Linux多线程&#xff08;四&#xff09;一、线程池1.概念2.实现3.单例模式的线程池 二、STL、智能指针和线程安全1.STL的容器是否是线程安全的2.智能指针是否是线程安全的 三、其他常见的各种锁…

Window11下载安装jdk8-jdk11与环境变量的配置

目录 一、下载jdk 二、安装jdk 三、配置环境变量 四、检查JDK是否配置成功 一、下载jdk jdk8下载链接&#xff1a;请点击网址 jdk11下载链接&#xff1a;请点击网址 二、安装jdk 按照提示一步一步安装即可。 默认安装位置&#xff1a;C:\Program Files\Java 三、配置…

NetSuite海鲜书 - 知识会汇编 用户篇 2023

NetSuite2021年初夏&#xff0c;NetSuite知识会成立。它由本人&#xff0c;上海德之匠信息技术有限公司的毛岩喆&#xff08;江湖人称Rick&#xff09;发起建立。建立的初衷秉承Rick个人博客“学问思辨&#xff0c;企业信息化路上的行者”的理念&#xff0c;期望能够在NetSuite…