RocketMQ入门到精通
分布式消息队列RocketMQ
1. RocketMQ概述1.1 MQ概述1. MQ简介MQ,Message Queue,是一种提供消息队列服务的中间件,也称为消息中间件,是一套提供了消息生产、存储、消费全过程API的软件系统。消息即数据。一般消息的体量不会很大。
2. MQ用途从网上可以查看到很多的关于MQ用途的叙述,但总结起来其实就以下三点。
限流削峰
MQ可以将系统的超量请求暂存其中,以便系统后期可以慢慢进行处理,从而避免了请求的丢失或系统被压垮。
异步解耦
上游系统对下游系统的调用若为同步调用,则会大大降低系统的吞吐量与并发度,且系统耦合度太高。而异步调用则会解决这些问题。所以两层之间若要实现由同步到异步的转化,一般性做法就是,在这两层间添加一个MQ层。
数据收集
分布式系统会产生海量级数据流,如:业务日志、监控数据、用户行为等。针对这些数据流进行实时或批量采集汇总,然后对这些数据流进行大数据分析,这是当前互联网平台的必备技术。通过MQ完成此类数据收集是最好的选择。
3. 常见MQ产品
ActiveMQ
ActiveMQ是使用Java语言开发一款MQ产品。早期很多公 ...
高性能消息中间件Kafka实战
1. RabbitMq概述1.1 MQ简介异步处理消息发送的时间取决于业务执行的最长的时间
应用解耦原本是需要订单系统直接调用库存系统
只需要将请求发送给消息队列,其他的就不需要去处理了,节省了处理业务逻辑的时间
流量消峰某一时刻如果请求特别的大,那就先把它放入消息队列,从而达到流量消峰的作用
1.2 RabbitMq简介
大多应用中,可通过消息服务中间件来提升系统异步通信,扩展解耦能力
消息服务中两个重要概念:
消息代理(message broker)** 和 目的地(destination)
当消息发送者发送消息后,将由消息代理接管,消息代理保证消息传递到指定目的地
消息队列主要有两种形式的目的地
队列(Queue)**:点对点消息通信(point - to - point)
主题(topic)**:发布(publish)/订阅(subscribe)消息通信
点对点式:
消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列
消息只有唯一的发送者和接受者,单并不是说只能有一个接收者
发布订阅 ...
高性能消息中间件Kafka实战
1. RabbitMQ 高级特性(基于Spring)1.1 消息的可靠投递在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。
confirm 确认模式
return 退回模式
Rabbitmq 整个消息投递的路径为:producer—>rabbitmq broker—>exchange—>queue—>consumer
消息从 producer 到 exchange 则会返回一个 confirmCallback 。
消息从 exchange–>queue 投递失败则会返回一个 returnCallback 。
我们将利用这两个 callback 控制消息的可靠性投递
1.1.1. 前置准备
创建spring-rabbitmq-producer\src\main\resources\properties\rabbitmq.properties连接参数等配置文件;
12345rabbitmq.host=192.168.12.135rabbitmq ...
高性能消息中间件Kafka实战
Windows安装RabbitMq
由于其基于Erlang语言编写,所以先安装Erlang,下载地址
双击安装,安装路径不要与中文与空格
配置环境变量
path中添加
cmd中测试
安装RabbitMQ,下载地址
下载后双击安装
RabbitMQ Server安装完成之后,会自动注册为服务,并以默认配置进行启动
可能的问题:启动失败,通常是由于用户名为中文,导致默认的db和log目录访问出现问题。解决方法,写在RabbitMQ,配置环境变量RABBITMQ_BASE为一个不含中文的路径,如E:\rabbitmq,然后重新安装
Rabbit管理
进入rabbitMQ安装目录下的sbin目录,执行如下命令开启WEB管理插件,rabbitmq-plugins.bat enable rabbitmq_management
1234567891011121314C:\software\RabbitMQ\rabbitmq_server-3.7.18\sbin>rabbitmq-plugins.bat enable rabbitmq_managementEnabling ...
高性能消息中间件Kafka实战
05-Redis缓存设计与性能优化5.1 多级缓存架构
5.2 缓存设计5.2.1 缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。
缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。
造成缓存穿透的基本原因有两个:
第一, 自身业务代码或者数据出现问题。
第二, 一些恶意攻击、 爬虫等造成大量空命中。
缓存穿透问题解决方案:
1、缓存空对象
123456789101112131415161718String get(String key) { // 从缓存中获取数据 String cacheValue = cache.get(key); // 缓存为空 if (StringUtils.isBlank(cacheValue)) { // 从存储中获取 String storageValue = storage.get(key); cache.set(key, storageVa ...
Redis分布式锁
1. Redis实现分布式锁分布式锁演进-阶段一
多个客户端同时获取锁(setnx)
获取成功,执行业务逻辑,执行完成释放锁(del)
其他客户端等待重试
代码:
123456789101112131415161718192021222324252627public void testLock() { // 1. 从redis中获取锁,setnx Boolean lock = this.redisTemplate.opsForValue().setIfAbsent("lock", "111"); if (lock) { // 查询redis中的num值 String value = this.redisTemplate.opsForValue().get("num"); // 没有该值return if (StringUtils.isBlank(value)){ return ; ...
高性能消息中间件Kafka实战
Kafka设计原理详解
Kafka核心总控制器Controller在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。
当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。
当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。
当使用kafka-topics.sh脚本为某个topic增加分区数量时,同样还是由控制器负责让新分区被其他节点感知到。
Controller选举机制在kafka集群启动的时候,会自动选举一台broker作为controller来管理整个集群,选举的过程是集群中每个broker都会尝试在zookeeper上创建一个 /controller 临时节点,zookeeper会保证有且仅有一个broker能创建成功,这个broker就会成为集群的总控器controller。
当这个controller角色的broker宕机了,此时zookeeper临时节点会消失,集群里其他 ...
高性能消息中间件Kafka实战
01-高性能消息中间件Kafka实战
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
1. Kafka的使用场景
日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
消息系统:解耦和生产者和消费者、缓存消息等。
用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中 ...
Kafka入门到精通
1. Kafka介绍 Kafka是最初由Linkedin公司开发,是⼀个分布式、⽀持分区的(partition)、多副本的 (replica),基于zookeeper协调的分布式消息系统,它的最⼤的特性就是可以实时的处理 ⼤量数据以满⾜各种需求场景:⽐如基于hadoop的批处理系统、低延迟的实时系统、 Storm/Spark流式处理引擎,web/nginx⽇志、访问⽇志,消息服务等等,⽤scala语⾔编 写,Linkedin于2010年贡献给了Apache基⾦会并成为顶级开源项⽬。
1.1 Kafka的使用场景
⽇志收集:⼀个公司可以⽤Kafka收集各种服务的log,通过kafka以统⼀接⼝服务的⽅式 开放给各种consumer,例如hadoop、Hbase、Solr等。
消息系统:解耦和⽣产者和消费者、缓存消息等。
⽤户活动跟踪:Kafka经常被⽤来记录web⽤户或者app⽤户的各种活动,如浏览⽹⻚、 搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过 订阅这些topic来做实时的监控分析,或者装载到had ...
3_ActiveMQ高级篇-集群与大厂面试题
ActiveMQ高级篇-集群与大厂面试题1. ActiveMQ的多节点集群面试题:引入消息中间件后如何保证其高可用
是什么:基于zookeeper和LevelDB搭建ActiveMQ集群。集群仅提供主备方式的高可用集群功能,避免单点故障。
1.1 zookeeper+replicated-leveldb-store的主从集群三种集群方式对比
基于shareFileSystem共享文件系统(KahaDB)
基于JDBC
基于可复制的LevelDB
12LevelDB,5.6版本之后推出了LecelDB的持久化引擎,它使用了自定义的索引代替常用的BTree索引,其持久化性能高于KahaDB,虽然默认的持久化方式还是KahaDB,但是LevelDB可能会是趋势。在5.9版本还提供了基于LevelDB和Zookeeper的数据复制方式,作为Master-Slave方式的首选数据复制方案。
1.2 本次案例采用ZK+Replicated LevelDB Store1. ShareFileSystem
2. 是什么123456从ActiveMQ5.9开始,ActiveMQ的集群实现方式 ...










