自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 收藏
  • 关注

原创 RabbitMQ学习总结

RabbitMQ是一款开源消息中间件,支持AMQP、STOMP和MQTT协议。其核心架构包括生产者、虚拟主机(VHost)、交换器、队列、绑定和消费者等组件。作为分布式系统通信枢纽,RabbitMQ通过消息队列实现应用解耦,提供可靠的消息传递机制。常见问题涉及消息确认、持久化、集群部署和性能优化等方面。该技术广泛应用于微服务架构和异步处理场景,是构建高可用分布式系统的重要工具。

2026-01-20 10:16:20 289

原创 RocketMQ学习总结

Apache RocketMQ是一款高性能分布式消息队列系统,采用Producer-Broker-Consumer架构,通过NameServer实现服务发现。支持多种集群模式(单Master/多Master/多Master多Slave)和消费模式(广播/集群)。消息处理提供同步/异步复制与刷盘机制,5.0版本引入POP模式优化消费效率。具备事务消息、顺序消息、延时消息等特性,通过三级加锁保证顺序性。在消息可靠性方面,需生产者、Broker、消费者协同配合,但仍存在消息丢失和重复消费风险。针对消息堆积问题,提

2026-01-17 10:25:59 504

原创 Redis学习总结

本文摘要: Redis作为高性能内存数据库,采用AP模型实现最终一致性,支持多种数据结构(String、Hash、List、Set等)。其核心特性包括:1)自定义SDS字符串提升效率;2)SortedSet采用listpack和skiplist结构;3)集群模式支持主从/哨兵/Cluster;4)数据分片通过16384个哈希槽实现;5)持久化机制结合RDB快照和AOF日志;6)内存管理采用惰性删除+定期删除策略;7)单线程架构+IO多路复用保证高性能。Redis与Memcached相比功能更丰富,但需注意热

2025-08-07 21:00:00 771

原创 Kafka 消息的发送过程

Kafka消息发送机制提供同步和异步两种方式:同步发送阻塞等待结果,异步发送通过回调提升吞吐量。发送流程涉及主线程、Sender线程和RecordAccumulator组件,消息依次经过拦截器、序列化器、分区器处理,在缓冲区按配置参数批量聚合后由Sender线程发送至Broker。Kafka支持三种ACK机制(0/1/-1),分别对应不同可靠性级别,其中-1(所有ISR副本确认)提供最高数据可靠性保障。

2026-01-22 11:16:08 62

原创 为什么Kafka没办法100%保证消息不丢失?

Kafka提供三种消息交付可靠性级别:最多一次、至少一次(默认)和精确一次。分析表明,Kafka自身无法100%保证可靠性,生产者异步发送、Broker刷盘机制和副本同步都可能造成消息丢失。建议结合生产者acks=-1设置、分布式事务等机制来提升可靠性。消费者需在处理成功后提交偏移量以避免丢失。通过多层面组合方案可最大限度保障消息传递可靠性。

2026-01-22 11:04:21 52

原创 Kafka 的选举过程

摘要:Kafka采用两种选举机制:1) Partition Leader选举,当Leader故障时,ISR集合中的副本通过ZooKeeper创建序列节点,最小序列号副本当选;2) Controller选举,Broker通过竞争ZooKeeper的/controller节点成为集群控制器。两种机制均利用ZooKeeper的序列节点特性和临时节点机制,确保选举结果的唯一性和快速故障恢复。(149字)

2026-01-22 11:03:52 304

原创 Kafka如何实现顺序消费?

Kafka通过Partition机制实现消息顺序存储:消息在单个Partition内严格有序,跨Partition则无序。生产者可通过三种方式定向发送消息到特定Partition:直接指定Partition编号、通过Key自动路由或自定义Partitioner逻辑。其中Key路由方式最常用,默认采用哈希算法计算目标Partition。消费者按offset顺序读取Partition内消息,从而保证顺序消费。要实现全局有序需将Topic设为单Partition,但会牺牲并发性能。

2026-01-22 11:03:12 64

原创 Kafka的重平衡机制

Kafka重平衡机制是在消费者组变化时重新分配分区的过程,主要实现负载均衡和高可用性。触发条件包括消费者增减、主题变更或协调器故障。重平衡流程包括暂停消费、计算分配方案、通知消费者和恢复消费五个步骤。虽然能提升均衡性,但会带来性能开销和短暂停服问题。优化策略包括静态成员、多种分配策略选择,4.0版本还引入了服务端分配逻辑和独立重平衡功能。设计时应权衡利弊,尽量减少重平衡频率。

