这是我参与「第四届青训营 」笔记创作活动的第13天。
从 Kafka 到 Pulsar的数据流演进之路
常见消息队列
常见消息队列有:Kafka、RocketMQ、Pulsar 架构、高级特性。
消息队列应用场景:
1.MQ 消息通道
2.EventBridge 事件总线
3.Data Platform 数据流平台
Kafka的系统架构:
Kafka 是一种高吞吐、分布式、基于发布和订阅模型的消息系统。 Kafka 用于离线和在线消息的消费,将消息数据按顺序保存在磁盘上,并在集群内以副本的形式存储以防止数据丢失。Kafka 可以依赖 ZooKeeper 进行集群管理,并且受到越来越多的分布式处理系统的青睐,比如 Storm、Spark、Flink 等都支持与 Kafka 集成,用于实时流式计算。
Kafka的问题:
- Kafka 没有租户概念,需要手动维护多个集群,不方便运维。
- Kafka 集群扩容后需要做 Reassign Partitions,IO 消耗大。
- Kafka 监控体系不完善,排查问题较为繁琐。
- 在线业务消息重置不方便,实现起来较为麻烦,需要停掉消费组。
- Kafka 不支持死信队列和延迟队列。
- Kafka 没有官方维护和支持的 Go 语言客户端。
- 在 Kafka 中支持 schema,需要引入额外组件,不方便维护。
Pulsar框架介绍
Pulsar 是一个用于服务器到服务器的消息系统,具有多租户、高性能等优势,支持跨地域复制,单个实例原生支持多个集群,即跨集群复制;还支持多种topic订阅模式,包含:独占订阅、共享订阅、故障转移订阅、键共享;并且可以通过Apache BookKeeper提供的持久化消息存储机制保证消息传递;
为什么选择 Pulsar
在使用 Kafka 遇到各种问题后,在进一步调研 Pulsar,得出以下值得选择的优点。
- Pulsar 采用云原生的架构,存储和计算分离。
- Pulsar 支持多租户,我们可以按照不同的业务线、业务小组和对应的服务级别来管理消息保存时间、持久化、堆积清除策略等,统一维护一套 Pulsar 集群。
- Pulsar 支持灵活的水平扩容。当存储不够时,直接增加 bookie 进行扩容,不会对用户产生任何影响。
- Pulsar 自带监控体系,broker,bookie 相关指标清晰,方便快速定位问题,给出解决方案。
- Pulsar cursor 方便重置消息,给业务带来很好的体验。
- Pulsar 支持死信队列和延迟队列。
- Pulsar schema 集成在 broker 中,不需要引入单独的组件。Golang client 支持 schema,减少了维护成本。