- 博客(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关注的人
RSS订阅