Flink operator实现自动扩缩容
官网文档位置:
1.Autoscaler | Apache Flink Kubernetes Operator
2.Configuration | Apache Flink Kubernetes Operator
1.部署K8S集群
可参照我之前的文章k8s集群搭建
2.Helm安装Flink-Operator
helm repo add flink-operator-repo https://downloads.apache.org/flink/flink-kubernetes-operator-1.10.0/helm repo update--如果没有这个命名空间就创建
helm install flink-kubernetes-operator flink-operator-repo/flink-kubernetes-operator \
--namespace=flink-operator \
--create-namespace \
--set webhook.create=false \
--version 1.10.0
3.安装prometheus
operator通过监控prometheus实现自动扩缩容,过两天调整为helm
可以采用helm安装也可采用yaml,由于helm没安装成功我就采用yaml安装了# prometheus-basic.yaml
apiVersion: v1
kind: Namespace
metadata:name: monitoring
---
apiVersion: v1
kind: ConfigMap
metadata:name: prometheus-confignamespace: monitoring
data:prometheus.yml: |global:scrape_interval: 15sevaluation_interval: 15sscrape_configs:- job_name: 'flink'static_configs:- targets: ['flink-metrics.flink-apps.svc.cluster.local:9249']metrics_path: /metrics
---
apiVersion: apps/v1
kind: Deployment
metadata:name: prometheusnamespace: monitoring
spec:selector:matchLabels:app: prometheusreplicas: 1template:metadata:labels:app: prometheusspec:containers:- name: prometheusimage: prom/prometheus:v2.30.3args:- "--config.file=/etc/prometheus/prometheus.yml"- "--storage.tsdb.path=/prometheus"- "--web.enable-lifecycle"ports:- containerPort: 9090volumeMounts:- name: config-volumemountPath: /etc/prometheus/- name: storage-volumemountPath: /prometheusvolumes:- name: config-volumeconfigMap:name: prometheus-config- name: storage-volumeemptyDir: {}
---
apiVersion: v1
kind: Service
metadata:name: prometheusnamespace: monitoring
spec:type: NodePortports:- port: 9090targetPort: 9090nodePort: 30090selector:app: prometheus
4.制作镜像包
Dockerfile内容,flink-test-1.0-SNAPSHOT.jar为测试代码ARG FLINK_VERSION=1.18.1
FROM flink:${FLINK_VERSION}-scala_2.12
RUN mkdir -p /opt/flink/usrlib
COPY flink-test-1.0-SNAPSHOT.jar /opt/flink/usrlib/
COPY flink-metrics-prometheus-1.18.1.jar /opt/flink/lib/
COPY flink-statebackend-rocksdb-1.18.1.jar /opt/flink/lib/
COPY flink-connector-files-1.18.1.jar /opt/flink/lib/
WORKDIR /opt/flink# 1. 构建 Docker 镜像
# -t: 指定镜像名称和标签
# .: 使用当前目录的 Dockerfile
# --no-cache: 不使用缓存,从头构建
docker build -t zht-flink:1.18.1 . --no-cache# 2. 为本地镜像添加远程仓库标签
# 格式: registry地址/命名空间/镜像名:标签
docker tag zht-flink:1.18.1 registry.cn-hangzhou.aliyuncs.com/dinkyhub/zht-flink:1.18.1# 3. 推送镜像到阿里云镜像仓库
# 将标记的镜像推送到远程仓库
docker push registry.cn-hangzhou.aliyuncs.com/dinkyhub/zht-flink:1.18.1
5.创建命名空间和serviceaccount等
kubectl create namespace flink-appskubectl -n flink-apps create serviceaccount flink-serviceaccountkubectl -n flink-apps create clusterrolebinding flink-role-binding --clusterrole=edit --serviceaccount=flink-apps:flink-serviceaccountkubectl create secret docker-registry flink-apps-secret \
--docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=xx \
--docker-password=xxxx \
-n flink-appskubectl patch serviceaccount flink-serviceaccount -p '{"imagePullSecrets": [{"name": "flink-apps-secret"}]}' -n flink-apps
6.任务和扩缩容配置
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:name: flink-autoscaling-sum-jobnamespace: flink-apps
spec:image: registry.cn-hangzhou.aliyuncs.com/dinkyhub/zht-flink:1.18.1flinkVersion: v1_18mode: nativeflinkConfiguration:taskmanager.numberOfTaskSlots: "2"parallelism.default: "2"state.backend: rocksdbstate.checkpoints.dir: file:///flink-data/checkpointsstate.savepoints.dir: file:///flink-data/savepointsmetrics.reporters: prometheusmetrics.reporter.prometheus.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactorymetrics.reporter.prometheus.port: "9249"execution.checkpointing.interval: "10000"execution.checkpointing.mode: "EXACTLY_ONCE"execution.checkpointing.timeout: "600000"execution.checkpointing.min.pause: "10000"execution.checkpointing.max.concurrent.checkpoints: "1"metrics.task.records.out.enable: "true"# 设置指标收集间隔metrics.fetcher.update-interval: "1000"metrics.latency.interval: "1000"# 启用 IO 指标metrics.io.enable: "true" jobmanager.scheduler: "adaptive"# 自动扩缩容配置job.autoscaler.enabled: "true"job.autoscaler.metrics.window: "20s"job.autoscaler.target.utilization: "0.30"job.autoscaler.scale.up.threshold: "0.05"job.autoscaler.scale.down.threshold: "0.1"job.autoscaler.metrics.memory.average: "1.0"job.autoscaler.metrics.memory.window: "5s"job.autoscaler.stabilization.interval: "5s"job.autoscaler.cooldown.period: "5s"job.autoscaler.scale.up.max.factor: "1.5"job.autoscaler.scale.down.max.factor: "0.5" serviceAccount: flink-serviceaccountjobManager:resource:memory: "1024m"cpu: 1replicas: 1taskManager:resource:memory: "1024m"cpu: 1job:jarURI: local:///opt/flink/usrlib/flink-test-1.0-SNAPSHOT.jarentryClass: com.zht.sumJobargs: []parallelism: 1upgradeMode: statelesspodTemplate:spec:volumes:- name: checkpoint-datahostPath:path: /data/flink-checkpointstype: DirectoryOrCreatecontainers:- name: flink-main-containervolumeMounts:- name: checkpoint-datamountPath: /flink-datametadata:annotations:prometheus.io/scrape: "true"prometheus.io/port: "9249"---
apiVersion: batch/v1
kind: Job
metadata:name: init-checkpoint-dirnamespace: flink-apps
spec:template:spec:serviceAccountName: flink-serviceaccountcontainers:- name: init-dirimage: busyboxcommand: ["/bin/sh", "-c"]args:- |mkdir -p /data/flink-checkpoints/checkpointsmkdir -p /data/flink-checkpoints/savepointschmod -R 777 /data/flink-checkpointsvolumeMounts:- name: checkpoint-datamountPath: /data/flink-checkpointsresources:limits:cpu: "0.1"memory: "64Mi"requests:cpu: "0.1"memory: "64Mi"volumes:- name: checkpoint-datahostPath:path: /data/flink-checkpointstype: DirectoryOrCreaterestartPolicy: NeverbackoffLimit: 4---
apiVersion: v1
kind: Service
metadata:name: flink-jobmanager-uinamespace: flink-apps
spec:type: NodePortports:- name: webuiport: 8081targetPort: 8081nodePort: 30081selector:component: jobmanagerapp: flink-autoscaling-sum-job---
apiVersion: v1
kind: Service
metadata:name: flink-metricsnamespace: flink-apps
spec:type: NodePortports:- name: metricsport: 9249targetPort: 9249nodePort: 30249selector:component: taskmanagerapp: flink-autoscaling-sum-job
注意点:1.添加 flink-metrics-prometheus-1.18.1.jar 不然启动不了metrics
2.注意先排查metrics是否启用成功。curl http://localhost:9249/metrics查看是否有值
3.之后查看prometheus页面的target是否有flink metrics
4.yaml或者flink任务配置好启用监控的配置
相关文章:

