当前位置: 首页 > news >正文

Pod控制器之hpa

简述

HPA全称HorizontalPodAutoscaler Pod水平自动扩缩容,Kubernetes控制器HPA是一种用于自动调整Pod数量的控制器。它可以根据资源使用情况自动增加或减少Pod的数量,以确保应用程序的高可用性和性能。HPA可以根据CPU使用率或自定义指标来进行调整,例如请求延迟或网络吞吐量

Pod 水平自动扩缩中文文档

工作原理

HPA一般通过指示工作负载资源如Deployment、StatefulSet 或其他类似资源进行扩缩容,对于像DaemonSet这种无法扩缩的对象不适用

使用之前我们先安装metrics-server,它可以用来收集集群中的资源使用情况。hpa通过metrics-server的api获取这些数据,然后进行扩缩容的副本计算,得到目标副本数量,如果与当前副本数不相同就通过副本控制器进行scale操作

metrics-server的yaml清单获取
metrics-server

安装完后使用top命令查看

[root@master hpa]# kubectl top node
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
master   124m         6%     2508Mi          69%       
node01   59m          2%     1941Mi          54%       
node02   53m          2%     2010Mi          55%

hpa资源文件清单

apiVersion: autoscaling/v2beta1  # 使用autoscaling/v2beta1版本的HPA API
kind: HorizontalPodAutoscaler   # 定义HPA控制器
metadata:name: example-hpa   # HPA资源的名称namespace: default  # HPA资源所在的命名空间
spec:scaleTargetRef:apiVersion: apps/v1kind: Deployment   # 所有Pod数量将根据该Deployment对象的副本数量进行自动缩放name: example-deployment  # HPA将控制的Deployment对象名称minReplicas: 2   # 最小Pod数量maxReplicas: 10  # 最大Pod数量metrics:- type: Resource   # 使用资源指标类型resource:name: cpu   # 使用CPU使用率作为资源指标target:type: Utilization   # 使用CPU利用率作为度量标准averageUtilization: 50   # 目标CPU利用率,达到该利用率时触发自动扩缩容- type: Object   # 使用对象指标类型object:metricName: example_http_requests_total   # 自定义指标名称target:type: Value   # 目标值类型,可以是Value或AverageValuevalue: "100"  # 触发自动扩缩容的目标值describedObject:apiVersion: v1kind: Service   # 该对象指标作用于Service对象name: example-service   # 该对象指标作用于的Service对象名称

上面的自定义指标配置不会再本章讲解

案例

下面以一个案例来解释hpa的使用

使用hpa来控制deployment自动扩缩容,当pod资源平均使用率达到3%时进行扩容

创建一个Deployment

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx
spec:selector:matchLabels:app: nginx-hpatemplate:metadata:labels:app: nginx-hpaspec:containers:- name: nginximage: nginx:1.17.1ports:- containerPort: 80protocol: TCPresources:requests:memory: "50Mi"cpu: "100m"
# 创建deployment
[root@master hpa]# kubectl create -f hpa-deploy.yaml 
deployment.apps/nginx created
# 记录下IP后面压测用到 10.244.2.104
[root@master hpa]# kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP             NODE     NOMINATED NODE   READINESS GATES
nginx-659b6d57bd-5tbg2   1/1     Running   0          10s   10.244.2.104   node02   <none>           <none>

创建HPA
最小副本数1,最大10 autoscaling/v1版本

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:name: hpa
spec:minReplicas: 1maxReplicas: 10targetCPUUtilizationPercentage: 3scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginx

autoscaling/v2版本

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: hpa
spec:minReplicas: 1maxReplicas: 10scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginxmetrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 3
# 创建hpa
[root@master hpa]# kubectl create -f hpa.yaml 
horizontalpodautoscaler.autoscaling/hpa created# 查看hpa,还没有完全启动完
[root@master hpa]# kubectl get hpa
NAME   REFERENCE          TARGETS        MINPODS   MAXPODS   REPLICAS   AGE
hpa    Deployment/nginx   <unknown>/3%   1         10        0          6s# 再次查看hpa,启动完成 目前资源使用率 0%
[root@master hpa]# kubectl get hpa
NAME   REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa    Deployment/nginx   0%/3%     1         10        1          20s

