- 博客(51)
- 收藏
- 关注
原创 kafka之集群工作机制理解
回想一下,我们搭建kafka集群是如何搭建?修改kafka得配置文件,多个Kafka服务注册到同一个zookeeper集群上的节点,会自动组成集群。学习服务端原理,通常我们是去读服务端的那些抽象的代码,但是Kafka为了保证高吞吐,高性能,高可扩展的三高架构,很多具体设计都是相当复杂的。如果直接跳进去学习研究,估计我们很快就会晕头转向。那么有没有一些可见的东西让我们更具体的理解Kafka的Broker运行机制呢?所有Kafka服务都以相同的逻辑运行。
2024-01-18 00:06:47
1065
原创 kafka之java客户端实战
Producer可选的属性都可以由ProducerConfig类管理。比如ProducerConfig.BOOTSTRAP_SERVERS_CONFIG属性,显然就是指发送者要将消息发到哪个Kafka集群上。这是每个Producer必选的属性。在ProducerConfig中,对于大部分比较重要的属性,都配置了对应的DOC属性进行描述。Kafka的消息是一个Key-Value结构的消息。其中,key和value都可以是任意对象类型。
2024-01-13 22:34:49
1610
原创 Kafka之集群搭建
单机服务下,Kafka已经具备了非常高的性能。TPS能够达到百万级别。但是,在实际工作中使用时,单机搭建的Kafka会有很大的局限性。因此,我们需要使用集群。
2024-01-10 22:10:31
1776
2
原创 初识Kafka
kafka主要用于解决大规模数据的实时流式处理和数据管道问题。高吞吐量实时地分发。Kafka消息系统由多个broker(服务器)组成,这些broker可以在多个数据中心之间分布式部署,以提供高可用性和容错性。。可以将数据发布到指定的主题,而可以订阅这些主题并消费其中的数据。同时,Kafka还,可以在管道中通过Kafka Streams API进行流式计算,例如过滤、转换、聚合等。Kafka使用高效的数据存储和管理技术,TB级别。其。
2024-01-08 22:49:59
786
1
原创 zookeeper经典应用场景之分布式锁
在单体的应用开发场景中涉及并发同步的时候,大家往往采用Synchronized(同步)或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题,这种跨机器的锁就是分布式锁。
2024-01-06 23:08:12
801
原创 zookeeper应用场景之分布式的ID生成器
在分布式系统中,传统的数据库自增主键已经不能满足需求。在分布式系统环境中,需要一种全新的唯一ID系统,这种系统不能出现重复ID。ID生成系统是基础系统,被许多关键系统调用,一旦宕机,就会造成严重影响。
2024-01-05 23:06:16
738
原创 zookeeper之集群搭建
zookeeper集群下,有3种角色,分别是Observer。接下来我们分别看一下这三种角色的作用。领导者(Leader):对于create、setData、delete等有写操作的请求,则要统一转发给leader处理,leader需要决定编号、执行操作,这个过程称为事务。跟随着(Follower)处理客户端非事务()请求(可以直接响应)。转发事务请求给Leader。参与集群Leader选举投票。观察者(Observer对于非事务请求可以独立处理(对于事务性请求会转发给leader处理。
2023-12-30 22:19:37
1906
2
原创 Zookeeper特性与节点数据类型详解
ZooKeeper 是一个开源的,是Apache Hadoop 的一个子项目,。Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。ZooKeepe。提供基于类似于文件系统的目录树方式的数据存储,并且可以对树中的节点进行有效管理,从而用来维护和监控存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到。
2023-12-26 23:32:54
1653
原创 RocketMQ常见问题分析
而RocketMQ的事务消息机制,实际上只保证了整个事务消息的一半,他保证的是订单系统下单和发消息这两个事件的事务一致性,而对下游服务的事务并没有保证。目前来看,也是业内最好的降级方案。我们需要注意下,在事务消息的处理机制中,未知状态的事务状态回查是由RocketMQ的Broker主动发起的。往MQ发一个延迟1分钟的消息,消费到这个消息后去检查订单的支付状态,如果订单已经支付,就往下游发送下单的通知。最简单的方式是启动一个定时任务,每隔一段时间扫描订单表,比对未支付的订单的下单时间,将超过时间的订单回收。
2023-12-24 22:14:58
1052
原创 SpringBoot整合RocketMQ
1. 创建一个springboot项目,pom文件中引入RocketMQ关键依赖注意:使用SpringBoot集成时,要非常注意版本2. springboot的启动类 3. 在application.properties中写rocketMQ的配置4. 声明生产者,直接使用RocketMQTemplate进行消息发送。 5. 声明一个消费者6. 写一个测试方法,测试发送一条消息7. 测试消费消息启动项目,一直监听消息队列。一旦有消息发送则会消费消息。2.2 往多个topi
2023-12-22 23:14:05
390
原创 Spring之AOP理解与应用
面向切面编程:基于OOP基础之上新的编程思想,OOP面向的主要对象是类,而AOP面向的主要对象是切面,在处理日志、安全管理、事务管理等方面有非常重要的作用。AOP是Spring中重要的核心点,AOP提供了非常强大的功能,用来对IOC做补充。通俗点说的话就是在程序运行期间,
2023-11-28 02:13:39
390
原创 Spring之AOP底层源码解读(更新中)
如果你已经对spring的Aop已经有了基础的认识,那么你一定知道它的底层是用动态代理实现的。作为一个java程序员,我们都知道,实现动态代理的方式有两种,一种是jdk自生提供了一种创建代理对象的动态代理机制,其特点是代理类必须实现了接口;另一种是cglib技术。那么Spring中到底用了哪一种呢?其实spring中这两种代理技术都用到了,它把这两种动态代理的方式进行了封装,封装成的类叫做ProxyFactory,表示是创建代理对象的一个工厂。接下来,我们对AOP的源码进行一个解读。
2023-11-27 23:34:21
224
原创 Spring之bean生命周期详解
Bean的生命周期就是指:在Spring中,一个Bean是如何生成的,如何销毁的 。1. bean的生成 过程2. bean的销毁过程
2023-11-08 22:20:35
67
原创 一文了解Spring底层整体脉络
在Java语言中,肯定是根据某个类来创建一个对象的。但是getBean方法内部怎么知道"userService"对应的是UserService类呢?所以,我们就可以分析出来,在调用AnnotationConfigApplicationContext的构造方法 时,也就是第一行代码,会去做一些事情:1. 解析AppConfig.class,得到扫描路径。
2023-11-03 23:03:03
117
原创 Redis主从架构与哨兵架构详解
如果一个redis节点提供服务,那么这台redis挂了怎么办?那就会导致所有的请求全都被打到数据库,降低系统的性能。所以,我们需要部署多个redis节点来保证高可用性。redis最常见的保证高可用的方案有三种:主从(master-slave)架构模式、哨兵架构模式和集群架构。本篇文章主要介绍主从架构和哨兵架构。
2023-10-24 22:54:17
234
原创 Redis的高性能与持久化详解
1. 高性能原理2. 持久化2.1 RDB快照(snapshot)2.1.1 bgsave的写时复制(COW)机制2.2 AOF(append-only file)2.2.1 AOF重写2.3 RDB与AOF的比较2.4 Redis 4.0 混合持久化
2023-10-23 23:43:13
63
原创 Redis核心数据结构及应用场景
1. String(字符串)1.1 基本命令1.2 应用场景2. Hash(哈希)2.1 基本命令2.2 应用场景3. list(列表)3.1 基本命令3.2 应用场景4. set(集合)4.1 基本命令4.2 应用场景5. zset(有序集合)5.1 基本命令5.2 应用场景
2023-10-20 22:58:52
78
原创 Fork/Join框架介绍
ForkJoinPool类包括一些重要的方法,例如submit()、invoke()、shutdown()、awaitTermination()等,用于提交任务、执行任务、关闭线程池和等待任务的执行结果。Fork/Join是一个是一个并行计算的框架,主要就是用来支持分治任务模型的,这个计算框架里的 Fork对应的是分治任务模型里的任务分解,Join 对应的是结果合并。这些任务通常可以将大的任务分解成若干个子任务,每个子任务可以独立执行,并且可以通过归并操作将子任务的结果合并成一个有序的结果。
2023-10-16 23:08:09
255
原创 JAVA并发可见性、有序性、原子性与JMM内存模型详解
本地内存是JMM的一 个抽象概念,并不真实存在,它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。根据JMM的规定,
2023-10-13 23:42:56
134
原创 深入理解线程池ThreadPoolExecutor
1. 为什么需要线程池2.线程池的核心线程数、最大线程数该如何设置3. 线程池的具体实现3.1 线程池执行任务的具体流程3. 2 线程池的五种状态的流转3.3 线程池中的线程的关闭3.4 线程池为什么一定得是阻塞队列3.5 线程发生异常,会被移出线程池吗?4. Tomcat是如何自定义线程池的?
2023-10-11 23:05:59
155
原创 深入理解AQS和ReentrantLock
AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器。java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队 列、独占获取、共享获取等,而这些行为的抽象就是基于AbstractQueuedSynchronizer(简称 AQS)实现的。JDK中提供的大多数的同步器如Lock, Latch, Barrier等,都是基于AQS框架来实现的。一般是通过一个内部类Sync继承 AQS将同步器所有调用都映射到Sync对应的方法。
2023-10-08 22:43:31
72
原创 常用并发工具类的使用及应用场景详解
ReentrantLock 是java.util.concurrent.locks下的一个类,加锁操作一定要放在 try 代码之前,这样可以避免未加锁成功又释放锁的异常;相对于 synchronized,ReentrantLock具备如下。加锁次数和释放锁次数一定要保持一致,否则会导致线程阻塞或程序异常;默认情况下 ReentrantLock 为非公平锁而非公平锁;当前线程在超时时间内获取了锁。当前线程在超时时间内被中断。释放锁一定要放在 finally 中,否则会导致线程阻塞。
2023-10-07 17:43:18
343
1
原创 并发安全问题探究
我们所写的代码在并发情况下使用 时,总是能表现出正确的行为;反之,未实现线程安全的代码,表现的行为是不 可预知的,有可能正确,而绝大多数的情况下是错误的。1.2 如何是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信 而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。可以总结为:1、死锁是必然发生在多操作者(M>=2 个)争夺多个资源(N>=2 个,且 N
2023-10-06 20:45:58
77
1
原创 CAS&Atomic 原子操作详解
1 原子操作1.1 什么是原子操作1.2 如何实现原子操作2 CAS2.1 什么是CAS2.2CAS实现原子操作的三大问题2.2.1 ABA问题2.2.2 循环时间开销大2.2.3CAS&Atomic 原子操作详解只能保证一个共享变量的原子操作。3.Jdk 中相关原子操作的类及使用
2023-10-05 22:51:56
149
原创 深入理解java并发、线程与等待通知机制
同一台计算机的进程通信称为 IPC(Inter-process communication),不同计算机之间的进程通信被称为R(mote)PC,需要通过网络,并遵守共同的协议,比如大家熟悉的Dubbo就是一个RPC框架,而Http协议也经常用在RPC上,比如SpringCloud微服务。程序计数器是一种专门的寄存器,它指示CPU在其指令序列中的位置,并保存着正在执行的指令的地址或下一条要执行的指令的地址,这取决于具体的系统。从数据来说,以程序员的角度来看, 是方法调用过程中的各种局部的变量与资源;
2023-09-29 23:37:26
891
原创 java常量池详解
s0还是常量池 中"zhangsan”的引用,s1因为无法在编译期确定,所以是运行时创建的新对象”zhangsan”的引用,s2因为有后半部分 new String(”san”)所以也无法在编译期确定,所以也是一个新创建对象”zhangsan”的引用;所以此时的"a" + bb和"a" + "b"效果是一样的。分析:JVM对于字符串引用,由于在字符串的"+"连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的,即"a" + bb无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给b。
2023-09-27 22:13:39
2337
2
原创 JVM调优工具详解及实战应用
Jmap命令可以用来查看内存信息,实例个数以及占用内存大小。3. JVM调优指令调优应用思路。1. JVM调优指令。2. 调优可视化工具。
2023-09-25 23:18:19
640
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人