2026-01-21 10:47:45 286

原创 Kafka怎么保证消费只消费一次的?

Kafka消息消费机制解析:Kafka通过消费者组机制确保消息只被消费一次,配合手动提交位移和幂等设计实现精确消费。支持三种语义:At-least-once(确保至少消费一次,可能重复)、Exactly-once(0.11+版本通过事务机制实现精确消费)和At-most-once(可能丢失)。选择建议:可靠性优先选At-least-once,严格要求无重复选Exactly-once但需承担额外配置成本。金融等场景推荐At-least-once,可接受少量重复确保数据可靠。

2026-01-21 10:46:35 71

原创 Kafka如何保证消息不丢失?

Kafka消息可靠性保障机制摘要:Kafka通过生产者、Broker集群和消费者三方面机制确保消息传递可靠性。生产者端采用确认机制(acks=-1)和重试机制保证消息投递;Broker集群通过多副本(replication.factor>1)、ISR同步(min.insync.replicas>1)和持久化存储防止数据丢失;消费者需禁用自动提交(enable.auto.commit=false),采用手动提交偏移量,配合消费者组机制实现故障转移。这套多层次的保障机制共同确保Kafka消息传递的最

2026-01-21 10:45:54 71

原创 Kafka的架构

Kafka采用生产者-消费者架构,由Producer、Broker集群和Consumer组成核心组件。消息按Topic分类存储,每个Topic划分为多个有序的Partition。集群通过多Broker节点实现高可用,每个分区设置Leader处理请求和Follower备份。ZooKeeper负责集群协调,新版本将消费者偏移量存储在内部Topic。系统通过分区副本和自动故障转移确保容错能力,Offset机制保障消息顺序处理。

2026-01-21 10:45:12 67

原创 Kafka 为什么这么快?

Kafka通过三大维度的优化设计实现高性能消息队列:生产端采用批量发送、异步处理和消息压缩提升吞吐量;存储端运用零拷贝、顺序写入和稀疏索引等技术优化I/O效率;消费端通过消费者群组、并行消费等机制实现高效处理。这些优化措施共同确保了Kafka高吞吐、低延迟的特性。

2026-01-21 10:44:21 23

原创 RabbitMQ 是如何保证高可用的?

RabbitMQ提供三种模式确保高可用:单机模式仅用于测试;普通集群模式在多台服务器部署实例,共享元数据但消息只存于单一实例,通过内部通信实现消息传递;镜像模式则在所有实例上同步存储完整数据,实现真正的高可用。普通集群提升了性能和存储量,但单点故障会影响部分数据访问;镜像模式通过全量复制确保任意实例故障不影响服务,但写入性能会有所降低。生产环境推荐使用镜像模式以实现可靠的高可用保障。

2026-01-20 10:15:43 68

原创 如何保障消息一定能发送到RabbitMQ

RabbitMQ消息可靠性解决方案:通过Publisher Confirm和Return机制确保消息投递。Publisher Confirm机制通过回调函数监控消息状态,交换器成功处理则发送ACK,失败则NACK。Publisher Return机制处理无法路由的消息,将其返回生产者。实现时需启用confirmSelect()和添加ConfirmListener/ReturnListener回调。示例代码展示了如何设置这些机制,在消息确认或返回时执行相应处理逻辑,如告警或重试,从而保证消息最终成功投递。

2026-01-20 10:15:06 63

原创 RabbitMQ如何保证消息不丢

RabbitMQ消息持久化机制可防止服务异常导致消息丢失。通过设置队列(durable=true)、交换机持久化,并配置消息deliveryMode=2实现消息磁盘存储。消费者确认机制确保消息正确处理,但异步持久化特性使其无法100%可靠,绝对可靠需配合本地消息表等额外措施。持久化虽增加I/O开销,但对关键业务消息的可靠性至关重要。

2026-01-20 10:10:02 65

原创 RabbitMQ的事务机制

