『』注意了!Kafka与RabbitMQ千万不要乱用…( 二 )
不过 , 随着系统规模增长 , 单线程消费者模式会严重影响消息处理能力 。所以 , 我们不要轻易的选择这种方案 。
另一方面 , 对于 Kafka 来说 , 它在消息处理方面提供了可靠的顺序保证 。Kafka 能够保证发送到相同主题分区的所有消息都能够按照顺序处理 。
回顾第一篇文章介绍 , 默认情况下 , Kafka 会使用循环分区器(round-robin partitioner)把消息放到相应的分区上 。
不过 , 生产者可以给每个消息设置分区键(key)来创建数据逻辑流(比如来自同一个设备的消息 , 或者属于同一租户的消息) 。
所有来自相同流的消息都会被放到相同的分区中 , 这样消费者组就可以按照顺序处理它们 。
但是 , 我们也应该注意到 , 在同一个消费者组中 , 每个分区都是由一个消费者的一个线程来处理 。结果就是我们没法伸缩(scale)单个分区的处理能力 。
不过 , 在 Kafka 中 , 我们可以伸缩一个主题中的分区数量 , 这样可以让每个分区分担更少的消息 , 然后增加更多的消费者来处理额外的分区 。
获胜者:显而易见 , Kafka 是获胜者 , 因为它可以保证按顺序处理消息 。RabbitMQ 在这块就相对比较弱 。
消息路由
RabbitMQ 可以基于定义的订阅者路由规则路由消息给一个消息交换器上的订阅者 。一个主题交换器可以通过一个叫做 routing_key 的特定头来路由消息 。
或者 , 一个头部(headers)交换器可以基于任意的消息头来路由消息 。这两种交换器都能够有效地让消费者设置他们感兴趣的消息类型 , 因此可以给解决方案架构师提供很好的灵活性 。
另一方面 , Kafka 在处理消息之前是不允许消费者过滤一个主题中的消息 。一个订阅的消费者在没有异常情况下会接受一个分区中的所有消息 。
作为一个开发者 , 你可能使用 Kafka 流式作业(job) , 它会从主题中读取消息 , 然后过滤 , 最后再把过滤的消息推送到另一个消费者可以订阅的主题 。但是 , 这需要更多的工作量和维护 , 并且还涉及到更多的移动操作 。
获胜者:在消息路由和过滤方面 , RabbitMQ 提供了更好的支持 。
消息时序(timing)
在测定发送到一个队列的消息时间方面 , RabbitMQ 提供了多种能力:
①消息存活时间(TTL)
发送到 RabbitMQ 的每条消息都可以关联一个 TTL 属性 。发布者可以直接设置 TTL 或者根据队列的策略来设置 。
系统可以根据设置的 TTL 来限制消息的有效期 。如果消费者在预期时间内没有处理该消息 , 那么这条消息会自动的从队列上被移除(并且会被移到死信交换器上 , 同时在这之后的消息都会这样处理) 。
TTL 对于那些有时效性的命令特别有用 , 因为一段时间内没有处理的话 , 这些命令就没有什么意义了 。
②延迟/预定的消息
RabbitMQ 可以通过插件的方式来支持延迟或者预定的消息 。当这个插件在消息交换器上启用的时候 , 生产者可以发送消息到 RabbitMQ 上 , 然后这个生产者可以延迟 RabbitMQ 路由这个消息到消费者队列的时间 。
这个功能允许开发者调度将来(future)的命令 , 也就是在那之前不应该被处理的命令 。
例如 , 当生产者遇到限流规则时 , 我们可能会把这些特定的命令延迟到之后的一个时间执行 。
Kafka 没有提供这些功能 。它在消息到达的时候就把它们写入分区中 , 这样消费者就可以立即获取到消息去处理 。
Kafka 也没用为消息提供 TTL 的机制 , 不过我们可以在应用层实现 。
不过 , 我们必须要记住的一点是 Kafka 分区是一种追加模式的事务日志 。所以 , 它是不能处理消息时间(或者分区中的位置) 。
获胜者:毫无疑问 , RabbitMQ 是获胜者 , 因为这种实现天然的就限制 Kafka 。
消息留存(retention)
当消费者成功消费消息之后 , RabbitMQ 就会把对应的消息从存储中删除 。这种行为没法修改 。它几乎是所有消息代理设计的必备部分 。
推荐阅读
- 超声波■工业熔喷布用超声波清洗机的构造及注意事项
- 「封号」原创 微信用户注意,这3个“雷区”别踩,否则可能直接封号处理
- 『小张侃数码』选择手机时注意以下几点,帮你选择最合适的5G手机
- 人人都是产品经理:商品详情页改版,这6个关键优化点要注意
- 【】微信用户注意!这4个“功能”要关闭,否则个人隐私全泄露了
- [软件]iPhone用户注意!App Store出现新型诈骗软件,350万人已中枪
- 忻州:各位车主注意!忻州城区这样停车扣分、罚款
- 『中国质量万里行』微信用户注意!这4个“功能”要关闭,否则个人隐私全泄露了
- 搜狐:企业建站如何选择平台?这几点需要注意
- 「万象科技大爆料」手机运行内存的4GB,6GB和8GB到底有什么区别?选手机时该注意!
