上次我们在文章《如何在Kafka和RabbitMQ之间做出选择》中对Kafka和RabbitMQ做了对比。今天我们继续他们之间的比较。
监控 Monitoring
你可以从Web浏览器监视和操纵RabbitMQ服务器。同时,还可以在浏览器中处理(创建,删除和查看)队列queue,连接connections,通道channels,交换exchanges,用户users和用户权限user permissions。还可以监视消息的速率,手动地发送/接收消息。
对于Kafka,有许多用于监视的开源工具,还有一些商业工具,它们提供管理和监视功能。
Burrow是Apache Kafka的监视工具,由Linkedin提供。它可以监视所有消费者consumer的offset。可以通过发送http请求获得集群的状态和信息。还可以发送电子邮件或调用HTTP请求向其他服务发送状态。
Kafdrop是用于监视Apache Kafka集群的UI。可以显示比如broker,主题topic,分区partition之类的信息,甚至可以查看消息message。它是一个轻量级的应用程序,可以在Spring Boot上运行,并且只需要很少的配置。
推送PUSH还是拉取PULL
RabbitMQ推送消息到消费者consumer。需要特别注意prefetch的限制limit的配置,以防止消费者consumer处理不过来(如果消息推送到消费者队列的速度比消费者处理它们的速度快,消费者就会处理不过来)。消费者也可以从RabbitMQ拉取消息,但不建议这样做。
Kafka使用拉取消息的PULL模型,消费者从给定偏移量offset中批量地拉取消息。可以自己控制拉取和处理的速度。
许可证 License 都是 免费的
RabbitMQ使用Mozilla Public License。Apache Kafka受Apache 2.0许可证的保护。这两个许可证都是免费的开源软件许可证。
复杂度 Complexity
相对来说Kafka的复杂度更高一些。处理Kafka中的故障要复杂一些。修复某些问题的过程通常比较耗时,而且更加复杂。Kafka 有一个生态系统 Ecosystem。比如Kafka Connect可以用来把其他系统与Kafka集成。使用Kafka Connect可以做很多事情,而且已经有很多现成的连接器Kafka Connect可用,因此上手起来很容易。
RabbitMQ的使用场景 Use Cases
通常,如果你想要一个简单的,传统的发布/订阅消息代理,并且不需要消息存储,和流式处理(streaming),可以选择RabbitMQ。
长期运行的任务 Long run tasks
比如你的网页Web应用程序允许用户将信息传到网站。网站后台服务器处理此信息,生成PDF,然后将其通过电子邮件发送给用户。这里生成PDF,发送邮件都可以通过一个专门的系统,异步地处理。不用等这些都完成才给用户同步的返回。你可以在网站的后台程序发送消息到PDF处理程序,之后就返回给用户:“收到您信息了,稍后发出确认邮件”。这里网站的后台服务器和文件处理服务器都是长期运行的程序。
微服务架构中的中间人
RabbitMQ还被用于微服务体系结构。各个微服务可以利用RabbitMQ进行通信。同步变异步。
Kafka的使用场景 Use Cases
通常,如果你想要支持存储,重新读取和流数据分析的框架,可以使用Apache Kafka。
数据分析Data Analysis:跟踪tracking,日志logging,安全security
在所有这些情况下,都需要收集,存储和处理大量数据。Kafka刚开始设计出来就是LinkedIn用来做用户行为分析的,包括用户的页面浏览,搜索,上传或其他操作。这需要极高的吞吐量。Kafka的集群的吞吐量可以达到百万级别,甚至更高。
Kafka可用于将大量信息流式传输到存储系统,硬盘空间目前来说比较便宜。
实时处理 realtime processing
Kafka支持实时处理,并且有超高吞吐量。比如金融IT系统监视股票数据,可以有很多消息生产者producer。
我分享了一些了的动画演示视频,解释Kafka的工作原理。欢迎观看。
本人,@小马过河Vizit,专注于分布式系统原理和实践分享。希望利用动画生动而又准确地演示抽象的原理。
关于我的名字。小马过河Vizit,意为凡事像小马过河一样,需要自己亲自尝试、探索才能获得乐趣和新知。Vizit是指Visualize it的缩写。一图胜千言,希望可以利用动画来可视化抽象的原理。
欢迎关注,点赞! 谢谢支持。