Flink operator实现自动扩缩容
官网文档位置: 1.Autoscaler | Apache Flink Kubernetes Operator 2.Configuration | Apache Flink Kubernetes Operator 1.部署K8S集群 可参照我之前的文章k8s集群搭建 2.Helm安装Flink-Operator helm repo add flink-operator-repo https://downloads.apach…...

分布式系统架构6:链路追踪
这是小卷对分布式系统架构学习的第6篇文章,关于链路追踪,之前写过traceId的相关内容:https://juejin.cn/post/7135611432808218661,不过之前写的太浅了,且不成系统,只是简单的理解,今天来捋一下…...

vite-plugin-imagemin安装问题
vite-plugin-imagemin 是一款图片资源压缩插件,能够在打包的时候显著的降低图片资源占用。不过,在安装过程中我们遇到了如下的问题。 对于上面的问题,有以下几种常见的解决方案: 1,使用 yarn 在 package.json 内配置(推荐) 打开 package.json 配置文件,然后添加如下脚本…...

Git revert回滚
回退中间的某次提交(此操作在预生产分支上比较常见),建议此方式使用命令进行操作(做好注释,方便后续上线可以找到这个操作) Git操作: 命令:revert -n 版本号 1:git re…...

永磁同步电机预测模型控制(MPC)
永磁同步电机预测模型控制(MPC) 文章目录 前言1、模型预测控制1.1 连续控制集模型预测控制(CCS-MPC)1.2 有限控制集模型预测控制(FCS-MPC)1.3 模型预测控制的优缺点 2、永磁同步电机模型预测控制2.1 预测模型2.2 价值…...

