Apache Kafka 与 RabbitMQ

2025年3月17日 | 阅读 3 分钟

RabbitMQ 是什么?

RabbitMQ 是最广泛使用、通用且开源的消息代理。它于 2007 年发布,是消息系统中的主要组件。目前,它用于流媒体用例。RabbitMQ 能够处理后台任务,或充当微服务之间的消息代理。它帮助 Web 应用程序减少负载。此外,它还缩短了服务器对那些耗时任务或资源的交付时间。

什么是 Apache Kafka?

Apache Kafka 也是一个开源的分布式发布/订阅消息系统。它于 2011 年发布,作为两个应用程序之间的中间存储。生产者将消息写入并存储在 Kafka 集群中。另一方面,消费者从集群中消耗消息。它还可以减少重消息的慢速传递。

Kafka vs RabbitMQ

Apache Kafka vs RabbitMQ

参数Apache KafkaRabbitMQ
分发Kafka 消费者通过主题分区进行分布式。每个消费者一次消耗一个特定分区的消息。每个队列实例有许多消费者。这些消费者被称为竞争性消费者,因为它们相互竞争以消耗消息。但是,消息只能处理一次。
高可用性借助 Zookeeper,它可以管理 Kafka 集群的状态并支持高可用性。通过集群和高可用队列提供高性能数据复制。因此,它还提供高可用性。
性能它可以在较少的硬件上每秒处理数百万条消息。它也可以在每秒处理数百万条消息,但需要更多的硬件。
复制Kafka 中有复制的代理,当主代理出现故障时,它们可以正常工作。这里,队列不会自动复制。必须进行配置。
多订阅者多个消费者类型可以订阅 Kafka 的许多消息。尽管消息被路由到不同的队列,但来自队列的只有一个消费者可以处理消息。
消息协议Apache Kafka 支持 int8、int16 等基本类型和二进制消息。它支持任何标准的队列协议,如 STOMP、AMQP、HTTP 等。
消息排序消息排序仅存在于分区内。它保证要么全部失败,要么全部通过。它通过单个 AMQP 通道维护流的顺序。此外,它还会重新排序其队列逻辑中的重传数据包,这将防止消费者重新排序缓冲区。
消息生命周期它包含一个日志文件,可以一直保留所有消息。因为它是一个队列,一旦消耗的消息就会被删除,并收到确认。
架构高度可扩展的发布/订阅分布式消息系统。它具有代理、主题、分区和 Kafka 集群中的主题。一个通用的发布/订阅消息代理。其架构与 Kafka 不同,因为它包含队列。
用例它主要用于流式传输数据。Web 服务器主要使用它来即时响应请求。
交易它支持那些在 Kafka 主题之间执行“读-处理-写”模式的事务。即使事务只涉及单个队列,它也不保证原子性。
语言Apache Kafka 使用 Scala 和 JVM 编写。RabbitMQ 使用 Erlang 编写。
路由支持它支持复杂的路由场景。它不支持复杂的路由场景。
开发者体验随着高增长,它带来了良好的体验。但它只支持 Java 客户端。RabbitMQ 拥有成熟的客户端库,支持 Java、PHP、Python、Ruby 等。