一、为什么使用消息队列
1.使用同步的通信方式来解决多个服务之间的通信
同步的通信方式会存在性能和稳定性的问题。
2.使用异步的通信方式
针对于同步的通信方式来说,异步的方式,可以让上游快速成功,极大提高了系统的吞吐量。而且在分布式系统中,通过下游多个服务的
分布式事务的保障,也能保障业务执行之后的最终一致性。
二、消息队列的流派
目前消息队列的中间件选型有很多种:
- rabbitMQ:内部的可玩性(功能性)是非常强的
- rocketMQ:阿里内部一个大神,根据kafka的内部执行原理,手写的一个消息队列中间件。性能是与Kafka相比肩,除此之外,在功D
能上封装了更多的功能。 - kafka:全球消息处理性能最快的一款MQ
- zeroMQ
这些消息队列中间件有什么区别?
1.有broker
-
重topic:Kafka、RocketMQ、ActiveMQ
整个broker,依据topic来进行消息的中转。在重topic的消息队列里必然需要topic的存在 -
轻topic:RabbitMQ
topic只是一种中转模式。
2.无broker
在生产者和消费者之间没有使用broker,例如zeroMQ,直接使用socket进行通信。
三、Kafka的基本知识
1.Kafka的安装
- 部署一台zookeeper服务器
- 安装jdk
- 下载kafka的安装包:http://kafka.apache.org/downloads
- 上传到kafka服务器上:/usr/local/kafka
- 解压缩压缩包
- 进入到config目录内,修改server.properties
#broker.id属性在kafka集群中必须要是唯一
broker.id=0
#kafka部署的机器ip和提供服务的端口号
listeners=PLAINTEXT://192.168.65.60:9092
#kafka的消息存储文件
log.dir=/usr/local/data/kafka-logs
#kafka连接zookeeper的地址
zookeeper.connect=192.168.65.60:2181
进入到bin目录内,执行以下命令来启动kafka服务器(带着配置文件)
./kafka-server-start.sh -daemon ../config/server.properties
校验kafka是否启动成功:
进入到zk内查看是否有kafka的节点:/brokers/ids/0
名称 | 解释 |
---|---|
Broker | 消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群 |
Topic | Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic |
Producer | 消息生产者,向Broker发送消息的客户端 |
Consumer | 消息消费者,从Broker读取消息的客户端 |
ConsumerGroup | 每个Consumer属于一个特定的ConsumerGroup,一条消息?可以被多个不同的Consumer Group消费,但是一个Consumer Group中只能有一个Consumer能够消费该消息 |
Partition | 物理上的概念,一个topic可以分为多个partition,每个partition内部消息是有序的 |