这是我参与「第四届青训营 」笔记创作活动的第10天
本次学习主要是针对消息队列、Kafka、Pulsar及其周边生态的了解和学习,收获颇丰!
一、什么是消息队列
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka、MetaMQ,RocketMQ。
以电商系统的消息队列为例说明:
消息队列采用高可用,可持久化的消息中间件。比如Active MQ,Rabbit MQ,Rocket Mq。
(1)应用将主干逻辑处理完成后,写入消息队列。消息发送是否成功可以开启消息的确认模式。(消息队列返回消息接收成功状态后,应用再返回,这样保障消息的完整性)
(2)扩展流程(发短信,配送处理)订阅队列消息。采用推或拉的方式获取消息并处理。
(3)消息将应用解耦的同时,带来了数据一致性问题,可以采用最终一致性方式解决。比如主数据写入数据库,扩展应用根据消息队列,并结合数据库方式实现基于消息队列的后续处理。
二、Kafka
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于Zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于Hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,Web/Nginx日志、访问日志,消息服务等等,用Scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
(1)Kafka的特性
- 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒
- 可扩展性:kafka集群支持热扩展
- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
- 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
- 高并发:支持数千个客户端同时读写
(2)Kafka的应用场景
- 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
- 消息系统:解耦和生产者和消费者、缓存消息等。
- 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
- 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
- 流式处理:比如spark streaming和storm
- 事件源
(3)Kafka基础架构
三、新一代消息队列Pulsar
(1)Pulsar概述
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性,被看作是云原生时代实时消息流传输、存储和计算最佳解决方案。
(2)Pulsar架构
Pulsar 由 Producer、Consumer、多个 Broker 、一个 BookKeeper 集群、一个 Zookeeper 集群构成,如下图所示。
- Producer:数据生成者,即发送消息的一方。生产者负责创建消息,将其投递到 Pulsar 中。
- Consumer:数据消费者,即接收消息的一方。消费者连接到 Pulsar 并接收消息,进行相应的业务处理。
- Broker:无状态的服务层,负责接收消息、传递消息、集群负载均衡等操作,Broker 不会持久化保存元数据。
- BookKeeper:有状态的持久层,负责持久化地存储消息。
- ZooKeeper:存储 Pulsar 、 BookKeeper 的元数据,集群配置等信息,负责集群间的协调(例如:Topic 与 Broker 的关系)、服务发现等。
四、总结
本次学习主要是针对消息队列中Kafka和新一代消息队列Pulsar的架构、优缺点及其生态的学习。Pulsar的发展十分迅速,在未来有广阔的发展前景。虽然 Pulsar 社区和其他一些关键领域(如文档)的规模仍然不大,但在过去的一年半时间里,均有显著增长。Pulsar 社区活跃度高、成长速度快,与 Pulsar 生态一起致力于 Pulsar 知识库和培训材料的持续扩展,同时也加速了 Pulsar 主要功能的开发。企业在评估一项技术时,不仅需要考虑它当前的优劣势,还需要考虑该技术未来的发展方向和发展空间,如何应对新的业务需求等。Pulsar 具有强大的消息功能和其他独特优势,因此,对于希望开发实时数据流功能的企业而言,Pulsar 是个最佳选择。
五、参考资料