参数 | Apache Kafka | RabbitMQ |
---|
分发 | 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 等。 |