编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

为什么要抛弃Kafka而使用Pulsar(kafka和pulsar)

wxchong 2024-09-02 03:41:20 开源技术 11 ℃ 0 评论

如果您刚刚开始使用消息传递或流数据应用程序,则绝对应该将Apache Pulsar视为消息传递基础架构的核心组件。在本节中,我将尝试揭示一些Pulsar闪耀的场景,澄清一些关于现有系统的常见误解,并指出这些系统的用户面临的一些挑战。

在提出需要重新思考我们的消息传递系统方法时,作为这个领域的现有技术,例如RabbitMQ和Kafka,存在关键的架构缺陷。在雅虎开发Pulsar的团队可以很容易地选择采用现有的解决方案之一,但经过仔细考虑后,他们决定不这样做,因为他们需要一个消息传递平台,该平台提供现有整体技术中不可用的以下功能:

保证消息随时被消费

由于我们已经涵盖了平台内的数据持久性机制,Pulsar为应用程序提供了有保证的消息传递。如果一条消息成功到达Pulsar的Broker,它将被传递给所有主题消费者。为了提供这样的保证,要求未确认的消息以持久的方式存储,直到它们可以传递给消费者并由消费者确认。这种消息传递模式通常称为持久消息传递。在Pulsar中,所有消息的可配置数量的副本存储并同步到磁盘上。

默认情况下,Pulsar消息代理确保在确认收到消息之前,传入消息会保留到存储层上的磁盘上。这些消息保存在Pulsar的无限可扩展存储层中,直到被确认,从而确保消息随时被消费。

无限的扩展性

为了更好地了解Pulsar的可扩展性,让我们看一下典型的Pulsar集群。从图1-1中可以看到,Pulsar集群由两层组成: 无状态服务层,由一组用于处理客户端请求的代理组成; 和一个状态持久性层,由一组用于持久性信息的bookies组成。

这种架构模式将消息的存储与服务消息的层分开,与传统的消息传递系统有很大不同,传统的消息传递系统在历史上一直选择将这两种服务放在一起。这种去耦合方法在可扩展性方面有几个优势。使代理 “无状态” ,允许您动态增加或减少代理数量,以满足客户端应用程序的需求。

集群的无痕扩展

任何被添加到存储层的bookie都会被Broker自动发现,然后Broker会立即开始利用它们进行消息存储。与Kafka不同,Kafka要求重新分区主题,以便将传入的消息分发给新添加的代理。

无界的主题分区存储

与Kafka不同,主题分区的容量不受任何最小节点容量的限制。相反,主题分区可以扩展到存储层的总容量,存储层本身可以通过简单地添加额外的bookie来扩展。正如我们前面所讨论的,Kafka内部的分区对其大小有一些限制,而Pulsar没有此类限制。

存储扩展不需要数据的再平衡

由于消息服务和存储分为两层,将主题分区从一个broker到另一个broker几乎可以立即发生,并且没有任何数据重新平衡 (将数据从一个节点重新转换到另一个节点)。这个特性对于很多事情都是至关重要的,比如集群扩张和对broker和bookie失败的快速失败反应。

支持数百万个主题

Pulsar能够支持多达280万个主题。扩展主题数量的关键在于如何在存储层中组织底层数据。如果主题数据像传统消息系统 (如Kafka) 一样存储在专用文件或目录中,扩展能力将受到限制,因为随着主题数量的增加,I/O将分散在磁盘上,这将导致磁盘抖动并导致非常低的吞吐量。

为了防止这种行为,来自不同主题的消息被聚合、排序并存储在大文件中,然后在Apache Pulsar中建立索引。这种方法限制了随着主题数量增加而导致性能问题的小文件的扩散。

总结

  • Apache Pulsar是一种现代消息传递系统,提供高性能流式传输和传统队列消息传递。
  • Apache Pulsar提供了一个名为 “Pulsar函数” 的轻量级计算引擎,允许开发人员实现针对发布到给定主题的每条消息执行的简单处理逻辑。
  • Pulsar解耦存储和服务层的优势;包括无限可扩展性、零数据丢失。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表