一、消息队列技术趋势
早年业界消息队列演进的主要推动力在于功能(如延迟消息、事务消息、顺序消息等)、场景(实时场景、大数据场景等)、分布式集群的支持等等。近几年,随着云原生架构和 Serverless 的普及,业界 MQ 主要向实时消息和流消息的融合架构、Serverless、Event、协议兼容等方面演进。从而实现计算、存储的弹性,实现集群的 Serverless 化。
二、业界主流消息队列
当时有个业务背景:用户的回复会包含图片和表情等复杂结构数据,导致内容可能会特别长。另外遇到高峰时,回帖数量会特别多,短时间内可能有几千万的回帖,回帖的总内容很大。
Redis 的问题在于数据都存在内存里,如果数据没有及时消费,就会打爆内存。而且因为回帖内容可能很大,在 Redis 的 Value 里存大的数据会有性能和稳定性问题。而 MySQL 在 insert 上是有性能瓶颈的,短时间内大量回帖,插入会特别频繁,性能就扛不住。
而 Kafka 就没有这个问题,作为一个消息队列,它的特点就是高吞吐、大消息、高并发、持久化,不会存在性能、功能、稳定性方面的问题。这就是我们选择 Kafka 的理由。
其实如果没有大消息和大流量等复杂场景,是可以选用非标准消息队列产品的。比如在用户状态审核的场景中,只需要向下游传递用户 ID 和审核结果,结构简单,数量有限。这时候选择非标准消息队列比如 Redis 和 MySQL 也是可以的。