RabbitMQ的事务机制通过txSelect()、txCommit()和txRollback()方法实现消息的原子性操作。生产者开启事务后发送消息,若执行成功则提交事务确保消息送达,若出现异常则回滚撤销操作。虽然事务能保证消息完整性,但会影响性能。示例代码展示了如何通过事务发送消息:先开启事务,发送多条消息后提交,若过程中出现异常则回滚。这种方式能确保消息要么全部成功发送,要么全部不发送。

2026-01-20 10:09:37 36

原创 RabbitMQ如何实现消费端限流

摘要:RabbitMQ通过basicQos方法实现消费端限流,防止系统过载。核心机制包括:1)关闭自动确认;2)设置prefetchCount限制未确认消息数;3)手动消息确认。示例代码展示如何配置单条消息处理模式(prefetchCount=1),处理完成后通过basicAck确认。这种机制能有效控制消息处理速率,确保系统稳定性。(148字)

2026-01-19 11:06:34 34

原创 RabbitMQ的死信队列

RabbitMQ的死信队列(DLQ)用于处理无法正常消费的消息,包括处理失败、过期、被拒绝或无法路由的消息。通过配置x-dead-letter-exchange和x-dead-letter-routing-key参数,可将死信消息重新路由到指定队列。该机制不仅提高了消息处理的可靠性,还能实现延迟消息等功能。配置过程包括创建死信交换机和队列,并在主队列设置相关参数。Spring Boot示例展示了如何通过注解方式实现死信队列的配置和消息监听。这种机制为失败消息提供了处理方案,确保重要业务消息不会丢失。

2026-01-19 11:06:17 53

原创 RabbitMQ如何实现延迟消息?

RabbitMQ实现延迟消息主要有两种方式:死信队列和延迟消息插件。死信队列通过设置消息TTL使其过期后进入死信队列,优点是可自定义延迟时间,但存在队头阻塞问题且系统较复杂。延迟消息插件则通过特殊交换机存储消息并定时投递,解决了队头阻塞问题,但存在49天最大延迟限制和单节点存储风险。两种方案各有利弊,需根据业务场景选择。

2026-01-19 11:06:00 323

原创 RabbitMQ是怎么做消息分发的?

RabbitMQ提供6种消息分发模式:简单模式(单生产者单消费者)、工作队列(多消费者并发处理)、发布订阅(广播消息)、路由模式(按路由键分发)、主题模式(通配符路由)和RPC模式(远程调用)。每种模式适用于不同场景,从基础消息传递到复杂分布式调用,可根据业务需求选择合适模式。具体实现参考RabbitMQ官方文档。

2026-01-19 11:05:25 58

原创 RabbitMQ的整体架构

RabbitMQ是一个开源消息中间件,支持AMQP等多种协议。其架构包含生产者、交换器、虚拟主机(VHost)、队列和消费者等核心组件。VHost提供资源隔离功能,交换器负责消息路由,队列存储待处理消息,消费者进行最终处理。整个系统通过绑定规则实现消息的高效传递。

2026-01-19 11:05:05 27

原创 RocketMQ如果重复消费了,可能是什么原因导致的?

RocketMQ重复消费的常见原因包括:消费失败返回RECONSUME_LATER状态、消费处理超时触发重投机制、网络问题导致消息重复发送,以及广播模式下消息被所有消费者接收。这些情况都会导致同一条消息被多次处理。

2026-01-17 10:16:50 49

原创 RocketMQ如果丢消息了,可能的原因是什么?

摘要:消息丢失常见于发送端、Broker端和消费端。发送端问题包括单向发送模式、未处理发送失败及生产者意外终止;Broker端主要因宕机导致消息未持久化或同步;消费端则因消息过期未消费或消费失败仍提交offset造成丢失。需针对不同场景采取相应措施确保消息可靠性。

2026-01-17 09:51:07 77

原创 RocketMQ 5.0中的 pop 模式

RocketMQ5.0引入Pop模式改进消息消费机制。该模式结合推拉优势,解耦消费者与队列的绑定关系,由Broker统一管理消费位点。相比传统Push模式,Pop模式消除了负载均衡耗时、消费者数量受限等问题,并允许消费者仅专注消息拉取。当个别消费者故障时,其他消费者仍可继续消费,有效避免消息堆积。这种设计显著提升了系统的可靠性和扩展性。

2026-01-17 09:10:09 78

原创 RocketMQ的消息是推还是拉?

