- 博客(41)
- 收藏
- 关注
原创 Kafka 架构原理解析
通过对 Kafka 架构原理的深入剖析,我们领略了其在分布式存储、高可用设计以及丰富应用场景中的卓越魅力。Kafka 的分区分配策略和基于 LogSegment 的数据存储格式,使其在海量数据存储和高效读写方面表现出色;ISR 副本机制和严谨的 Leader 选举流程,确保了集群在复杂环境下的高可用性和数据一致性;而在日志收集、流量削峰、微服务异步通信和实时数据流处理等核心应用场景中,Kafka 更是成为了不可或缺的关键技术,为企业的数字化转型和业务创新提供了强大的支持。
2025-06-12 15:59:56
392
原创 Kafka入门:解锁核心组件,开启消息队列之旅
Kafka 的核心组件 Broker、Topic、Partition、Replica、Producer 和 Consumer,共同构建了一个高效、可靠的分布式消息系统。它们各自承担着独特的职责,又相互协作,确保了 Kafka 在高并发、大数据量场景下的卓越表现。Broker 作为 Kafka 集群的节点,负责消息的存储和传输;Topic 是消息的分类标识,方便对消息进行管理;Partition 实现了消息的并行处理和存储;Replica 保障了数据的高可用性和容错性;
2025-06-12 12:02:37
341
原创 解锁Flink CDC:实时数据同步秘籍
Flink CDC 作为 Java 实时数据处理领域的强大工具,以其卓越的实时性、可靠性和多数据库支持能力,为企业解决了诸多数据处理难题。从原理到实战,我们深入了解了它的工作机制和应用方法,通过案例展示了其在不同场景下的高效表现。希望通过本文的介绍,能激发大家对 Flink CDC 的兴趣,鼓励更多开发者深入学习和应用这一强大的技术,在实时数据处理的领域中探索创新,如果你在学习和使用 Flink CDC 的过程中有任何问题或心得,欢迎在评论区留言分享,让我们一起交流进步!
2025-06-11 09:34:15
877
1
原创 深入剖析Debezium:CDC领域的“数据魔法棒”
目前,市面上已经涌现出了许多优秀的 CDC 中间件,它们各具特色和优势,为企业提供了丰富的选择。比如阿里巴巴开源的 Canal,它通过模拟 MySQL 主从复制的原理,从 MySQL 的二进制日志(binlog)中解析出数据变更信息,实现了高效的数据捕获和同步。Canal 在国内拥有广泛的用户群体,尤其是在一些对数据一致性要求较高的互联网企业中得到了大量应用。
2025-06-10 15:03:15
1065
1
原创 深入探索CDC之Canal:解锁全量与增量复制的奥秘
Canal 在数据同步方面的表现,其优势十分显著。首先是实时性,Canal 基于 MySQL 的 binlog 实时捕获数据变更,能够在数据发生变化的瞬间就将这些变更同步到目标系统 ,如前文电商案例中,订单数据的实时更新得以快速同步到 Elasticsearch 和 Redis ,为实时业务分析和用户查询提供了及时的数据支持。
2025-06-09 14:30:53
938
原创 深入探索CDC:实时数据同步利器
通过本文的介绍,我们深入了解了 CDC 的概念、工作原理、在 Java 中的应用场景、实战步骤以及其优势与挑战。希望读者能够在实际项目中尝试应用 CDC 技术,充分发挥其在数据同步和实时处理方面的强大功能,为企业的数据管理和业务发展提供有力支持。在不断发展的技术浪潮中,让我们持续关注 CDC 技术的发展趋势,积极探索其更多的应用可能性,为数据处理领域带来更多的创新和突破。工具支持数据库实现方式特点DebeziumMySQL、PostgreSQL 等日志解析。
2025-06-08 16:23:30
693
原创 解锁Java线程池:性能优化的关键
Java 线程池作为并发编程中的重要工具,为我们提供了高效管理和执行线程的能力。通过对线程池的深入理解,我们掌握了不同类型线程池的特点和适用场景,剖析了 ThreadPoolExecutor 的核心原理和任务处理流程,并且通过实战演练和性能调优,学会了如何正确使用线程池来提升系统的性能和稳定性。在实际应用中,合理使用线程池可以显著提高 Java 应用程序的性能和响应速度,减少资源的浪费和系统的开销。同时,我们也需要注意线程池使用过程中的常见问题,避免陷入误区,及时排查和解决性能瓶颈。。
2025-06-05 15:36:15
846
原创 Java异步编程的秘密武器:CompletableFuture
CompletableFuture作为 Java 8 引入的强大异步编程工具,极大地简化了异步任务的处理。它克服了传统Future的局限性,提供了丰富的方法用于创建、组合、编排异步任务以及处理异常,使得异步编程更加灵活、高效和易于维护。从核心方法来看,CompletableFuture的创建方法(supplyAsync和runAsync)方便我们启动异步任务;结果处理与转换方法(thenApply、thenAccept、thenRun等)让我们能在任务完成后对结果进行各种操作;
2025-06-04 10:18:09
749
原创 面试官灵魂拷问:如何解决多门店库存同步的超卖难题?
在多门店库存同步中避免超卖是一个复杂而关键的问题,它涉及到分布式系统、并发控制、数据一致性等多个领域。通过锁机制、事务处理、消息队列和库存预留等策略,我们可以有效地解决超卖问题,保证库存数据的准确性和业务的正常进行。同时,通过缓存的使用、批量操作以及监控与预警等优化和拓展手段,能够进一步提升系统的性能和稳定性,提高企业的运营效率。对于我们来说,深入理解这些技术和策略,并将其灵活应用到实际项目中,是解决多门店库存同步超卖问题的关键。
2025-06-03 15:33:25
1123
原创 解锁Java多级缓存:性能飞升的秘密武器
多级缓存作为提升系统性能的关键技术,在现代软件开发中扮演着不可或缺的角色。它通过在不同层次设置缓存,有效减少了数据访问的延迟,显著提升了系统的响应速度和吞吐量,增强了系统的可用性和扩展性,为用户带来了更流畅、高效的体验。在实际项目中,应根据业务需求和系统架构的特点,精心设计和合理配置多级缓存。充分发挥浏览器缓存、Nginx 缓存、Redis 缓存、JVM 进程缓存等各层缓存的优势,构建一个高效、稳定的缓存体系。同时,要关注缓存的更新策略、数据一致性等问题,确保缓存中的数据始终准确、有效。
2025-06-03 11:00:25
1127
原创 秒杀系统设计
秒杀活动是大家都熟悉的购物方式。通常的流程是这样的:商家设定活动开始和结束时间,以及投入的库存量。在活动即将开始之际,买家会不断刷新商品详情页,一旦看到购买按钮变为可点击状态,便立即点击购买、下单并结算,完成商品的购买过程。当商品库存被抢空或者活动结束时,商品变为不可售状态,买家无法继续购买。一些耳熟能详的秒杀活动案例包括小米手机的早期抢购、整点低价苹果手机、以1499元抢购茅台酒,以及疫情期间的口罩销售。
2025-05-25 21:07:51
890
原创 高并发架构设计之限流
再强大的系统,也怕流量短事件内集中爆发,就像银行怕挤兑一样,所以,高并发另一个必不可少的模块就是限流。限流是一种通过控制请求的速率或数量来保护系统免受过载的技术。流控的精髓是限制单位时间内的请求量,最大程度保障系统的可靠性及可用性。
2025-05-21 22:31:03
895
原创 面试题:什么是零拷贝技术?mmap和sendfile如何实现零拷贝,它们是否真正实现了零拷贝?
零拷贝技术并非指完全没有数据拷贝的过程,而是减少用户态和内核态的切换次数以及CPU拷贝的次数。它通常通过直接内存访问(DMA)技术和内存映射(如mmap)等机制来实现。DMA允许硬件设备(如网卡、硬盘控制器等)直接访问内存,而无需CPU的介入。在数据传输过程中,DMA控制器负责将数据从源地址传输到目标地址,从而减少了CPU的拷贝工作。内存映射技术将文件或设备的内容映射到进程的地址空间中,使得进程可以直接访问这些数据,而无需通过传统的读/写系统调用。这种方式减少了数据在用户空间和内核空间之间的拷贝次数。
2025-05-15 10:06:40
872
原创 面试题:BIO,NIO,AIO 的区别是什么?说说select 和 epoll 工作机制与差异?为何epoll 如此高效?
为了解决BIO模型的线程阻塞问题,NIO模型引入了非阻塞的概念。在NIO中,当一个线程进行IO操作时,它不会等待操作完成,而是继续执行其他任务。当IO操作完成时,线程会收到通知。非阻塞式IO一般采用轮询检查的方法进行IO操作,即:通过循环,不断检查IO资源是否已经就绪,就绪就读取,不就绪就执行其他的工作。
2025-05-14 15:36:54
662
原创 高并发下幂等解决方案
在当今互联网应用中,高并发场景无处不在:电商秒杀活动、金融支付系统、社交网络互动... 这些场景下,系统每秒钟需要处理成千上万的请求。但网络的不确定性、客户端的重试机制、用户的重复点击,都可能导致同一个请求被多次提交。如果没有恰当的防护措施,轻则导致数据不一致,重则引发资金损失等严重问题。在分布式系统中幂等已经成为了保障业务可靠性的关键技术。它指的是。接下来我们就来看看高并发下幂等解决方案。
2025-05-13 14:47:50
643
原创 如何实现Redis和Mysql中数据双写一致性
今天我们来聊聊一个在分布式系统中非常常见但又十分棘手的问题——Redis与MySQL之间的双写一致性。我们在项目中多多少少都遇到过类似的困扰,缓存是用Redis,数据库是用MySQL,但如何确保两者之间的数据一致性呢?接下来我会尽量简洁地为大家解析这个问题,并提供几个实战方案。
2025-04-28 10:44:05
1166
原创 高并发架构设计之缓存
高并发是指系统或应用程序在同一时间段内接收到大量并发请求的能力。具体来说,高并发环境下系统需要能够同时处理大量的请求,而不会出现性能问题或响应延迟。浏览器缓存是指将网页中的资源(如HTML、CSS、JavaScript、图像等)存储在用户的浏览器内部,以便在后续请求同一资源时可以直接从本地缓存中获取,而无需再次从服务器下载。客户端缓存是将数据存储在浏览器中,以提高访问速度和减少服务器请求。
2025-04-27 11:27:30
1235
原创 JVM性能优化之老年代参数设置
咱们书接上回,上篇文章主要讲解了年轻代参数设置,如果对这一部分还不清楚的建议先去看一下(),本文主要为大家介绍老年代参数的设置,掌握好jvm参数的设置是一个高级开发人人员必备的技能,也是面试中最爱被问的一部分,接下来我们就来看看如何设置老年代参数。
2025-04-24 16:30:42
1147
原创 JVM性能优化之年轻代参数设置
在Java应用开发中,性能问题往往是最难预测却又最影响用户体验的关键因素。即便代码逻辑完美,若JVM(Java虚拟机)配置不当,也可能导致频繁GC停顿、内存泄漏,甚至引发系统崩溃。JVM性能优化并非简单的参数调整,而是需要深入理解内存管理、垃圾回收机制,并结合监控工具进行系统性调优。无论你是开发、运维还是架构师,掌握JVM调优都能让你在应对高并发、低延迟场景时游刃有余。接下来将在多个方面进行对JVM性能优化进行探究。
2025-04-24 10:31:48
1215
原创 高性能数据库集群:分库分表
前面我们已经介绍了另一种高性能数据库集群,读写分离,其本质是将访问压力分散到集群中的多个节点,但是没有分散存储压力,随着用户数量的增加,数据量激增,数据存储将会是我们系统的瓶颈所在,因此就有了第二种高性能数据库集群,分库分表方案,这种方案既可以分散访问压力,又可以分散存储压力,完美解决了我们现有的系统瓶颈,接下来我们看看,分库分表这种方案。
2025-04-22 17:09:23
815
原创 并发编程之可见性、原子性、有序性问题
想象一下这样的场景:你的程序在单线程环境下完美运行,但在多线程条件下却时而崩溃、时而产生错误结果,甚至出现"只在生产环境发生"的诡异问题。和问题。本文将深入探讨并发编程中的这三大核心问题,揭示它们背后的原理,并提供实用的解决方案。
2025-04-16 16:57:02
799
原创 高性能数据库集群:读写分离
高性能数据库集群有多种,第一种方式是“读写分离”,其本质是将访问压力分散到集群中的多个节点,但是没有分散存储压力;第二种方式是“分库分表”,既可以分散访问压力,又可以分散存储压力。本文主要介绍“读写分离”这种高性能数据库集群。
2025-04-14 11:07:11
936
原创 MySQL语句优化
实际开发过程中有时候往往我们会发现自己的数据库里有很多表,每个表的数据量也不小,然后写出来的SQL也比较复杂,各种关联和嵌套子查询,搞的人看的都眼晕,然后表面上看起来这个SQL部分用上了索引,结果性能还是很差。像基础的以及日常的SQL优化就是设计好索引,让一般不太复杂的普通查询都用上索引,但是针对复杂表结构和大数据量的上百行复杂SQL的优化,这样就必须得建立在我们先懂这个复杂SQL是怎么执行的。
2025-03-26 17:11:24
795
原创 记一次线上SQL死锁事故
SQL死锁是一个常见且复杂的并发控制问题。当多个事务在数据库中互相等待对方释放锁时,就会形成死锁,从而导致事务无法继续执行,影响系统的性能和可用性。死锁不仅会导致数据库操作的阻塞,增加延迟,还可能对系统的稳定性和响应速度产生严重影响。因此,了解死锁的成因、识别死锁的方式以及采取有效的防范和解决措施,对于数据库管理员和开发人员而言,具有重要的实践意义。本文将根据一次线上SQL死锁的真实案例刨析发生的机制、如何检测死锁及常见的解决策略,以帮助提高数据库系统的效率和可靠性。
2025-03-21 17:15:55
805
原创 MySQL抖动浅析
Checkpoint(检查点)是InnoDB用于标记Redo Log中哪些修改已经被写入磁盘的机制。它通过定期将脏页(Dirty Page)刷新到磁盘,减少崩溃恢复时需要重放Redo Log的量。
2025-03-19 15:01:44
1110
原创 MySQL缓冲池Buffer Pool
MySQL Buffer Pool 是 InnoDB 存储引擎中用于缓存数据和索引的内存区域。其作用是减少磁盘 I/O 操作,提高查询性能。
2025-03-17 10:05:17
894
原创 线上CPU100%问题总结及解决方案
我们在生产实践中或多或少遇见过CPU100%的问题,如果没有处理过这些问题,第一次遇见多少有点手忙脚乱不知道该怎么处理,而且这个问题也是面试过程中老生常谈的问题,掌握和解决这类问题对我们提升有很大的帮助,接下来我们就来聊一下有哪些问题会导致CPU100%,以及该如何处理解决这类问题。
2025-03-04 09:00:07
1395
原创 RocketMQ消息积压问题及解决方案
在分布式系统中,消息中间件扮演着至关重要的角色,它如同系统的中枢神经,负责在各个服务之间高效、可靠地传递信息。然而,随着系统规模扩大和业务量激增,消息积压问题逐渐成为许多系统的梦魇。消息积压如同隐形杀手,严重影响着系统的健康,轻则导致系统响应迟缓,重则引发服务雪崩,最终造成业务损失。
2025-02-27 14:01:27
1652
原创 消息队列幂等实践
我们在使用消息中间件的时候在某些场景下肯定听说过:“一定要保证消息消费的幂等”,到底为什么要保证消息的幂等?具体幂等是怎样实现的?带着这两个问题我们来看看。
2025-01-29 12:55:44
1062
原创 RocketMQ事务消息
在文末我们提到了使用RocketMQ提供的一种新思路:异步队列方案,去解决我们的分布式事务问题,接下来我们直入主题看看它是如何解决的。
2025-01-26 21:23:19
776
原创 分布式事务
在单个服务使用单个数据源的场景下,我们要解决事务问题就要依赖于数据源本身提供的事务能力来工作的,在程序代码层面,最多只能对事务接口做一层标准化的包装(如 JDBC 接口),并不能深入参与到事务的运作过程当中,事务的开启、终止、提交、回滚、嵌套、设置隔离级别,乃至与应用代码贴近的事务传播方式,全部都要依赖底层数据源的支持才能工作,这一点与后续介绍的 XA、TCC、SAGA 等主要靠应用程序代码来实现的事务有着十分明显的区别。SAGA事务是一种解决分布式系统中长时间运行的业务流程中的数据一致性问题的方案。
2025-01-24 14:57:34
1196
原创 RocketMQ消息拉取
咱们书接上文,前面我们了解了消息发到到Broker后是如何存储在CommitLog里面的,那么接下来看看消费端是如何让拉取消费消息的,Broker端又是如何管理的,让我们带着这个两个问题来看看RocketMQ是如何解决这两个问题的。如果说最新的消息是小于等于拉取请求里要拉取的起始offset,查询消息存储组件里的topic@queue最大的offset,查询出来了以后设置为topic@queue里的最大offset。topic@queue里最新到达的消息最大的offset,新消息的offset。
2025-01-15 10:54:12
914
原创 RocketMQ消息存储源码刨析
实现的文件映射机制。此时,我们同步刷盘的主流程到此就结束,接下来我们的GroupCommitService的run方法会将我们的刷盘请求去做一个真正的执行,完成commit操作,接下来看一下他的run方法是具体如何实现的。为此,RocketMQ 提供了灵活的刷盘策略,用户可以选择不同的刷盘方式(同步或异步)来平衡性能和数据的可靠性。通过上面这段逻辑可知,异步刷盘就在异步线程中,周期性的将内存缓冲区的内容刷到文件中,在消息主流程中,只会唤醒异步刷盘线程,而不会同步等待刷盘结果,所以称为异步刷盘。
2025-01-10 10:27:27
1039
原创 RocketMQ消息存储概念篇
消息存储作为RocketMQ最重要的一个模块,理解和掌握好它的消息存储机制,对学习RocketMQ来说是至关重要的,接下来对于其中的核心理论知识先有一个了解。在了解下面的内容之前我们先来看一下消息存储整体的架构图:RocketMQ对于文件的存储管理最重要的文件有三个:IndexFile:IndexFile(索引文件)提供了一种可以通过key或时间区间来查询消息的方法。Index文件的存储位置是:$HOME \store\index\${fileName},文件名fileName是以创建时的时间戳命名的,固定
2024-12-28 00:51:54
1188
原创 RocketMQ网络通信源码
RocketMQ为了保证消息在发送过程中满足高吞吐、高可靠、低延迟,它的底层是基于Netty实现的,本小节主要简单介绍一下Netty的基础概念以及RocketMQ底层的网络通信是怎么实现的。
2024-12-24 09:01:36
1033
原创 RocketMQ网络通信基础概念
对于消息队列来说,网络模块是其重要的组成之一,网络模块的性能很大程度上决定了消息的传输性能和整体性能。我们都知道在Broker启动向NameServer发起注册的时候,还有我们生产者向Broker发送消息的时候他们之间的通信是怎么实现的呢?数据要在网络中传输首先要考虑的就是使用哪种通信协议,像我们耳熟能详的Http协议,TCP/UDP协议等等,假设让我们来选择消息中间件的通信协议,我们应该选取那种协议作为消息中间件的通信协议呢?
2024-12-17 17:30:17
980
原创 RocketMQ源码刨析——NameServer篇
前面的两篇文章和大家一起学习了RocketMQ基础概念以及常用的RocketMQ消息类型,如果对其基本概念和简单的使用还不熟悉的小伙伴可以先去学习一下,从本小节开始将对RocketMQ源码做一个简单的了解。我们将从它的各个组件入手,由点到线再到面。本篇文章主要是从源码的角度给大家介绍了RocketMQ的NameServer,包括NameServer的启动流程、路由注册、路由剔除。
2024-12-16 13:39:23
1440
原创 RocketMQ消息类型
咱们书接上文,上文主要讲解了RocketMQ的基本概念,对RocketMQ基本概念还不熟悉的小伙伴可以的学习一下(RocketMQ基础概念),本文主要探讨RocketMQ消息发送几种类型,将分别对普通消息发送、顺序消息发送、延迟消息发送、批量消息发送、事务消息发送以及各自适用的应用场景对大家一一介绍。
2024-12-10 19:18:24
1068
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人