NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。
NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。
基本组件
nsq 有三个必要的组建nsqd、nsqlookupd、nsqadmin。
nsqd
负责接收消息,存储队列和将消息发送给客户端。
nsqd 可以多机器部署,当客户端向指定topic发送消息时,可以配置多个nsqd地址,消息会随机的分配到各个nsqd上,nsqd优先把消息存储到内存channel中,当内存channel满了之后,则把消息写到磁盘文件中。
nsqlookupd
主要负责管理拓普信息、nsqd的心跳、状态监测,给客户端、nsqadmin提供topic所在的 nsqd地址与状态。
nsqadmin
nsqadmin是一个web管理界面,用来汇集集群的实时统计,并执行不同的管理任务。
message
消息,生产者与消费者之间传递的数据,在nsq中统一称为message。
topic
可以理解为生产者生产message的去处。当生产者生产message的时候,若没有相应的topic,则会在第一次生产message的时候创建Topic。
生产者和Topic是一对一的关系。
channel
消费者在消费message的时候,需要指定topic和channel。一个topic下可以有多个channel。channel会在消费者第一次订阅相应topic的时候就创建。
同一topic、同一channel下的多个消费者,不会消费到同一message。可以理解为多个消费者之间进行了负载均衡。
同一topic、不同channel下的两个消费者,可以消费到一模一样的message。 多个消费者之间相互独立,完全没有影响。
源码目录结构
1 | nsq |