谈谈分布式消息队列的一些特性,比较两种比较常用的消息队列——NSQ和Kafka
1 消息队列的作用
- 解耦,将一个流程加入一层数据接口拆分成两个部分,上游专注通知,下游专注处理
- 缓冲,应对流量的突然上涨变更,消息队列有很好的缓冲削峰作用
- 异步,上游发送消息以后可以马上返回,处理工作交给下游进行
- 广播,让一个消息被多个下游进行处理
- 冗余,保存处理的消息,防止消息处理失败导致的数据丢失
2 NSQ
2.1 组件
NSQ主要包含3个组件:
- nsqd:在服务端运行的守护进程,负责接收,排队,投递消息给客户端。能够独立运行,不过通常是由 nsqlookupd 实例所在集群配置的
- nsqlookup:为守护进程,负责管理拓扑信息并提供发现服务。客户端通过查询 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点广播话题(topic)和通道