CentOS 7下安装nsq
来源:互联网 发布:pymongo查询大量数据 编辑:程序博客网 时间:2024/06/03 20:02
CentOS 7安装nsq
nsq简介
NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。它具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征
依赖
nsq使用go语言编写,所以我们要安装go的环境。网上有说要去1.4版本以上,还有说要求是1.6版本以上。我就索性安装了1.8的版本。
Go环境安装
go环境中文版下载地址https://golangtc.com/download 可以点击该链接下载您需要的版本。
下载完成后解压并拷贝到你的/usr/local路径下:mv go /usr/local
完成后配置你得环境变量,此时你可以创建一个自己的工作目录当做你的GOPATH并配置到环境变量中,建议将GOPATH/bin同时配置到PATH中,因为我们在后续的安装中会生成很多的可执行文件保存在bin目录下,将其配置到bin中就不会提示你找不到该命令啦。
配置你得环境变量:
vim /etc/profile 在文件的末尾加入如下3行:
export GOROOT=/usr/local/goexport GOPATH=/home/work/gowork //替换成你自己的GOPATH export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
注意linux下使用“:”分割,windows下使用“;”分割。
保存退出后执行source /etc/profile使环境变量立即生效。
nsq安装
源码安装
我在安装时参考了其他人写的安装方法,大体有三种方式。
方法1: 按照以下顺序执行go get
go get github.com/tools/godep
go get github.com/bmizerany/assert
godep get github.com/bitly/nsq/…
使用这种方式安装时,执行到第三部会报错。报错“不允许使用内部的包”,最开始以为是自己操作的问题,重装后依然报错。故采用了领一种方法。
方法 2:安装nsq需要安装gpm
yum install gpmgpm installgo get github.com/nsqio/nsq/...
使用该方式安装成功。
方法3:直接去下载编译好的,解压后复制到你得GOPATH/bin目录下。
https://github.com/nsqio/nsq/releases 直接点击该链接下载对应版本。
nsq测试
1 打开一个终端,启动nsqlookupd:nsqlookupd
2 再打开一个终端,启动nsq:nsqd –lookupd-tcp-address=127.0.0.1:4160
PS:这样开启我遇到了报错“no such host”,在经过多番查找后,发现了如下方式开启。
1. 启动nsqlookupd:nsqlookupd -tcp-address=127.0.0.1:4160 -http-address=127.0.0.1:4161 -broadcast-address=”127.0.0.1”
2. 启动nsqd:nsqd -broadcast-address=”127.0.0.1” -http-address=”127.0.0.1:4151” –lookupd-tcp-address=127.0.0.1:4160 -tcp-address=”127.0.0.1:4150”
3. 再打开一个终端,启动nsqadmin: nsqadmin –lookupd-http-address=127.0.0.1:4161
4. 创建一个topic并且发布一条消息,由于nsq支持http协议发布消息,我们可以直接使用curl命令。
curl -d ‘hello world 1’ ‘http://127.0.0.1:4151/put?topic=test’
5. 再开一个终端来处理消息数据流,将消息写入/tmp文件加下的日志文件,文件名默认由主题topic+主机+日期时间戳组成。
nsq_to_file –topic=test –output-dir=/home/work/nsq_log –lookupd-http-address=127.0.0.1:4161
注:/home/work/nsq_log这个为你自己创建的路径。
可以继续执行第4条命令,发布消息。可以进入您创建的路径下面查看日志,也可以登录网页查看。在浏览器中输入http://127.0.0.1:4171/即可查看。
至此nsq的安装完成,推荐使用第三种方式安装。
nsq特性
- 支持无 SPOF 的分布式拓扑
- 水平扩展(没有中间件,无缝地添加更多的节点到集群)
- 低延迟消息传递 (性能)
- 结合负载均衡和多播消息路由风格
- 擅长面向流媒体(高通量)和工作(低吞吐量)工作负载
- 主要是内存中(除了高水位线消息透明地保存在磁盘上)
- 运行时发现消费者找到生产者服务(nsqlookupd)
- 传输层安全性 (TLS)
- 数据格式不可知
- 一些依赖项(容易部署)和健全的,有界,默认配置
- 任何语言都有简单 TCP 协议支持客户端库
- HTTP 接口统计、管理行为和生产者(不需要客户端库发布)
- 为实时检测集成了 statsd
- 健壮的集群管理界面 (nsqadmin)
nsq组件
nsqd
nsqd 是一个守护进程,负责接收,排队,投递消息给客户端。也就是说这个服务是干活的。它可以独立运行,不过通常它是由 nsqlookupd 实例所在集群配置的。
nsqd特性如下:
1. 对订阅了同一个topic,同一个channel的消费者使用负载均衡策略(不是轮询)
2. 只要channel存在,即使没有该channel的消费者,也会将生产者的message缓存到队列中(注意消息的过期处理)
3. 保证队列中的message至少会被消费一次,即使nsqd退出,也会将队列中的消息暂存磁盘上(结束进程等意外情况除外)
4. 限定内存占用,能够配置nsqd中每个channel队列在内存中缓存的message数量,一旦超出,message将被缓存到磁盘中
5. topic,channel一旦建立,将会一直存在,要及时在管理台或者用代码清除无效的topic和channel,避免资源的浪费
nsqlookupd
nsqlookupd 是守护进程负责管理拓扑信息。客户端通过查询 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点广播话题(topic)和通道(channel)信息。也就是说nsqlookupd是管理者。
nsqlookupd 特性:
1. 唯一性,在一个Nsq服务中只有一个nsqlookupd服务。当然也可以在集群中部署多个nsqlookupd,但它们之间是没有关联的.
2. 去中心化,即使nsqlookupd崩溃,也会不影响正在运行的nsqd服务
3. 充当nsqd和naqadmin信息交互的中间件
4. 提供一个http查询服务,给客户端定时更新nsqd的地址目录
nsqadmin
nsqadmin是web管理界面,用来汇集集群的实时统计,并执行不同的管理任务。也就是说nsqadmin就是我们在浏览器中看到的那个。
nsqadmin特性如下:
1. 提供一个对topic和channel统一管理的操作界面以及各种实时监控数据的展示,界面设计的很简洁,操作也很简单
2. 展示所有message的数量
3. 能够在后台创建topic和channel
4. nsqadmin的所有功能都必须依赖于nsqlookupd,nsqadmin只是向nsqlookupd传递用户操作并展示来自nsqlookupd的数据
参考文章:http://wiki.jikexueyuan.com/project/nsq-guide/design.html
http://blog.csdn.net/symlljg/article/details/52885565
https://segmentfault.com/a/1190000009194607
- CentOS 7下安装nsq
- centos 下安装nsq,配置开机启动服务
- ubuntu下nsq的安装
- CentOS 7上安装nsq,并配置系统服务、开机启动
- 小白linux centos安装配置nsq全过程
- NSQ 安装指南
- nsq安装及初探
- nsq
- nsq
- ubuntu nsq安装与配置
- nsq简单安装以及测试
- ubuntu nsq安装与配置
- CentOS 7下安装docker
- centos下安装python2.7
- CentOS下安装JDK1.7
- CentOS 7 下安装JAVA
- centOS 7 下SVN安装
- CENTOS 7 下安装mysql
- [LeetCode]442. Find All Duplicates in an Array
- windows重启nginx的脚本
- 欢迎使用CSDN-markdown编辑器
- 【论文 Postfiler】Microphone Array Post-Filter Based on Noise Field Coherence
- Caffe学习:Blobs, Layers, and Nets
- CentOS 7下安装nsq
- 约瑟夫问题
- centos7下安装mycat
- oracle函数listagg的使用说明
- 雷军20年前代码
- linux crypt()函数使用总结
- 编译安卓Linux内核并替换(配置支持LKM) (MD)
- [python][正则表达式] re模块核心函数和方法
- java中的一些数据格式的声明、使用(一)