【JAVA】switch ... case ... 的用法
语法结构: switch(表达式){ case 值1: 表达式和值1匹配时执行的语句 break; case 值2: 表达式和值2匹配时执行的语句 break; …...

基于STM32的热带鱼缸控制系统的设计
文章目录 一、热带鱼缸控制系统1.题目要求2.思路3.电路仿真3.1 未仿真3.2 开始仿真,显示屏显示水温、浑浊度、光照强度等值3.3 当水温低于阈值,开启加热并声光报警3.4 当浑浊度高于阈值,开启自动换水并声光报警3.5 当光照低于阈值,…...

Vue项目整合与优化
前几篇文章,我们讲述了 Vue 项目构建的整体流程,从无到有的实现了单页和多页应用的功能配置,但在实现的过程中不乏一些可以整合的功能点及可行性的优化方案,就像大楼造完需要进行最后的项目验收改进一样,有待我们进一步…...

WinForm开发-自定义组件-1. 工具栏: UcompToolStrip
这里写自定义目录标题 1. 工具栏: UcompToolStrip1.1 展示效果1.2 代码UcompToolStrip.csUcompToolStrip.Designer.cs 1. 工具栏: UcompToolStrip 自定义一些Winform组件 1.1 展示效果 1)使用效果 2)控件事件 1.2 代码 设计 编码 UcompToolStrip.…...

法律专业legal case的留学论文写作技巧分析(1)
对于法律专业的留学生而言,案例的分析是写作的重要方面。无论留学的国家是英、美、澳洲还是加拿大,它们都属于case law 的法律体系。一个非常显著的特点便是通过对案例进行分析和提炼,从中总结提炼出principle和rules。case analysis的留学论…...

2025编程技术前沿:探索最新的开发工具与趋势
随着技术的飞速发展,编程领域每天都在演化,新的技术、框架和工具层出不穷。本文将聚焦2025年最具潜力和吸引力的编程技术与工具,从前沿语言到最受欢迎的开发框架,带您一起探索软件开发领域的最新趋势。 一、编程语言的新生代之星…...

sqlserver sql转HTMM邮件发送
通过sql的形式,把表内数据通过邮件的形式发送出去 declare title varchar(100) DECLARE stat_date CHAR(10),create_time datetime SET stat_dateCONVERT(char(10),GETDATE(),120) SET create_timeDATEADD(MINUTE,-20,GETDATE()) DECLARE xml NVARCHAR (max) DECLAR…...

GeoTrust True BusinessID Wildcard
GeoTrust由DigiCert 提供支持,是最受信任和尊重的品牌之一,以提供高保证的网站安全而闻名。 GeoTrust True BusinessID通配符证书 – 以低成本保护多个主机名。即使将其用于您的公司主页或电子邮件服务器主机名,保护所有敏感信息也是您的目标…...

R语言的数据结构
R语言的数据结构 R语言是专门为统计计算和数据分析而设计的一种编程语言,因其强大的数据处理能力而受到广泛欢迎。在R中,数据结构是理解和有效使用R语言的基础。本文将详细介绍R语言中的主要数据结构,包括向量、矩阵、数据框、列表、因子等&…...