消息队列支持Push和Pull两种主要消费模式。Push模式由服务端主动推送消息,实时性较好但存在客户端过载风险;Pull模式由客户端主动拉取,可控制消费节奏但会增加服务端压力。RocketMQ中Push模式底层仍基于Pull机制实现,通过长轮询机制模拟推送效果。代码示例展示了DefaultMQPushConsumer和DefaultMQPullConsumer的使用方式,后者已被标记为弃用,建议改用改进版的DefaultLitePullConsumer。两种模式各有优劣,开发者需根据业务场景选择合适方案。

2026-01-17 08:54:52 363

原创 RocketMQ怎么实现消息分发的?

摘要:RocketMQ支持两种消息消费模式:广播消费和集群消费。广播模式下消息会推送给所有消费者,确保每个消费者至少消费一次,但需自行处理失败情况;集群模式(默认)只需任意一个消费者处理消息,支持失败重投且可能路由到不同机器。可通过设置MessageModel属性切换模式:CLUSTERING为集群模式,BROADCASTING为广播模式。集群模式在实际应用中更为常见。

2026-01-16 16:10:59 76

原创 RocketMQ的工作流程

RocketMQ核心组件包括NameServer(路由中心)、Broker(消息存储转发)、Producer(消息生产者)和Consumer(消息消费者)。NameServer管理Broker和Topic路由信息,支持服务发现;Broker负责消息持久化和传输;Producer发送消息,Consumer订阅消费消息。工作流程中,NameServer启动后接收Broker注册,Producer/Consumer通过NameServer获取Broker信息进行通信,支持同步/异步消息处理模式。系统通过心跳机制维

2026-01-16 15:56:59 66

原创 RocketMQ消息堆积问题分析与解决方案

消息堆积是消息队列中的常见现象,主要由消费能力不足导致。合理的堆积是MQ削峰填谷功能的体现,不需立即干预。处理流程包括定位Topic、评估堆积程度、检查上游流量等。解决方案分为临时扩容消费者和长期优化消费逻辑,如批量拉取、慢SQL优化、并发消费等。业务允许时可采取"先收单后处理"模式,或控制生产者速率、清理无效消息。关键是根据业务容忍度选择合适方案。

2026-01-16 15:19:58 398

原创 RocketMQ有几种集群方式

本文介绍了三种集群模式:单Master模式(一个Master和多个Slave,Master故障则集群不可用)、多Master模式(多个Master无Slave,配置简单但故障时消息实时性受影响)、多Master多Slave模式(每个Master有Slave,数据和服务高可用但性能略低)。三种模式各具特点,适用于不同场景需求。

2026-01-16 11:05:09 45

原创 RocketMQ如何实现延时消息

RocketMQ的延迟消息机制允许消息在指定延迟时间后被消费。5.0版本前仅支持18个固定延迟级别(1s-2h),使用Timer定时器实现,但存在性能瓶颈。5.0版本引入时间轮算法,实现O(1)时间复杂度,支持更精细的时间粒度,显著提升高并发场景下的投递效率。Broker端通过时间轮管理定时消息,按过期时间分配到对应时间槽,到达目标时间后批量投递。开发者可通过setDelayTimeLevel方法设置延迟级别,实现延迟消息发送功能。

2026-01-16 10:17:23 64

原创 RocketMQ如何保证消息不丢失?

摘要:RocketMQ消息可靠性保障需生产者、Broker和消费者三方协同。生产者应使用同步发送或带回调的异步发送;Broker需配置同步刷盘(flushDiskType=SYNC_FLUSH)和主从同步(brokerRole=SYNC_MASTER);消费者应在业务处理完成后返回CONSUME_SUCCESS。虽然这些措施能最大限度减少消息丢失,但仍无法保证100%可靠性。

2026-01-15 10:46:16 35

原创 RocketMQ如何保证消息的顺序性?

RocketMQ顺序消费机制摘要:通过队列分区保证消息顺序性,生产者使用MessageQueueSelector确定目标队列(如取模路由),必须同步发送。消费者通过MessageListenerOrderly实现顺序处理,采用三级加锁机制(Broker、MessageQueue、ProcessQueue)确保消费顺序,特别防止重平衡时的重复消费。顺序消费会降低吞吐量并可能导致消息阻塞,需谨慎使用。

2025-12-18 15:26:33 192