使用ab工具进行压测,没有该工具需要安装 httpd-tools

# 安装 httpd-tools
yum -y install httpd-tools# ab工具可以模拟多个用户(并发请求),向Web服务器发送请求,并统计响应时间和处理请求数量等信息
# ab -n requests -c concurrency url
# 参数说明:
#- requests:总请求数,例如:-n 1000。
#- concurrency:并发请求数,例如:-c 10。
#- url:测试的URL地址。

压测

ab -n 10000 -c 1000 http://10.244.2.104/

观察压测结果

# 监听hpa 发现压测中cpu达到60% ,后面又降回去了
[root@master ~]# kubectl get hpa -w
NAME   REFERENCE          TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa    Deployment/nginx   0%/3%     1         10        1          7m30s
hpa    Deployment/nginx   60%/3%    1         10        1          9m1s
hpa    Deployment/nginx   0%/3%     1         10        4          9m16s
hpa    Deployment/nginx   0%/3%     1         10        8          9m31s
hpa    Deployment/nginx   0%/3%     1         10        10         9m46s
# 监听Pod 一开始只有一个nginx-659b6d57bd-5tbg2 运行了8m47s,压测后又创建了9个Pod,观察ContainerCreating数量
[root@master hpa]# kubectl get pod -w
NAME                     READY   STATUS    RESTARTS   AGE
nginx-659b6d57bd-5tbg2   1/1     Running   0          8m47s
nginx-659b6d57bd-47f98   0/1     Pending   0          0s
nginx-659b6d57bd-47f98   0/1     Pending   0          0s
nginx-659b6d57bd-qs4tr   0/1     Pending   0          0s
nginx-659b6d57bd-tvnmp   0/1     Pending   0          0s
nginx-659b6d57bd-tvnmp   0/1     Pending   0          0s
nginx-659b6d57bd-qs4tr   0/1     Pending   0          0s
nginx-659b6d57bd-47f98   0/1     ContainerCreating   0          0s
nginx-659b6d57bd-qs4tr   0/1     ContainerCreating   0          0s
nginx-659b6d57bd-tvnmp   0/1     ContainerCreating   0          0s
nginx-659b6d57bd-47f98   1/1     Running             0          1s
nginx-659b6d57bd-tvnmp   1/1     Running             0          1s
nginx-659b6d57bd-qs4tr   1/1     Running             0          2s
nginx-659b6d57bd-mccdl   0/1     Pending             0          0s
nginx-659b6d57bd-mccdl   0/1     Pending             0          0s
nginx-659b6d57bd-w9r46   0/1     Pending             0          0s
nginx-659b6d57bd-498c2   0/1     Pending             0          0s
nginx-659b6d57bd-w9r46   0/1     Pending             0          0s
nginx-659b6d57bd-498c2   0/1     Pending             0          0s
nginx-659b6d57bd-mccdl   0/1     ContainerCreating   0          0s
nginx-659b6d57bd-nvhgh   0/1     Pending             0          0s
nginx-659b6d57bd-nvhgh   0/1     Pending             0          0s
nginx-659b6d57bd-w9r46   0/1     ContainerCreating   0          0s
nginx-659b6d57bd-498c2   0/1     ContainerCreating   0          0s
nginx-659b6d57bd-nvhgh   0/1     ContainerCreating   0          0s
nginx-659b6d57bd-mccdl   1/1     Running             0          1s
nginx-659b6d57bd-498c2   1/1     Running             0          1s
nginx-659b6d57bd-w9r46   1/1     Running             0          1s
nginx-659b6d57bd-nvhgh   1/1     Running             0          1s
nginx-659b6d57bd-gq6dc   0/1     Pending             0          0s
nginx-659b6d57bd-gq6dc   0/1     Pending             0          0s
nginx-659b6d57bd-k7vdz   0/1     Pending             0          0s
nginx-659b6d57bd-k7vdz   0/1     Pending             0          0s
nginx-659b6d57bd-gq6dc   0/1     ContainerCreating   0          0s
nginx-659b6d57bd-k7vdz   0/1     ContainerCreating   0          0s
nginx-659b6d57bd-gq6dc   1/1     Running             0          1s
nginx-659b6d57bd-k7vdz   1/1     Running             0          1s
# 观察deploy,看到副本数量也是达到10个
[root@master ~]# kubectl get deploy -w
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           9m19s
nginx   1/4     1            1           10m
nginx   1/4     1            1           10m
nginx   1/4     1            1           10m
nginx   1/4     4            1           10m
nginx   2/4     4            2           10m
nginx   3/4     4            3           10m
nginx   4/4     4            4           10m
nginx   4/8     4            4           10m
nginx   4/8     4            4           10m
nginx   4/8     4            4           10m
nginx   4/8     8            4           10m
nginx   5/8     8            5           10m
nginx   6/8     8            6           10m
nginx   7/8     8            7           10m
nginx   8/8     8            8           10m
nginx   8/10    8            8           11m
nginx   8/10    8            8           11m
nginx   8/10    8            8           11m
nginx   8/10    10           8           11m
nginx   9/10    10           9           11m
nginx   10/10   10           10          11m