安装和配置MySQL教程
以下是在不同操作系统下安装和配置MySQL的详细教程: Windows系统 下载MySQL安装包 访问MySQL官方网站(https://dev.mysql.com/downloads/mysql/),根据你的操作系统版本(32位或64位)下载相应的MySQL Commu…...

黑马Java面试教程_P10_设计模式
系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结࿰…...

043_小驰私房菜_MTK Camera,Hal层将camera型号写到property属性中
【问题背景】 app层需要知道当前设备的摄像头型号,然后做一些差异化处理。底下如何上报这个摄像头型号? 【分析】 在kernel和hal层,都是有地方能获取到当前摄像头的型号,就看在哪里添加方便。获取到摄像头硬件型号后,将其写入到property属性, 然后app就可以通过读取该…...

基础图形化界面的一个图片爬虫期末
下面是爬取界面: 点击即可自动化爬取 以下是完整代码: import tkinter as tk import requests import os #用于文件和目录操作。# 图片爬虫函数 def image_spider(textbox):headers = {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, …...
Outlook2024版如何回到经典Outlook
Outlook2024版如何回到经典Outlook 如果新加入一家公司,拿到的电脑,大概率是最新版的Windows, 一切都是新的。 如果不coding, 使用国产的foxmail大概就可以解决一切问题了。可惜老程序员很多Coding都是基于传统Outlook的,科技公司所有人都是I…...

仿生的群体智能算法总结之二(十种)
群体智能算法是一类通过模拟自然界中的群体行为来解决复杂优化问题的方法。以下是10种常见的群体智能算法,接上文https://blog.csdn.net/lzm12278828/article/details/144933367仿生的群体智能算法总结之一(十种)-CSDN博客https://blog.csdn.net/lzm12278828/article/detail…...

SpringBoot入门之创建一个Hello World项目
文章目录 一、使用传统的方式1、创建一个SpringBoot项目2、配置pom.xml文件3、下载Maven依赖4、创建一个Controller类:com.devops.controller.HelloController5、创建一个引导类:com.devops.HelloApplication6、启动项目8、访问80809、完整项目结构 二、…...

MySQL与标准SQL的区别
我们试图使MySQL Server遵循ANSI SQL标准和ODBC SQL标准,但MySQL Server在某些情况下执行不同的操作: MySQL和标准SQL特权系统之间有一些区别。例如,在MySQL中,删除表时不会自动撤销表的特权。您必须显式发出REVOKE来撤销表的特权…...

docker中使用Dockerfile设置Volume挂载点
关于在docker中如何使用Volume,可以参考文章: docker中使用Volume完成数据共享-CSDN博客 如果想在生成docker镜像的时候设置好挂载点,而不是在运行镜像生成容器时生成。 下面以自建一个tomcat镜像为例,演示如何在生成镜像时设置…...

Samsung手机首次主要采用竞对Micron LPDDR5内存
根据韩国媒体《韩国先驱报》(The Korea Herald)的报道,即将在1月底发布的三星 Galaxy S25 系列智能手机将首次主要使用美光科技(Micron Technology)提供的移动DRAM,而非三星自家的产品。这一消息对于三星的…...

【项目开发】C#环境配置及VScode运行C#教程(学生管理系统)
原创文章,禁止转载。 文章目录 下载.NETVScode配置运行程序下载.NET 官网链接: https://dotnet.microsoft.com/en-us/download选择任意版本下载: 下载完成后,双击运行exe文件,等待安装完成。 在控制台输入: dotnet --version若出现版本信息,说明安装成功: VScode配…...

[241231] CachyOS 2024 年终总结:性能飞跃与社区繁荣 | ScyllaDB 宣布转向开源可用许可证
目录 CachyOS 2024 年终总结:性能飞跃与社区繁荣ScyllaDB 宣布转向开源可用许可证 CachyOS 2024 年终总结:性能飞跃与社区繁荣 CachyOS 2024 年的最后一个版本 (也是第 13 个版本) 已经发布,同时也迎来了辞旧迎新之际。让我们一起回顾 Cachy…...

AI-Talk开发板之超拟人
一、说明 运行duomotai_ap sdk下的LLM_chat例程,实现开发板和超拟人大模型进行语音交互,支持单轮和多轮交互。 二、SDK更新 v2.3.0及以上的SDK版本才支持超拟人,如果当前SDK在v2.3.o以下,需要更新SDK。在SDK目录(duomotai_ap)下…...

Swift Concurrency(并发)学习
Swift 的并发模型是基于 异步任务 和 任务调度 的一套现代化的异步编程工具。以下是相关语法规则总结 1. 异步函数(async)与 await async 用于声明一个异步函数,表示函数可能会执行耗时任务,例如网络请求、文件读写等。在调用异步…...

从0开始的opencv之旅(1)cv::Mat的使用
目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒,但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理,这样在查找问题,或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…...

Hoverfly 任意文件读取漏洞(CVE-2024-45388)
漏洞简介 Hoverfly 是一个为开发人员和测试人员提供的轻量级服务虚拟化/API模拟/API模拟工具。其 /api/v2/simulation 的 POST 处理程序允许用户从用户指定的文件内容中创建新的模拟视图。然而,这一功能可能被攻击者利用来读取 Hoverfly 服务器上的任意文件。尽管…...