简介:
消息队列用于存放消息的组件
程序员可以将消息放入到队列中,也可以从消息队列中获取消息
很多时候消息队列不是一个永久性的存储,是作为临时存储存在的(设定一个期限:设置消息中MQ中保存10天)
消息队列中间件:消息队列的组件,例如:Kafka,ActiveMQ,RabbitMQ,rocketMQ,ZeroMQ
应用场景:
应用解耦、数据管道、消息系统、流处理、日志收集与分发
好处:
异步处理
可以将一些比较耗时的操作放在其他系统中,通过消息队列将需要处理的消息进行存储,其他系统可以消费消息队列中的数据
系统解偶
原先一个微服务生死勇敢接口http调用另一个微服务,这时候耦合很严重,只要接口发生变化就会导致系统不可用
使用消息队列呀将系统进行解偶,现在第一个微服务可以将消息放入到消息队列中,另一个微服务可以从消息队列中把消息取出来进行处理,进行系统解偶
流量削峰
因为消息队列是低延迟,高可靠,高吞吐的(Kafka吞吐量10W),可以应对大量并发
日志处理
可以使用消息队列作为临时存储,或者一种通信管道
mysql吞吐量8000,kafka响应快低延迟,mysql延迟比kafka高,先放到kafka中让用户等待
消息队列的两种模型
生产者和消费者模型
生产者负责将消息生产到MQ中
消费者负责从MQ中获取消息
生产者和消费者是解偶的,可能是生产者一个程序、消费者是另外一个程序
消息队列的两种模式:
点对点模式 :一个消费者消费一个消息
特点:
每个消息只有一个接收者(即一旦被消费,消息就不再消息队列中)
发送者和接收者间没有依赖性,发送者发送消息之后,不关有没有接收者在运行,都不影响到发送者下次发送消息
接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息
发布订阅模式: 多个消费者可以消费一个消息
特点:
每个消息可以多个订阅者
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,
Kafaka是一个分布式的流平台
特点:发布和订阅流数据流,类似于消息队列或者是企业消息传递系统
以容错的持久化方式存储数据流
处理数据流
Kafka集群搭建
Kafka3.0之前依赖Zookeeper的
注意:每一个kafka的节点都需要修改broker.id(每个节点的标识,不能重复)
log.dir数据存储目录需要配置
Kafka的生产者/消费者/工具
安装kafka集群,可以测试以下
创建一个topic主题(消息都是存放在topic中,类似mysql建表的过程)
基于kafka的内置测试生产者脚本来读取标准输入(键盘输入)的数据,并放入到topic中
基于kafka的内置测试消费者脚本来消费topic中的数据
推荐大家开发的使用 kafka tool
浏览kafka集群节点,多个topic,多个分区
创建topic/删除topic
浏览zookeeper中的数据
kafka介绍
Producer:发布消息的对象称之为主题生产者(kafka topic producer)
Partition:分区,每个主题可以创建多个分区,每个分区都由一系列有序和不可变的消息组成
Topic:kafka将消息分门别类,每一类的消息称之为一个主题(Topic)
Consumer:订阅消息并处理发布的消息的对象称之为主题消费者(consumers)
Broker:已发布的消息保存中一组服务器中,称之为kafka集群。集群中的每一个服务器都是一个代理(broker)。消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息
Record:消息,消息队列基础通信单位
Replica:副本,每个分区都由一个至多个副本存在,它的主要作用是存储保存数据,以日志对象的形式体现。副本又分为leader副本和follower副本
Offset:偏移量,每一个消息在日志文件中的位置都对应