压测完后缩容
大概等待五分钟,会看到缩容效果

# deploy的pod副本书已经缩为1个
[root@master ~]# kubectl get deploy -w
nginx   10/10   10           10          11m
nginx   10/1    10           10          16m
nginx   10/1    10           10          16m
nginx   1/1     1            1           16m# 观察Pod,开始逐步缩容 Pod停止Terminating
[root@master ~]# kubectl get pod -w
nginx-659b6d57bd-mccdl   1/1     Terminating         0          5m45s
nginx-659b6d57bd-47f98   1/1     Terminating         0          6m
nginx-659b6d57bd-w9r46   1/1     Terminating         0          5m45s
nginx-659b6d57bd-gq6dc   1/1     Terminating         0          5m30s
nginx-659b6d57bd-nvhgh   1/1     Terminating         0          5m45s
nginx-659b6d57bd-k7vdz   1/1     Terminating         0          5m30s
nginx-659b6d57bd-498c2   1/1     Terminating         0          5m45s
nginx-659b6d57bd-qs4tr   1/1     Terminating         0          6m
nginx-659b6d57bd-tvnmp   1/1     Terminating         0          6m
nginx-659b6d57bd-498c2   0/1     Terminating         0          5m46s
nginx-659b6d57bd-498c2   0/1     Terminating         0          5m46s
nginx-659b6d57bd-498c2   0/1     Terminating         0          5m46s
nginx-659b6d57bd-k7vdz   0/1     Terminating         0          5m31s
nginx-659b6d57bd-k7vdz   0/1     Terminating         0          5m31s
nginx-659b6d57bd-k7vdz   0/1     Terminating         0          5m31s
nginx-659b6d57bd-nvhgh   0/1     Terminating         0          5m46s
nginx-659b6d57bd-nvhgh   0/1     Terminating         0          5m46s
nginx-659b6d57bd-nvhgh   0/1     Terminating         0          5m46s
nginx-659b6d57bd-47f98   0/1     Terminating         0          6m1s
nginx-659b6d57bd-47f98   0/1     Terminating         0          6m2s
nginx-659b6d57bd-47f98   0/1     Terminating         0          6m2s
nginx-659b6d57bd-gq6dc   0/1     Terminating         0          5m32s
nginx-659b6d57bd-gq6dc   0/1     Terminating         0          5m32s
nginx-659b6d57bd-gq6dc   0/1     Terminating         0          5m32s
nginx-659b6d57bd-mccdl   0/1     Terminating         0          5m47s
nginx-659b6d57bd-mccdl   0/1     Terminating         0          5m47s
nginx-659b6d57bd-mccdl   0/1     Terminating         0          5m47s
nginx-659b6d57bd-qs4tr   0/1     Terminating         0          6m2s
nginx-659b6d57bd-w9r46   0/1     Terminating         0          5m47s
nginx-659b6d57bd-qs4tr   0/1     Terminating         0          6m2s
nginx-659b6d57bd-qs4tr   0/1     Terminating         0          6m2s
nginx-659b6d57bd-w9r46   0/1     Terminating         0          5m47s
nginx-659b6d57bd-w9r46   0/1     Terminating         0          5m47s
nginx-659b6d57bd-tvnmp   0/1     Terminating         0          6m3s
nginx-659b6d57bd-tvnmp   0/1     Terminating         0          6m3s
nginx-659b6d57bd-tvnmp   0/1     Terminating         0          6m3s# 只有一个Pod
[root@master ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-659b6d57bd-5tbg2   1/1     Running   0          18m

欢迎关注,学习不迷路!

相关文章:

Pod控制器之hpa

简述 HPA全称HorizontalPodAutoscaler Pod水平自动扩缩容&#xff0c;Kubernetes控制器HPA是一种用于自动调整Pod数量的控制器。它可以根据资源使用情况自动增加或减少Pod的数量&#xff0c;以确保应用程序的高可用性和性能。HPA可以根据CPU使用率或自定义指标来进行调整&…...

发现一个白嫖GPT4.0的方法!真的是完胜3.5!

大家好&#xff0c;我是五竹。 先说个基本的科普&#xff0c;最近被问的人都嘛了。 1、ChatGPT账号只有两种:普通账号和plus账号。 2、普通账号升级到plus账号&#xff0c;需要绑定国外的支付方式&#xff0c;每个月大概130左右&#xff01;plus账号更稳&#xff01;更快&am…...

数据结构之第四章、ArrayList和顺序表

一、线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。但是…...

webase全家桶搭建教程过程记录+bug解决

前置条件 Ubuntu20 基础环境搭建 检查Java java -version 检查mysql&#xff08;Ubuntu部署MySQL&#xff09; mysql --version 在装MySQL的时候发现了一个问题 就是不管怎么sudo mysql_secure_installation&#xff0c;&#xff0c;第二步设置密码就是不对&#xff0c;解…...

openEuler Linux 部署 HadoopHA

openEuler Linux 部署 HadoopHA 升级操作系统和软件 yum -y update升级后建议重启 安装常用软件 yum -y install gcc gcc-c autoconf automake cmake make rsync vim man zip unzip net-tools zlib zlib-devel openssl openssl-devel pcre-devel tcpdump lrzsz tar wget修改…...

React-Hooks----useEffect()

文章目录前言用法前言 useEffect() 是 React 中最常用的 Hook 之一&#xff0c;它可以让函数组件拥有类似于类组件中 componentDidMount、componentDidUpdate 和 componentWillUnmount 生命周期函数的功能。 用法 useEffect() 接受两个参数 第一个参数是一个函数&#xff0c…...

JavaWeb基础-汇总

SSM框架课程汇总01-MySQL基础02-MySQL高级03-JDBC04-JDBC练习05-Maven&Mybatis基础06-Mybatis练习07-JavaScript08-Web概述09-HTTP10-Tomcat11-Servlet12-Request&Response13-用户注册登录案例14-JSP15-JSP案例16-会话技术17-用户登录注册案例18-Filter19-Listener&…...

Niuke:JZ36.二叉树与双向链表

文章目录&#xff2e;iuke:JZ36.二叉树与双向链表题目描述示例思路分析代码实现&#xff2e;iuke:JZ36.二叉树与双向链表 题目描述 描述 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 注意: 1.要求不能创建任何新的结点&#xff0c;只…...

javaScript---读懂promise、async/await

一、Promise Promise 是一个 Es 6 提供的类,目的是更加优雅地书写复杂的异步任务。可以解决嵌套式的回调地域问题,Promise 将嵌套格式的代码变成了顺序格式的代码。 //回调地域 setTimeout(function () {console.log("红灯");setTimeout(function () {console.lo…...

【Linux】TCP编程流程

TCP编程流程 socket()创建套接字&#xff0c;套接字TCP协议选择流式服务SOCK_STREAM。 bind()指定套接字使用的IP地址和端口。IP地址是自己主机地址&#xff0c;端口为一个16位的整形值。 listen()方法创建监听队列。监听队列分为存放未完成三次握手的连接和完成三次握手的连…...

SuperMap iDesktop 下载安装,生成本地瓦片,以及发布本地瓦片服务

SuperMap iDesktop 是插件式桌面GIS软件&#xff0c;提供基础版、标准版、专业版和高级版四个版本&#xff0c;具备二三维一体化的数据处理、制图、分析、海图、二三维标绘等功能&#xff0c;支持对在线地图服务的无缝访问及云端资源的协同共享&#xff0c;可用于空间数据的生产…...

【ONE·Data || 常见排序说明】

总言 数据结构基础&#xff1a;排序相关内容。    文章目录总言1、基本介绍2、插入排序2.1、直接插入排序&#xff1a;InsertSort2.1.1、单趟2.1.2、总趟2.2、希尔排序&#xff08;缩小增量排序&#xff09;&#xff1a;ShellSort2.2.1、预排序1.0&#xff1a;单组分别排序2.…...

本节作业之跟随鼠标的天使、模拟京东按键输入内容、模拟京东快递单号查询

本节作业之跟随鼠标的天使、模拟京东按键输入内容、模拟京东快递单号查询1 跟随鼠标的天使2 模拟京东按键输入内容3 模拟京东快递单号查询1 跟随鼠标的天使 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><met…...

ChatGPT 被大面积封号,到底发生什么了?

意大利数据保护机表示 OpenAI 公司不但非法收集大量意大利用户个人数据&#xff0c;没有设立检查 ChatGPT 用户年龄的机制。 ChatGPT 似乎正在遭遇一场滑铁卢。 3月31日&#xff0c; 大量用户在社交平台吐槽&#xff0c;自己花钱开通的 ChatGPT 账户已经无法登录&#xff0c;更…...

教你精通JavaSE语法之第十一章、认识异常

一、异常的概念与体系结构 1.1异常的概念 在Java中&#xff0c;将程序执行过程中发生的不正常行为称为异常。比如之前写代码时经常遇到的&#xff1a; 1.算术异常 System.out.println(10 / 0); // 执行结果 Exception in thread "main" java.lang.ArithmeticExcep…...

display、visibility、opacity隐藏元素的区别

display、visibility、opacity隐藏元素的区别 display: none 事件监听&#xff1a;无法进行DOM事件监听。 元素从网页中消失&#xff0c;并且不占据位置再次从网页中出现会引起重排 进而引起重绘继承&#xff1a;不会被子元素继承&#xff0c;因为子元素也不被渲染。 visib…...

Linux Shell 实现一键部署tomcat10+java13

tomcat 前言 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#xff0c;当…...

软硬皆施,WMS仓库管理系统+PDA,实现效率狂飙

人工经验Excel表格&#xff0c;是传统第三方仓储企业常用的管理模式。在这种管理模式下&#xff0c;对仓库员工的Excel操作能力、业务经验和工作素养要求极高。一旦员工的经验能力不足&#xff0c;就会导致仓库业务运行不顺畅&#xff0c;效率低下&#xff0c;而员工也会因长时…...

DJ3-2 传输层(第二节课)

目录 一、如何实现可靠数据传输 1. 需要解决地问题 2. 使用的描述方法 二、rdt1.0&#xff1a;完全可靠信道上的可靠数据传输 1. 前提条件 2. 有限状态机 FSM 三、rdt2.0&#xff1a;仅具有 bit 错误的信道上的可靠数据传输 1. 前提条件 2. 有限状态机 FSM 3. 停等协…...

FrIf-FrIf功能模块概述和与底层驱动的交互

总目录链接==>> AutoSAR入门和实战系列总目录 总目录链接==>> AutoSAR BSW高阶配置系列总目录 文章目录 1 FlexRay 接口模块概述2 与FlexRay底层驱动的交互1 FlexRay 接口模块概述 FlexRay 接口模块通过 FlexRay 驱动程序模块间接与 FlexRay 控制器通信。 它…...

【巴法云】零代码安卓App开发:用App Inventor + MQTT + ESP8266打造智能硬件遥控器

1. 零代码开发智能硬件遥控器的魅力 想象一下&#xff0c;你躺在沙发上发现忘关客厅的灯&#xff0c;这时候掏出手机点一下就能远程关灯&#xff1b;或者夏天回家前提前打开空调&#xff0c;进门就能享受清凉。这些智能家居场景现在用App Inventor 巴法云 ESP8266组合就能轻松…...

K8s CronJob配置避坑指南:从并发策略到历史记录,这些细节你注意了吗?

K8s CronJob生产环境实战&#xff1a;避开那些让你夜不能寐的配置陷阱 凌晨三点&#xff0c;告警铃声刺破夜空——你的数据库备份任务已经连续三次未能执行&#xff0c;而监控面板上堆积的Job数量正在以肉眼可见的速度增长。这不是第一次了&#xff0c;每次CronJob出问题都像一…...

一、Cisco(静态端口映射实战:从零搭建外网可访问的多服务内网环境)

1. 环境准备与拓扑设计 第一次接触端口映射时&#xff0c;我也被那些专业术语搞得晕头转向。直到自己动手在Cisco Packet Tracer里搭了一套环境&#xff0c;才发现原来原理这么简单。这次我们就用最基础的设备&#xff0c;还原企业里常见的多服务发布场景。 实验设备清单就像搭…...

OpenClaw备份策略详解:百川2-13B模型自动化容灾方案

OpenClaw备份策略详解&#xff1a;百川2-13B模型自动化容灾方案 1. 为什么需要自动化备份策略 去年冬天我经历过一次惨痛的教训——硬盘突然损坏导致三个月积累的模型微调数据全部丢失。那次事件后&#xff0c;我开始系统性地研究如何为本地部署的百川2-13B模型构建自动化备份…...

【水果分类】基于GUI计算机视觉和前馈神经网络自动水果分类系统附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

Qwen3-VL-2B离线运行实测:无需联网,本地搭建视觉对话机器人

Qwen3-VL-2B离线运行实测&#xff1a;无需联网&#xff0c;本地搭建视觉对话机器人 1. 引言 在当今AI技术快速发展的时代&#xff0c;视觉语言模型(Vision-Language Model)正逐渐从云端走向本地。Qwen3-VL-2B-Instruct作为一款轻量级多模态模型&#xff0c;能够在普通电脑上实…...

技术赋能B端拓客:号码核验行业的破局与价值重塑,氪迹科技法人股东号码筛选系统,阶梯式价格

2026年&#xff0c;B端拓客正式迈入智能内卷时代&#xff0c;“精准获客、降本增效”成为企业突破业绩瓶颈的核心关键词&#xff0c;而号码核验作为拓客流程的前置过滤环节&#xff0c;直接决定了线索质量与人力效能&#xff0c;成为影响拓客投入回报比的关键变量。当前&#x…...

实时数据处理实战:使用 Apache Flink 消费 Kafka 数据并进行窗口聚合

在大数据时代&#xff0c;实时处理流式数据已经成为企业级应用的标配。无论是用户行为分析、实时监控告警&#xff0c;还是金融风控系统&#xff0c;都离不开低延迟、高吞吐的流处理引擎。本文将带你从零开始&#xff0c;使用 Apache Flink 和 Kafka 构建一个完整的实时数据处理…...

Marker:突破PDF转换瓶颈的革新性文档处理工具

Marker&#xff1a;突破PDF转换瓶颈的革新性文档处理工具 【免费下载链接】marker 一个高效、准确的工具&#xff0c;能够将 PDF 和图像快速转换为 Markdown、JSON 和 HTML 格式&#xff0c;支持多语言和复杂布局处理&#xff0c;可选集成 LLM 提升精度&#xff0c;适用于学术文…...

机器人状态估计——从IMU运动方程到ESKF误差状态建模(上)

1. 从IMU数据到机器人状态估计的挑战 当你第一次拿到一个IMU传感器时&#xff0c;可能会觉得它就像个魔法黑盒——只要把它装在机器人上&#xff0c;就能知道机器人的姿态、速度和位置。但实际操作起来&#xff0c;你会发现IMU数据就像个调皮的孩子&#xff0c;稍不注意就会给你…...