mq 选型
无脑 kafka. 或者 pulsar.
我感觉 pulsar 比较好. 功能特性迭代比较快
其他推荐:NSQ 、Redis(LUA,参考 Laravel 实现)
阿里另外还有一个产品是 MNS
选型的时候不要过度高估自己对陌生技术的理解不了解 Erlang 是学不到 rabbit 的精髓的,学习 MQ 不要只学搭个环境调个接口,对不同架构意图和 MQ 的公共实现原理做深入了解才是关键。
如果你读过 Kafaka 和 RocketMQ 的源码,就明白 RocketMQ 某种程度上就是 Kafka 的子实现,只是两者的技术实现手段不同,甚至我个人认为如果只是从消息队列来看 RocketMQ 的实现是要优于 Kafka 的。
低吞吐,部署简单的,用 rabbitmq,装个 erlang 而已,有什么麻烦的
大流量大吞吐的,用 kafka
* RabbitMQ 是基于 ERlang 的 Socket Queue 封装。即使是跨互联网传输,单机可轻松支持上万连接。一对一,多对多,RPC,广播都支持。RabbitMQ 使用二进制直接传输你发送的内容,client 本身并不支持诸如加密,压缩。需要发送和接收端自己完成。支持集群和证书加密,但是前者压测性能损失很大,据说在最新的几个版本中有相当优化。
* Kafka 在我的理解,其实更像一个日志系统。broker 发送过来的信息,按分组等相关设置进行记录并根据设置定时或定量丢弃。Consumer 按 group-id 进行读取。Kafka Client 本身即支持多种压缩算法,连接时修改设置即可。Kafka 消息读取会受 group-id 及分区设置影响。如果用于任务分发队列,RabbitMQ 与 Kafka 的行为很多地方会有差异,在具体的使用场景时需要注意。
浅见,错漏之处,恳请指正。