消息队列(Kafka及RocketMQ等对比联系)
目录
消息队列
一、为什么使用消息队列?消息队列有什么优点/缺点?介绍下Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点,如何取舍?
1.公司业务场景是什么,这个业务场景有什么挑战,如果不用MQ有什么麻烦,现在用了MQ有什么好处
2.消息队列优点:
解耦(担心挂)
异步
削峰
3.消息队列缺点:
整个系统可用性降低(外部依赖变多,MQ挂了,系统挂了);复杂度变高(需要注意消息重复,消息遗漏,消息顺序);引入了一致性问题(A系统完成返回成功,用户以为成功,但B/C/D系统哪里某个失败了,那就数据不一致了)
系统复杂度提高,可用性下降,还需要保证一致性
所以需要额外的架构来规避上述问题
4.Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点,如何取舍?
中小型公司用rabbitmq,社区活跃,基本满足需求;大型公司研发能力雄厚,可用rocketmq;大数据实时领域用kafka很标准;
二、如何保证消息队列的高可用性?
RabbitMQ(主从架构)
镜像集群模式,是每个节点上都有queue和数据。写消息到queue时,会自动把消息同步到多个实例的queue上。
Kafka(切分消息+replica副本机制)
broker,topic,partition,repilication
三、如何保证消息不被重复消费?如何保证消费消息的幂等性?(全局唯一标识ack /offset)
1.消息自己该有全局唯一标识,rabbitmq是ack,kafka是offset,记录下来每次消费到哪个号码了
2.结合业务,避免重复消费产生影响。比如数据库的唯一键/主键,比如搭配redis
四、如何保证消息不会丢失?
三个可能性,生产者发送给MQ时丢失了;MQ自己丢失了;MQ发给消费者丢失了
生产端弄丢了数据(事务机制 offset)
MQ弄丢了数据(元数据持久化+confirmed机制)
消费端弄丢了数据(关闭自动提交offset)
关闭自动提交offset,重复消费保证幂等性
brocker宕机,重新选举partition的leader,但其他follower还没同步好数据,就会有数据丢失的问题
五、如何保证消息的顺序性?(写入的顺序、读取的顺序)
消息是顺序性有两个方面,一个是写入消息的顺序,一个是读取的顺序
写入时要保证顺序,key来确认分配到哪个partition,一个partition对应一个消费者,
rabbitmq queue
kafka 一个topic,一个partition,一个consumer,内部单线程消费,这种吞吐低。
六、消息如果延时了或者处理过慢或者积压了几百万消息或者过期了怎么解决
七、如果让你写一个消息队列如何进行架构设计?
系统可拓展性
数据落地磁盘
mq的高可用性
数据0丢失
Kafka
基本概念
角色术语
Broker
Topic
Record
Partition
Offset
Replica
Producer
Consumer
Consumer Offset
Consumer Group
Rebalance
ISR
HW
LEO
拓扑架构
Topic、Partition、Segment、.log、.index、Message
Kafka分布式集群构建
核心设计原理
消息队列
-
一、为什么使用消息队列?消息队列有什么优点/缺点?介绍下Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点,如何取舍?
-
1.公司业务场景是什么,这个业务场景有什么挑战,如果不用MQ有什么麻烦,现在用了MQ有什么好处
- 进行投后业务场景后端从sqlServer无感知切花u你Mysql其中的数据校验。这个业务场景的挑战点就在于如何在真实场景中验证业务逻辑(写操作)的正确性,并保证不影响运营数据的维护,确保上线无问题。这就需要一套前端,一个操作,触发两个请求,一个是原有sqlserver 的请求,另一个是对Mysql数据库操作,主要利用了消息队列实现了双写操作,确保了原有运营数据的正常维护并且后端人员能在最真实最全面的待上线系统中实时进行数据对比
-
2.消息队列优点:
-
解耦(担心挂)
- 通过发布订阅消息这个模型,使系统与系统之间解耦,挂了也不影响整体,
-
异步
- Mysql双写
-
削峰
- 有些时间段业务繁忙,但实际并不需要非常快速响应,可以利用消息队列实现均匀处理消息,保证节点不会挂
-
-
3.消息队列缺点:
-
整个系统可用性降低(外部依赖变多,MQ挂了,系统挂了);复杂度变高(需要注意消息重复,消息遗漏,消息顺序);引入了一致性问题(A系统完成返回成功,用户以为成功,但B/C/D系统哪里某个失败了,那就数据不一致了)
-
系统复杂度提高,可用性下降,还需要保证一致性
-
所以需要额外的架构来规避上述问题
-
-
4.Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点,如何取舍?
-
中小型公司用rabbitmq,社区活跃,基本满足需求;大型公司研发能力雄厚,可用rocketmq;大数据实时领域用kafka很标准;
-
-
-
二、如何保证消息队列的高可用性?
-
RabbitMQ(主从架构)
- 有几种模式,第一种普通集群模式,是一个元数据queue存储信息,消费者拉数据访问到其他节点时,其他节点到queue所在节点拉数据,复制到其他节点再返回。
-
镜像集群模式,是每个节点上都有queue和数据。写消息到queue时,会自动把消息同步到多个实例的queue上。
- 网络传输开销大;而且这样对于大消息是存储不了的,存储方面有瓶颈
-
Kafka(切分消息+replica副本机制)
-
broker,topic,partition,repilication
-
- kafka由多个broker构成,每个broker是一个节点;一个topic可以划分为多个partition,每个partition可以存在于不同的broker上,每个partition就放一部分数据。(切分消息了,真正的分布式)
- kafka0.8以后,多了replica(复制品)副本机制。每个partition的数据都会同步到其他broker上,并且选举leader,leader负责同步data到follower;生产和消费都只跟leader沟通,保证数据一致性。
- 写数据时,生产者写leader,leader将数据落入本地磁盘,接着其他follower自己主动到leader来Pull数据,一旦所有follower同步好数据,就会发送ack给leader,leader收到所有follower的ack后,就会返回写成功的消息给生产者。
- 读数据时,读leader,leader如果挂了,就重新选举leader,读新leader;但是只有当一个消息已经被所有follower都同步成功返回ack的时候,才会被消费者读到。
-
-
-
三、如何保证消息不被重复消费?如何保证消费消息的幂等性?(全局唯一标识ack /offset)
-
1.消息自己该有全局唯一标识,rabbitmq是ack,kafka是offset,记录下来每次消费到哪个号码了
-
2.结合业务,避免重复消费产生影响。比如数据库的唯一键/主键,比如搭配redis
-
-
四、如何保证消息不会丢失?
-
三个可能性,生产者发送给MQ时丢失了;MQ自己丢失了;MQ发给消费者丢失了
-
生产端弄丢了数据(事务机制 offset)
- rabbitmq(事务机制)
- 生产者开启事务机制,得到确认才commit,否则rollback(同步的)
- 吞吐量下来,耗性能
- 生产者开启confirmed机制,每个消息有唯一id,一段时间没有得到ack就重发该消息。(异步的)
- 生产者开启事务机制,得到确认才commit,否则rollback(同步的)
- kafka
- offset,发送到哪记录下
- rabbitmq(事务机制)
-
MQ弄丢了数据(元数据持久化+confirmed机制)
- rabbitmq
- 开启rabbitmq元数据queue的持久化和消息的持久化,持久化到磁盘
- confirmed机制和持久化搭配起来,只有消息被持久化到磁盘,才发送ack通知生产者
- rabbitmq
-
消费端弄丢了数据(关闭自动提交offset)
- kafka
-
关闭自动提交offset,重复消费保证幂等性
-
brocker宕机,重新选举partition的leader,但其他follower还没同步好数据,就会有数据丢失的问题
- 1.给topic的partition设置副本数要大于等于2
- 2.在producer端设置acks=all,要求每条数据必须写入所有replica后,才能认为是写成功了
- acks=0,1,all 分别代表的情况
- 3.在producer端设置reties=MAX,要求一旦写入失败则无限充实
- 4.给kafka服务端设置min.insync.replicas>=1,要求一个leader感知到治沙一个follower还跟自己保持联系没掉队,这样才能确保Leader挂了还有一个follower
-
- kafka
-
-
五、如何保证消息的顺序性?(写入的顺序、读取的顺序)
-
消息是顺序性有两个方面,一个是写入消息的顺序,一个是读取的顺序
-
写入时要保证顺序,key来确认分配到哪个partition,一个partition对应一个消费者,
-
rabbitmq queue
- 拆分为多个queue,每个queue对应一个consumer;或者就一个queue,一个consumer,该consumer内部用内存队列排队,分发给不同的worker来处理
-
kafka 一个topic,一个partition,一个consumer,内部单线程消费,这种吞吐低。
- 一个topic,一个partition,一个consumer,内部单线程消费,这种吞吐低。
- 写N个内存queue,具有相同key的数据都到同一个内存queue,但是对于N个线程,每个线程分别消费一个内存queue即可。(多个queue,多个线程,但是queue与线程1V1)
-
-
六、消息如果延时了或者处理过慢或者积压了几百万消息或者过期了怎么解决
-
1.解决消费端报错,回复consumer消费速度
- 2.征用机器,扩大partition到十倍,consumer到十倍,十倍速度进行快速消费(临时分发数据的consumer程序中,消费之后不做耗时处理,直接均匀轮询写入临时建立好的10倍数量的的queue)
- 3.快速消费后,恢复原先部署的架构
- 过期:设置过期实践ttl;写代码捞丢失的数据
- 快写满了:先用1,2,3进行快速消费数据,然后晚上再补捞数据
-
-
七、如果让你写一个消息队列如何进行架构设计?
-
系统可拓展性
- 分布式的,便于快速拓展,数据切分,数据副本机制
- kafka的设计理念:broker->topic->partition,每个partition存放一个机器,存一部分数据,资源不够,给topic增加partition,做数据迁移,增加机器
-
数据落地磁盘
- 顺序写,避免磁盘随机读写的寻址开销。磁盘顺序读写的性能高
-
mq的高可用性
- replica副本机制->leader&follewer->broker挂了重新选举Leader即可对外服务
- 消费端Rebalance,某消费者实例挂掉后,再均衡分配实例
-
数据0丢失
- 数据多了怎么办,大了怎么办,丢了怎么办,重复消费了怎么办,过期了怎么办,保证顺序怎么办
-
-
Kafka
-
基本概念
- 高吞吐的分布式发布/订阅消息系统,即 为不同系统之间传递消息的
- 存储系统,得益于 其消息持久化功能和多副本机制
- 分布式流处理平台,有完整的流式处理类库
-
角色术语
-
Broker
- 数据存储中心。每个kafka集群包含一个或多个服务器,每个服务器被称为broker
-
Topic
- 每条发布到Kafka集群的消息都有个分类,类别即为Topic(主题),用来区分具体业务
-
Record
- 消息
-
Partition
- 每个Topic包含一个或多个Partition,每个Partition都是有序不变的队列,Partition中的每条消息都会被分配一个唯一ID (称为offset)
-
Offset
- 每条消息的位置信息,单调递增且不变的量
-
Replica
- 副本,数据冗余,高可用
-
Producer
- 消息的生产者,负责发布消息push到kafka broker
-
Consumer
- 消息的消费者,负责到broker去pull消息来消费
-
Consumer Offset
- 消费者位移,代表消费进度
-
Consumer Group
- 消费者组,可以给每个consumer指定消费者组,若不指定,则为默认的group。同时消费多个Partition以实现高吞吐
-
Rebalance
- 再平衡。消费者组内某个消费实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance是Kafka消费者端实现高可用的重要手段。
-
ISR
- In-Sync Replica Set.ISR集合代表每个分区的一组同步集合,处于 ISR 集合中的副本,意味着 follower 副本与 leader 副本保持同步状态,只有处于 ISR 集合中的副本才有资格被选举为 leader
-
HW
- HightWatermark,水位线,指的是消费者能见到的最大的offset,ISR队列中最小的LEO
-
LEO
- Log End Offset, 指的是每个副本最大的offset;
-
- Log End Offset, 指的是每个副本最大的offset;
-
-
拓扑架构
- 多个producer,多个broker,多个 consumer group,外加一个zookeeper。zookeeper来进行管理集群配置,选举Leader,在Consumer Group发生变化时进行rebalance。
- Producer push 消息 发布到broker,consumer使用pull模式从broker订阅并消费消息。
- 生产者将消息分布到不同broker上的不同partition上,消费者可以消费集群中多个节点的多个partition。
- 写消息时,允许多个生产者写道同一个partition中
- 但读消息时,一个partition只能被一个消费者组的一个消费者读,但是可以同时被其他消费组读取。(消费者组内的消费者读partition互斥)
- 支持消息持久化存储。持久化数据存储在log日志文件中。(先缓存在内存,到达一定阈值再统一写入磁盘,减少磁盘IO调用次数)
- 消息写入Partition,是顺序写入磁盘的,避免随机读写的 “寻头”磁头不停移动(磁盘的性能瓶颈之一,SSD例外)
-
Topic、Partition、Segment、.log、.index、Message
- topic的partition数字决定了组成topic的log的数量,>=同时运行的consumer,>集群broker的数量,尽可能均匀分布在broker中
- kafka是基于文件存储的,partition可用来拆分topic,将大量消息分成多批写到不同节点上,均衡负载。
- 每个partition对应一个文件夹,存储该partition的消息,以大小相等的segment文件夹为单位,内容为 消息索引(.index)和消息数据(.log)。partition命名为topic+序号(0,1,...)
-
- Partition文件夹的命名,Segment文件夹的命名,.index 和 .log的切分和命名
-
- Message的物理结构
-
-
Kafka分布式集群构建
- kafka2.8.0版本中移除了对Zookeeper的依赖,通过KRaft进行自己的集群管理。
- 一些配置参数:
- brocker.id
- 若服务器ip地址变化时,只要brocker.id没有变,就不会影响consumer的消费
- log.dirs
- 配置kafka保存数据的位置
- num.partitions
- topic的分区数,过小会影响性能
- logs.segment.bytes
- 配置每个segment数据文件的大小,默认是1G,超过这个大小会自动创建一个新的segment
- delete.topic.enable
- 在0.8.2版本之后,kafka提供的删除topic 的功能,但是默认不会物理删除topic数据。如果需要物理删除,设为true
- acks
- 指定必须多少个分区副本收到消息,生产者才会认为写入消息是成功的。(对消息丢失的可能性有重大影响)
- acks=0:写入消息之前不会等待任何来自服务器的响应,容易丢消息,但是吞吐量高
- aks=1(leader):只要集群的leader节点收到消息,生产者就会收到来自服务器的成功响应。可靠性中等,leader如果发生问题,follower未来得及同步,就会丢失部分数据
- acks=-1(all):只有当所有参与复制的节点都收到消息,生产者才会收到一个来自服务器的成功响应。延迟高。
- 指定必须多少个分区副本收到消息,生产者才会认为写入消息是成功的。(对消息丢失的可能性有重大影响)
- brocker.id
-
核心设计原理
- 存储机制
- 备份和副本机制
- 日志设计
- Controller控制器
- Rebalance
- 可靠性设计
- 延迟、死信、重试队列等
-
相关文章:
消息队列(Kafka及RocketMQ等对比联系)
目录 消息队列 一、为什么使用消息队列?消息队列有什么优点/缺点?介绍下Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优点缺点,如何取舍? 1.公司业务场景是什么,这个业务场景有什么挑战,如果不用MQ有什么麻…...
Go 语言 fmt 模块的完整方法详解及示例
以下是 Go 语言 fmt 模块的完整方法详解及示例,涵盖所有核心功能: 一、输出函数 将数据写入标准输出、文件或字符串。 1. Print / Println / Printf 功能 Print: 写入标准输出,不换行。Println: 写入标准输出并换行。Printf: 格式化写入标…...
Centos 7 安装VNC服务
Centos 7 安装VNC服务 1. 安装 TigerVNC2. 设置 VNC 密码3. 创建并配置 x0vncserver 服务4. 启用并启动服务5. 检查服务状态6. 配置防火墙7. 连接 VNC问题1:出现无法安装可能是镜像源导致的。手动配置镜像源清除 YUM 缓存并重新加载 1. 安装 TigerVNC 确保已安装 TigerVNC 服务…...
3.25-3 request断言
一.request断言 if断言 案例: import requests srequests.Session() url1"http://49.233.201.254:8080/cms/manage/loginJump.do" data1{userAccount:admin,loginPwd:123456} h1{"Content-Type":"application/x-www-form-urlencoded&…...
cmakelist中添加opencv
版本选择 qt的msvc,版本2019 opencv版本 4.5.3 配置了环境变量 x64下的v14中的bin 配置头文件 {"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}","d:\\QT\\6.5.3\\msvc20…...
【003安卓开发方案调研】之ReactNative技术开发安卓
基于2025年最新行业动态和搜索资料,以下是针对国内使用React Native(RN)开发安卓应用的深度分析: 一、技术成熟度评估 1. 核心架构升级 新架构全面普及:2024年起,React Native的 新架构(Fabri…...
面试中如何回答性能优化的问题
性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。 对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用…...
使用cursor开发java案例——springboot整合elasticsearch
安装elasticsearch 打开cursor,输入如下提示词 使用springboot整合elasticsearch。其中elasticsearch服务器ip:192.168.236.134 管理员用户名elastic 管理员密码 PdQy_xfR2yLhpok*MK_ 监听端口9200点Accept all 使用idea打开生成的项目 ࿰…...
CCF-CSP认证题目练习及其题解(4
【问题描述】 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。 【输入形式】 输入的第一行包含一个整数n&#x…...
Chrome 134 版本开发者工具(DevTools)更新内容
Chrome 134 版本开发者工具(DevTools)更新内容 一、隐私与安全面板 旧的 Security 面板已演变为隐私与安全面板,并新增了一个专注于隐私的部分。在该部分中,可以: 在 DevTools 打开时,临时限制第三方 Co…...
12届蓝桥杯—货物摆放
货物摆放 题目描述 小蓝有一个超大的仓库,可以摆放很多货物。 现在,小蓝有 nn 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。 小蓝希望所…...
oracle查询归档日志使用量
1.统计最近30天的数据 SELECT TRUNC(first_time, DD) "日期", SUM(blocks * block_size) / 1024 / 1024 / 1024 "大小(GB)" FROM v$archived_log WHERE first_time > SYSDATE - 30 -- 统计最近30天的数据 GROUP BY TRUNC(first_time, DD) ORDER BY 1 D…...
Redis 发布订阅
Redis 发布订阅 概述 Redis 发布订阅(Pub/Sub)是一种消息传递模式,允许应用在多个客户端之间进行通信。在Redis中,发布订阅允许客户端订阅一个或多个频道,并在这些频道上发布消息。其他订阅了相同频道的客户端会接收到这些消息。 核心概念 频道(Channels) 频道是发…...
歌曲缓存相关功能
1. 核心组件 MusicCacheManager (音乐缓存管理器) 单例模式:确保全局只有一个实例,方便管理。 private static var instance: MusicCacheManager?static func shared() -> MusicCacheManager {if instance nil {instance MusicCacheManager()}ret…...
MySQL学习之用户管理
MySQL学习之用户管理 一、用户1、用户信息2、创建用户3、修改用户密码4、删除用户 二、数据库权限1、MySQL中的权限2、给用户授权3、回收权限 一、用户 1、用户信息 MySQL用户管理: ①、与Linux操作系统类似,MySQL中也有超级用户和普通用户之分。 ②、如…...
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程(持续更新)
【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】A题解题全流程-思路(持续更新) 写在前面: 1、A题、C题将会持续更新,陆续更新发布文章 2、赛题交流咨询Q群:1037590285 3、全家桶依旧包含: 代码、…...
算法训练营第二十三天 | 贪心算法(一)
文章目录 一、贪心算法理论基础二、Leetcode 455.分发饼干二、Leetcode 376. 摆动序列三、Leetcode 53. 最大子序和 一、贪心算法理论基础 贪心算法是一种在每一步选择中都采取当前状态下的最优决策,从而希望最终达到全局最优解的算法设计技术。 基本思想 贪心算…...
SpringCloud消息总线:Bus事件广播与配置动态刷新
文章目录 引言一、Spring Cloud Bus基本架构二、配置动态刷新实现2.1 基础配置2.2 刷新流程2.3 定向刷新 三、自定义事件广播3.1 定义自定义事件3.2 注册和监听事件3.3 发布事件 四、高级配置与优化4.1 消息持久化4.2 事件追踪4.3 安全控制 总结 引言 在微服务架构中ÿ…...
家庭网络结构之局域网通信
整个互联网非常复杂,涉及到很多知识,学习互联网不能一蹴而就,所以这里从最简单的家庭网络开始学习 家庭网络一般是通过Modem( 作用:进行数字信号和模拟信号的转换 ) 拨号上网,然后通过家庭路由器,将网络连接…...
突破反爬困境:SDK架构设计,为什么选择独立服务模式(四)
声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的,旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…...
java 设置操作系统编码、jvm平台编码和日志文件编码都为UTF-8的操作方式
以下是 Java中设置操作系统编码、JVM平台编码和日志文件编码为UTF-8 的详细步骤和代码示例: 一、设置操作系统编码为UTF-8 1. Windows系统 修改系统区域设置: 进入 控制面板 → 时钟和区域 → 区域。在“管理”选项卡中,点击“更改系统区域…...
SpringBoot:几种常用的接口日期格式化方法
全局时间格式化 通过在配置文件中设置可以实现全局时间格式化。在 Spring Boot 的配置文件 application.properties(或 application.yml)中添加以下两行配置: #?格式化全局时间字段 spring.jackson.date-formatyyyy-MM-dd?HH:mm:ss #?指…...
解题思路:LeetCode 2711. 对角线上不同值的数量差
解题思路:LeetCode 2711. 对角线上不同值的数量差 在LeetCode的题目2711中,我们需要计算一个矩阵中每个单元格的左上角对角线和右下角对角线上不同值的数量差。这个问题可以通过暴力法解决,但效率较低。本文将介绍一种更高效的解决方案&…...
Jackson实现JSON数据的合并
JSON数据的操作,系列文章: 《Jackson的核心类与API方法:ObjectMapper、JsonNode、ObjectNode、ArrayNode》 《Jackson的使用与创建Jackson工具类》 《Jackson使用ObjectNode对象实现JSON对象数据(一):增、删…...
Elasticsearch 倒排索引 和 正排索引
一、倒排索引 倒排索引是 Elasticsearch 实现高效全文搜索的核心技术。它通过将词项与文档 ID 关联,支持快速检索、短语查询、布尔查询和相关性评分。尽管倒排索引在存储和更新方面有一定的开销,但通过词典优化、倒排列表压缩、分片和缓存等技术&#x…...
Cocos Creator Shader入门实战(五):材质的了解、使用和动态构建
引擎:3.8.5 您好,我是鹤九日! 回顾 前面的几篇文章,讲述的主要是Cocos引擎对Shader使用的一些固定规则,这里汇总下: 一、Shader实现基础是OpenGL ES可编程渲染管线,开发者只需关注顶点着色器和…...
【Python】pillow库学习笔记1-Image类
《Python语言程序设计基础 》第3版,嵩天 黄天羽 杨雅婷著,P293 1.pillow库概述 Pillow 库是Python图像处理重要的第三方库。 Pillow库是PIL (Python image library) 库的一个扩展,需要通过pip工具安装。安装PIL库需要注意,安装…...
解决 MySQL 的 sql_mode 中包含 only_full_group_by模式导致group by SQL报错
sql 报错: Cause: java.sql.SQLSyntaxErrorException: Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column ev_data_transmission.p.push_type which is not functionally dependent on columns in GROUP BY clause; this…...
【微服务架构】本地负载均衡的实现(基于随机算法)
前言 负载均衡 概念:一种将网络流量或业务请求均匀分配到多个服务器或服务实例上的技术,旨在提高系统的可用性、性能和可伸缩性。作用: 提高性能:通过将请求分散到多个实例上,避免单个实例因请求过多而过载ÿ…...
记一次线上SQL死锁事故
一、 引言 SQL死锁是一个常见且复杂的并发控制问题。当多个事务在数据库中互相等待对方释放锁时,就会形成死锁,从而导致事务无法继续执行,影响系统的性能和可用性。死锁不仅会导致数据库操作的阻塞,增加延迟,还可能对…...
电机控制常见面试问题(十八)
文章目录 一.电机控制高级拓扑结构1.LLC 二.谈谈电压器饱和后果三.电压器绕组连接方式的影响四.有源逆变的条件 一.电机控制高级拓扑结构 1.LLC LLC是什么?—— 一个会"变魔术"的电源盒子 想象你有一个魔法盒子,能把电池的电压变大或变小&…...
数据结构之双链表
目录 1 简介 2 双链表的基本概念 2.1 节点结构 2.2 头插法和尾插法 3 代码实现 4 代码解析(部分) 4.1 初始化双链表 4.2 添加节点 4.3 删除节点 4.4 获取节点 4.5 插入节点 4.6 反转链表 4.7 打印链表 4.8 核心操作分析 5 总结 1 简介 …...
dell 台式机 电脑 纽扣电池 如何取下?
dell 台式机 电脑 纽扣电池 如何取下? 戴尔-optiplex-3060-塔式机-服务手册...
JSON二次序列化问题分析
正常的JSON应该是: json Apply to VectorServic... { "id": "d471c19c-70eb-4f29-8604-b8284e8a9400", "text": "人为干预, 降低生产成本...", "metadata": { "chunkIndex": 2, …...
WebSocket 传输大量数据好不好?稳定不稳定
使用 WebSocket 传输大量数据 是可行的,但在实际应用中需要注意一些限制和优化策略。以下是关于 WebSocket 传输大量数据的详细分析: 1. WebSocket 传输大量数据的可行性 优点 实时性:WebSocket 是全双工通信协议,适合实时传输数…...
代码随想录刷题day52|(二叉树篇)106.从中序与后序遍历序列构造二叉树(▲
目录 一、二叉树理论知识 二、构造二叉树思路 2.1 构造二叉树流程(给定中序后序 2.2 整体步骤 2.3 递归思路 2.4 给定前序和后序 三、相关算法题目 四、易错点 一、二叉树理论知识 详见:代码随想录刷题day34|(二叉树篇)二…...
无人设备遥控器之调度自动化技术篇
一、技术原理 信息采集与处理: 通过传感器、仪表等设备采集无人设备的各种数据,如位置、速度、状态等。 将采集到的数据传输到调度自动化系统中进行处理和分析,以获取设备的实时状态。 系统建模与优化: 调度自动化系统会根据…...
红宝书第十五讲:详解JavaScript迭代器与生成器:Symbol.iterator与yield
红宝书第十五讲:详解JavaScript迭代器与生成器:Symbol.iterator与yield 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、迭代器(Iterator)的“传送带”模式 迭代…...
【AI】NLP
不定期更新,建议关注收藏点赞。 目录 transformer大语言模型Google Gemma疫情网民情绪识别 整体框架 baseline构建 模型调参、模型优化、其他模型 数据trick、指标优化、magic feature 数据增强、伪标签、迁移学习 模型融合sklearn中TFIDF参数详解 频率阈值可以去掉…...
ENSP学习day10
NAT地址转换技术(一) NAT(Network Address Translation)地址转换技术是一种在计算机网络中常用的技术,在数据包从一个网络传输到另一个网络时,会对数据包中的源IP地址和目的IP地址进行修改的过程。这种技术…...
文件上传绕过的小点总结(4)
9.末尾点删除处理缺陷 给出源码: $file_name trim($_FILES[upload_file][name]); $file_name deldot($file_name);//删除文件名末尾的点 $file_ext strrchr($file_name, .); $file_ext strtolower($file_ext); //转换为小写 $file_ext str_ireplace(::$DATA,…...
实战-MySQL5.7升级8.0遇到的四个问题
近期几个项目的MySQL由5.7升级到8.0,升级过程中遇到四个问题,记录下来分享一下: 第一个问题详见之前的文章: MySQL 5.7升级8.0报异常:处理新增关键字 第二个问题详见之前的文章: MySQL 5.7升级8.0报异常…...
卷积神经网络的原理、实现及变体
卷积神经网络convolutional neural network,CNN 是为处理图像数据而生的网络,主要由卷积层(填充和步幅)、池化层(汇聚层)、全连接层组成。 卷积 虽然卷积层得名于卷积(convolution)…...
java 线程创建Executors 和 ThreadPoolExecutor 和 CompletableFuture 三者 区别
Executors是一个线程池的工具类,而ThreadPoolExecutor是Executor接口的一个实现,是线程池的核心类。 Executors提供了多种快速创建线程池的方法,而ThreadPoolExecutor则提供了更高的自定义和控制能力。 Executors是一个工具类࿰…...
Redisson 实现分布式锁简单解析
目录 Redisson 实现分布式锁业务方法:加锁逻辑LockUtil 工具类锁余额方法:工具类代码枚举代码 RedisUtil 工具类tryLock 方法及重载【分布式锁具体实现】Supplier 函数式接口调用分析 Redisson 实现分布式锁 业务方法: 如图,简单…...
Python条件处理,新手入门到精通
Python条件处理,新手入门到精通 对话实录 **小白**:(崩溃)我写了if x 1:,为什么Python会报错? **专家**:(推眼镜)**是赋值,才是比较**!想判断相…...
详细比较StringRedisTemplate和RedisTemplate的区别及使用方法,及解决融合使用方法
前言 感觉StringRedisTemplate和RedisTemplate非常的相识,到底有什么区别和联系呢?点开idea,打开其依赖关系,可以看出只需使用maven依赖包spring-boot-starter-data-redis,然后在service中注入StringRedisTemplate或者…...
开源模型应用落地-语音转文本-whisper模型-AIGC应用探索(五)
一、前言 在上一节中,学习了如何使用vLLM来部署Whisper-large-v3-turbo模型。不过,在实际使用时,模型一次只能处理30秒的音频。今天,将结合实际业务,介绍如何处理一段完整的音频,并生成相应的字幕文件。 相…...
python每日十题(10)
在Python语言中,源文件的扩展名(后缀名)一般使用.py。 保留字,也称关键字,是指被编程语言内部定义并保留使用的标识符。Python 3.x有35个关键字,分别为:and,as,assert&am…...
安装和部署Tomcat并在idea创建web文件
一、背景 实验任务为安装Tomcat并创建web文件 为提高安装效率并且通俗易懂,免得大量文字浪费时间,这里我们采用图片加文字的方式来给大家讲解这个安装教程。 二、安装过程 首先第一步一定要注意你是否下载了JDK,如果你是像我一样下载一个…...