RocketMQ笔记 02-基本原理
RocketMQ基本原理
问题:
RocketMQ是如何集群化部署来承载高并发访问?
将系统的流量分散在RocketMQ部署的多台机器上
如果RocketMQ要存储海量消息,如何实现分布式存储架构?
将数据打散存到每个Broker上,万一Broker宕机怎么办,采用Broker主从架构及多副本策略
RocketMQ基本架构原理图:
RockerMQ中的生成者和消费者自己主动去NameServer上拉取Broker信息,Broker与NameServer之间通过心跳机制保持联系,Broker每30秒向NameServer发送一次心跳,NameServer每10秒运行一个任务去检查各个Broker的最近一次心跳时间,如果某个Broker120秒都未发送过心跳,则认为该Broker已经挂掉了。
问题:发送消息的时候面对N多台机器,到底应该向哪一台上面的Broker发送过去?消费者如何知道去哪个Broker上消费?
我们可以在创建Topic的时候指定让他里面的数据分散存储在多台Broker机器上,比如一个Topic里有1000万条数据,此时有2台Broker,那么就可以让每 ...
JVM笔记-01类加载机制
JVM类加载机制
一个类从加载到使用一般会经历的过程
加载 —— 验证—— 准备 —— 解析 —— 初始化 —— 使用 —— 卸载
验证:验证.class文件是否合乎jvm规范
准备:为加载类分配一定的内存空间,包括类变量分配内存空间并且赋默认初始值
解析:将符号引用替换为直接引用
初始化:准备阶段只会赋初始值,如果是有执行代码会在初始化时执行并赋值,执行静态代码块中的方法
JVM在什么情况下会去加载一个类
当代码中需要使用这个类时
什么时候会初始化一个类
一般来说会在new实例化对象时和包含main()方法的主类时,并且会加载和初始化这个类继承的父类
类加载器的双亲委派机制
启动类加载器
Bootstrap ClassLoader主要负责加载java目录中的核心类,一旦jvm启动就首先会依托启动类加载器去加载lib目录下的核心类库
扩展类加载器
Extension ClassLoader会在jvm启动时去加载lib\ext目录中类
应用程序类加载器
Application ClassLoader负责加载ClassPath环境变量所指定的路径中的类,大致理解为加载 ...
RocketMQ笔记 01-RocketMQ、Kafka、RabbitMQ 技术选型
RocketMQ、Kafka、RabbitMQ 技术选型
1、MQ选型需要考虑的问题
业界MQ有哪几种?
每一种MQ的表现如何?
这些MQ在同等机器的条件下,能抗多少QPS?
每种MQ的性能有多高?(发送一条消息给它是需要2ms还是20ms)
MQ的可用性是否能得到保障?
会不会存在丢失数据?
能否实现在线扩容?
消息中间件经常需要使用的一些功能他们都有吗(比如说延迟消息、事务消息、消息堆积、消息回溯、死信队列,等等)?
2、MQ的优势与劣势
Kafka、RabbitMQ、RocketMQ社区活跃度:目前社区都较为活跃,尤其是Kafka和RabbitMQ,目前Kafka几乎是国内大数据领域日志采集传输的标准,RabbitMQ在各种中小公司里运用极为广泛,RocketMQ也是开始在一些大公司和其他公司里快速推行中
Kafka
优势:在常规的配置下,一台机器可以达到每秒十几万的QPS,发送消息给kafka都是毫秒级的,kafka支持集群部署,可用性很高
劣势:kafka接受到消息会写到磁盘缓冲区,并没有直接落地在磁盘上,要是机器本身宕机了,会导致磁盘缓冲区的数据丢失;kafka ...