7.1 分布式消息服务中间件简介
- 队列模型
一组消费者和一组发布者通过一个队列联系起来,队列中的消息有序,中间件保证有且只有一个消费者收到消息。 - 发布者-订阅者模型
一组消费者和一组发布者通过一个主题(topic)联系起来。
7.2 分布式消息服务中间件的实现原理
Kafka是领英(LinkedIn)开源的一款非常优秀的、支持大批量消息的分布式消息服务中间件
7.2.1 消息模型
- Kafka中的每个消费者都属于某个消费者组
- 消费者和发布者通过主题联系起来
- 如果有多个消费者组订阅了同一个主题,则同一个消息会发送给所有的消费者组
- 而属于同一个消费者组中的多个消费者中,只有一个消费者能收到消息
7.2.2 架构
在Kafka中传送的消息就是一个键值对
- Kafka将一个主题中的消息存储在一个或多个分区中,以实现负载均衡
- 每一个分区都至少有两个副本。存储同一分区的多个节点中有一个是领导者,其他的都为追随者。所有的读写操作都由领导者处理。如果领导者宕机了,就从所有追随者中自动选出一个新的领导者
- 一个分区中的消息是有序的,但同一主题中不同分区中的消息则不保证其次序
- 当生产者发送消息时,Kafka会根据一定的策略(轮询或一个哈希函数)将消息存储到某个分区中
- 当一个消费者组中有多个消费者时,Kafka会将总得分区数除以该消费者组中的消费者数目,将分区平均分给各个消费者