『』注意了!Kafka与RabbitMQ千万不要乱用…( 四 )
我们可以在 Uber.com 上找到 Uber 工程师实现的一个例子 。如果消息处理的时延不是关注点 , 那么对错误有足够监控的 Kafka 方案可能就足够了 。
如果消费者阻塞在重试一个消息上 , 那么底部分区的消息就不会被处理 。
获胜者:RabbitMQ 是获胜者 , 因为它提供了一个解决这个问题的开箱即用的机制 。
伸缩
有多个基准测试 , 用于检查 RabbitMQ 和 Kafka 的性能 。
尽管通用的基准测试对一些特定的情况会有限制 , 但是 Kafka 通常被认为比 RabbitMQ 有更优越的性能 。
Kafka 使用顺序磁盘 I/O 来提高性能 。从 Kafka 使用分区的架构上看 , 它在横向扩展上会优于 RabbitMQ , 当然 RabbitMQ 在纵向扩展上会有更多的优势 。
Kafka 的大规模部署通常每秒可以处理数十万条消息 , 甚至每秒百万级别的消息 。
过去 , Pivotal 记录了一个 Kafka 集群每秒处理一百万条消息[2]的例子;但是 , 它是在一个有着 30 个节点集群上做的 , 并且这些消息负载被优化分散到多个队列和交换器上 。
典型的 RabbitMQ 部署包含 3 到 7 个节点的集群 , 并且这些集群也不需要把负载分散到不同的队列上 。这些典型的集群通常可以预期每秒处理几万条消息 。
获胜者:尽管这两个消息平台都可以处理大规模负载 , 但是 Kafka 在伸缩方面更优并且能够获得比 RabbitMQ 更高的吞吐量 , 因此这局 Kafka 获胜 。
但是 , 值得注意的是大部分系统都还没有达到这些极限!所以 , 除非你正在构建下一个非常受欢迎的百万级用户软件系统 , 否则你不需要太关心伸缩性问题 , 毕竟这两个消息平台都可以工作的很好 。
消费者复杂度
RabbitMQ 使用的是智能代理和傻瓜式消费者模式 。消费者注册到消费者队列 , 然后 RabbitMQ 把传进来的消息推送给消费者 。RabbitMQ 也有拉取(pull)API;不过 , 一般很少被使用 。
RabbitMQ 管理消息的分发以及队列上消息的移除(也可能转移到 DLX) 。消费者不需要考虑这块 。
根据 RabbitMQ 结构的设计 , 当负载增加的时候 , 一个队列上的消费者组可以有效的从仅仅一个消费者扩展到多个消费者 , 并且不需要对系统做任何的改变 。
文章图片
文章图片
RabbitMQ 高效的伸缩
相反 , Kafka 使用的是傻瓜式代理和智能消费者模式 。消费者组中的消费者需要协调他们之间的主题分区租约(以便一个具体的分区只由消费者组中一个消费者监听) 。
消费者也需要去管理和存储他们分区偏移索引 。幸运的是 Kafka SDK 已经为我们封装了 , 所以我们不需要自己管理 。
另外 , 当我们有一个低负载时 , 单个消费者需要处理并且并行的管理多个分区 , 这在消费者端会消耗更多的资源 。
当然 , 随着负载增加 , 我们只需要伸缩消费者组使其消费者的数量等于主题中分区的数量 。这就需要我们配置 Kafka 增加额外的分区 。
但是 , 随着负载再次降低 , 我们不能移除我们之前增加的分区 , 这需要给消费者增加更多的工作量 。
尽管这样 , 但是正如我们上面提到过 , Kafka SDK 已经帮我们做了这个额外的工作 。
文章图片
文章图片
Kafka 分区没法移除 , 向下伸缩后消费者会做更多的工作
获胜者:根据设计 , RabbitMQ 就是为了傻瓜式消费者而构建的 。所以这轮 RabbitMQ 获胜 。
如何选择?
现在我们就如面对百万美元问题一样:“什么时候使用 RabbitMQ 以及什么时候使用 Kafka?”概括上面的差异 , 我们不难得出以下结论:
推荐阅读
- 超声波■工业熔喷布用超声波清洗机的构造及注意事项
- 「封号」原创 微信用户注意,这3个“雷区”别踩,否则可能直接封号处理
- 『小张侃数码』选择手机时注意以下几点,帮你选择最合适的5G手机
- 人人都是产品经理:商品详情页改版,这6个关键优化点要注意
- 【】微信用户注意!这4个“功能”要关闭,否则个人隐私全泄露了
- [软件]iPhone用户注意!App Store出现新型诈骗软件,350万人已中枪
- 忻州:各位车主注意!忻州城区这样停车扣分、罚款
- 『中国质量万里行』微信用户注意!这4个“功能”要关闭,否则个人隐私全泄露了
- 搜狐:企业建站如何选择平台?这几点需要注意
- 「万象科技大爆料」手机运行内存的4GB,6GB和8GB到底有什么区别?选手机时该注意!