原创 RocketMQ的事务消息是如何实现的?

RocketMQ的事务消息机制通过TransactionListener接口实现,采用半消息+本地事务+状态确认的三阶段流程。首先发送标记为"prepared"的半消息并存储,执行本地事务后根据结果提交或回滚消息。通过事务状态检查、超时回滚等机制确保最终一致性,解决了传统方案中消息丢失和状态追踪问题,实现了事务操作与消息投递的原子性。

2025-12-18 09:22:28 348

原创 RocketMQ 的架构

RocketMQ架构由生产者、Broker和消费者三大核心组件构成。生产者发送消息到Broker,消费者从Broker获取消息。Broker集群负责消息存储和转发,NameServer维护Broker元数据。消息按Topic逻辑分类,每个Topic包含多个物理存储单元MessageQueue,消费者从指定Queue获取消息。这种架构支持高可用集群部署,实现高效的消息处理。

2025-12-17 15:43:42 436

原创 Redis Hash 与 Java HashMap 对比

Redis的hash结构底层采用ziplist/listpack和hashtable两种实现,根据元素数量和值大小自动选择。ziplist内存高效但操作慢O(n),hashtable操作快O(1)但内存开销大。Java的HashMap采用数组+链表+红黑树结构,非线程安全,需额外同步处理。Redis采用单线程天然线程安全,且通过渐进式rehash平滑扩容;而HashMap一次性扩容会阻塞。Redis适合小数据量存储,无需渐进迁移。两者在性能和内存使用上各具特点,需根据具体场景选择。

2025-11-18 15:04:35 219

原创 Redis 的 ZSet 实现排行榜

本文介绍了在Redis中使用zset实现排行榜的优化方案。针对默认zset在相同分数时按value排序的问题,提出将score设计为浮点数形式:整数部分存储用户得分,小数部分存储处理后的时间戳(1-timestamp/1e13)。该方案能确保首先按得分降序排列,同分时按时间戳升序排列(先达分的用户排名靠前),有效解决同分用户的时间排序问题,并提供了Java代码示例。

2025-11-18 15:04:18 171

原创 用Redis实现朋友圈点赞功能

本文介绍了基于Redis ZSet实现朋友圈点赞功能的技术方案。通过将朋友圈ID作为ZSet的Key,用户ID作为value,时间戳作为score,实现了高效点赞记录与管理。方案支持点赞/取消点赞操作,并能按时间顺序展示用户列表。文中提供了Java代码示例,包括点赞、取消点赞和查询点赞列表的核心实现逻辑。该方案利用Redis特性确保了数据唯一性和高效查询,适合社交场景的点赞功能开发。

2025-11-18 15:04:02 227

原创 Redis内存碎片详解

内存碎片是Redis中已分配但未被利用的内存空间,主要由jemalloc分配器的固定内存块划分和数据结构的自动扩容导致。可通过INFO memory查看碎片率,正常范围为1.0-1.5。Redis 4.0+提供了后台碎片整理功能,通过CONFIG SET activedefrag yes开启,并配合阈值参数(如50%-70%碎片率触发)和CPU控制参数进行优化。严重时也可重启解决。该机制能有效回收碎片内存而不影响服务。

2025-11-15 08:54:21 574

原创 ZSet为什么在数据量少的时候用ZipList,而在数据量大的时候转成SkipList?

Redis ZSet根据数据规模智能选择底层结构:元素数量<128且长度≤64字节时使用内存紧凑的ZipList(O(N)操作),否则切换为支持高效查询的SkipList(O(logN)操作)。这种设计在内存效率和查询性能间取得平衡,ZipList适合小数据节省内存,SkipList则优化大数据操作性能,展现了Redis对不同场景的适应性优化能力。(149字)

2025-11-15 08:54:06 181

原创 Redis中的setnx和setex的区别?

Redis提供了SETNX和SETEX两种键值设置命令。SETNX仅在键不存在时设置值但不支持过期时间,适用于分布式锁等场景;SETEX则无条件设置值并指定过期时间,常用于缓存控制。要实现"仅当键不存在时设置并带过期时间"的操作,可采用两种方式:非原子操作需要先SETNX再EXPIRE,或者使用推荐方案SET key value NX EX seconds原子操作。理解这些命令差异有助于合理选择应用方案。

2025-11-15 08:53:53 369

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除