如何选择RabbitMQ和Kafka

2020/11/27 posted in  RabbitMQ

RabbitMQ

  1. 是通用的消息代理,采用点对点,请求/回复和pub-sub通信。
  2. 采用smart broker / dumb consumer模式,专注于一致的消息传递。
  3. 以与broker跟踪消费者状态大致相似的速度消费

RabbitMQ中的通信可以选择是同步或者是异步。发布者向交换发送消息,消费者从队列中检索消息。通过交换将生产者与队列分离可确保生产者不会受到硬编码路由决策的影响

Kafka

Kafka专为高容量发布 - 订阅消息和流而设计,旨在持久,快速和可扩展。从本质上讲,
Kafka提供了一个持久的消息存储,类似于日志,在服务器集群中运行,它存储称为主题的类别中的记录流

每条消息都包含一个键,一个值和一个时间戳。Kafka使用dumb broker,使用smart consumers 来读取它的缓冲区。Kafka不会尝试跟踪每个消费者读取的消息,只保留未读消息; 相反,Kafka会在一段时间内保留所有消息,消费者有责任在每个日志(消费者状态)中跟踪他们的位置。因此,通过合适的开发人员创建消费者代码,Kafka可以支持大量消费者并以极少的开销保留大量数据

需求和用例

Kafka

需求

流处理场景,网站活动跟踪,度量标准,日志聚合,流处理,事件采购和提交日志等常见用例

适用场景

  1. 从A到B流,没有复杂的路由,最大吞吐量(100k / sec +),按分区顺序至少提交一次
  2. 当应用程序需要访问流历史记录时,至少按分区顺序提供一次。
  3. 客户可以根据需求“重播”事件流,而不是更传统的消息代理,一旦消息传递,它就会从队列中删除
  4. 流处理
  5. 时间驱动

RabbitMQ

需求

通常用于Web服务器快速响应请求,而不是在用户等待结果时强制执行资源繁重的过程。它还可以将消息分发给多个接收者以供消费,或者在高负载(20k + / sec)下平衡负载之间的负载。当您的需求超出吞吐量时,RabbitMQ可提供许多功能:可靠的交付,路由,联合,HA,安全性,管理工具和其他功能

适用场景

  1. 应用程序需要使用现有协议的任意组合,如AMQP 0-9-1,STOMP,MQTT,AMQP 1.0
  2. 基于每个消息(死信队列等)进行更精细的一致性控制/保证
  3. 应用程序需要点对点,请求/回复以及发布/订阅消息传递的多样性
  4. 复杂的路由到消费者,使用non-trivial路由逻辑集成多个服务/应用程序
  5. RabbitMQ通常与Apache Cassandra一起使用,对于需要“无限”队列的应用程序,
    RabbitMQ通常与LevelDB插件一起使用,但这两种功能都不附带RabbitMQ本身