RabbitMQ可作为消息中间件的一种实现,常常被当作一种服务总线来使用。Apache Kafka不是消息中间件的一种实现。相反,它只是一种分布式流式系统。不同于基于队列和交换器的RabbitMQ,Kafka的存储层是使用分区事务日志来实现的。Kafka也提供流式API用于实时的流处理以及连接器API用来更容易的和各种数据源集成。 精选答案
RabbitMQ可作为消息中间件的一种实现,常常被当作一种服务总线来使用。Apache Kafka不是消息中间件的一种实现。相反,它只是一种分布式流式系统。不同于基于队列和交换器的RabbitMQ,Kafka的存储层是使用分区事务日志来实现的。Kafka也提供流式API用于实时的流处理以及连接器API用来更容易的和各种数据源集成。RabbitMQ支持典型的开箱即用的消息队列。开发者可以定义一个命名队列,然后发布者可以向这个命名队列中发送消息。最后消费者可以通过这个命名队列获取待处理的消息。Kafka没有实现队列这种东西。相应的,Kafka按照类别存储记录集,并且把这种类别称为主题。Kafka为每个主题维护一个消息分区日志。每个分区都是由有序的不可变的记录序列组成,并且消息都是连续的被追加在尾部。当消息到达时,Kafka就会把他们追加到分区尾部。默认情况下,Kafka使用轮询分区器把消息一致的分配到多个分区上。Kafka可以改变创建消息逻辑流的行为。需要重点注意的是RabbitMQ支持临时和持久两种订阅类型。消费者可以调用RabbitMQ的API来选择他们想要的订阅类型。根据RabbitMQ的架构设计,也可以创建一种混合方法——订阅者以组队的方式然后在组内以竞争关系作为消费者去处理某个具体队列上的消息,这种由订阅者构成的组称为消费者组。