从 Kafka 到 Pulsar:数据流演进之路 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第5天
一、消息队列概述
“消息队列”是在消息的传输过程中保存消息的容器。
- 消息队列应用场景
异步处理
场景说明:用户为了使用某个应用,进行注册,系统需要发送注册邮件并验证短信。用户注册,写入消息队列后立即返回客户端成功。
应用解耦
场景说明:用户下单后,订单系统需要通知库存系统。
二、Kafka基本原理
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
- Kafka的特性
- 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒
- 可扩展性:kafka集群支持热扩展
- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
- 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
- 高并发:支持数千个客户端同时读写、
消息队列通信的模式
- 点对点模式
点对点模式通常是基于拉取或者轮询的消息传送模型,这个模型的特点是发送到队列的消息被一个且只有一个消费者进行处理。生产者将消息放入消息队列后,由消费者主动的去拉取消息进行消费。点对点模型的的优点是消费者拉取消息的频率可以由自己控制。但是消息队列是否有消息需要消费,在消费者端无法感知,所以在消费者端需要额外的线程去监控。
- 发布订阅模式
发布订阅模式是一个基于消息送的消息传送模型,改模型可以有多种不同的订阅者。生产者将消息放入消息队列后,队列会将消息推送给订阅过该类消息的消费者(类似微信公众号)。由于是消费者被动接收推送,所以无需感知消息队列是否有待消费的消息!
三、Pulsar架构
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性,被看作是云原生时代实时消息流传输、存储和计算最佳解决方案。
-
Pulsar 架构
Pulsar 由 Producer、Consumer、多个 Broker 、一个 BookKeeper 集群、一个 Zookeeper 集群构成,具体如下图所示。
- Producer:数据生成者,即发送消息的一方。生产者负责创建消息,将其投递到 Pulsar 中。
- Consumer:数据消费者,即接收消息的一方。消费者连接到 Pulsar 并接收消息,进行相应的业务处理。
- Broker:无状态的服务层,负责接收消息、传递消息、集群负载均衡等操作,Broker 不会持久化保存元数据。
- BookKeeper:有状态的持久层,负责持久化地存储消息。
- ZooKeeper:存储 Pulsar 、 BookKeeper 的元数据,集群配置等信息,负责集群间的协调(例如:Topic 与 Broker 的关系)、服务发现等。
从 Pulsar 的架构图上可以看出, Pulsar 在架构设计上采用了计算与存储分离的模式,发布/订阅相关的计算逻辑在 Broker 上完成,而数据的持久化存储交由 BookKeeper 去实现。
(待补充)