消息队列 NSQ 源码学习笔记 (五)

lpflpf · · 744 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

NSQ 的拓扑结构和生产消费端配置 ### 单机模式部署 NSQD 是可以脱离 nsqlookup 做单机部署的。 由于 nsqd 足够轻量,可以把服务部署在消息发布的服务器上,加快 pub 消息的速度,也能兼顾消费端消息的分发 ### 集群模式 NSQD 是一个SPOF的系统,每个服务可以独立部署。当采用集群模式时,建议开启nsqlookup服务,用于管理多个 nsqd 的服务 一般的消息队列都会提供rebalance 的功能,nsqd 是没有的。 不过可以通过nsq\_to\_nsq 做消息的复制,做服务的主备,当服务挂机后,可以切换到另外的服务器做消费。(中间channel 不会切换,因此可能会重复消费,或者丢一定消息) nsqd 正常情况下,如果配置合理,消息是不会落地的。如果需要落地,可以使用nsq\_to\_file, 新建一个channel订阅 相关topic, 把消息落地到硬盘。 在集群模式下,可以部署多个 nsqlookupd 服务, 这些服务之间是互相没有依赖的,nsqd 在做消息广播的时候,会对每一个nsqlookupd的服务遍历一次,更新服务上的信息 ### 生产 官方建议的生产方式,是通过 http 请求直接 pub 消息到nsq. 当然,大部分的nsq的客户端也实现了nsq 的消息发布功能 ### 消费 消息队列的实现,一般都是推模型、拉模型或者推拉结合。在 nsq 中,是使用推模型,因此需要使用客户端来做消息的接收。 由于 nsq 消费的协议足够简单,也可以自行建立一个tcp 连接,做消息和连接的管理。 ### 配置参数详解 #### nsqlookupd 配置 ``` -broadcast-address string nsqd, client 访问的地址 address of this lookupd node, (default to the OS hostname) (default "tempt463.ops.shbt.qihoo.net") -http-address string http 监听 <addr>:<port> to listen on for HTTP clients (default "0.0.0.0:4161") -tcp-address string tcp 监听 <addr>:<port> to listen on for TCP clients (default "0.0.0.0:4160") -config string path to config file -log-level value set log verbosity: debug, info, warn, error, or fatal (default INFO) -log-prefix string log message prefix (default "[nsqlookupd] ") -inactive-producer-timeout duration duration of time a producer will remain in the active list since its last ping (default 5m0s) -tombstone-lifetime duration duration of time a producer will remain tombstoned if registration remains (default 45s) -version print version string ``` #### nsqd 配置 ``` -config string path to config file -data-path string path to store disk-backed messages -auth-http-address value 授权服务地址 <addr>:<port> to query auth server (may be given multiple times) -lookupd-tcp-address value nslookupd tcp 地址, 广播使用 lookupd TCP address (may be given multiple times) -broadcast-address string nslookupd 地址 address that will be registered with lookupd (defaults to the OS hostname) (default "tempt463.ops.shbt.qihoo.net") -tcp-address string <addr>:<port> to listen on for TCP clients (default "0.0.0.0:4150") // http 服务 -http-address string <addr>:<port> to listen on for HTTP clients (default "0.0.0.0:4151") -http-client-connect-timeout duration timeout for HTTP connect (default 2s) -http-client-request-timeout duration timeout for HTTP request (default 5s) // https 服务 -https-address string <addr>:<port> to listen on for HTTPS clients (default "0.0.0.0:4152") -tls-cert string path to certificate file -tls-client-auth-policy string client certificate auth policy ('require' or 'require-verify') -tls-key string path to key file -tls-min-version value minimum SSL/TLS version acceptable ('ssl3.0', 'tls1.0', 'tls1.1', or 'tls1.2') (default 769) -tls-required require TLS for client connections (true, false, tcp-https) -tls-root-ca-file string path to certificate authority file // 日志 -log-level value set log verbosity: debug, info, warn, error, or fatal (default INFO) -log-prefix string log message prefix (default "[nsqd] ") -msg-timeout duration default duration to wait before auto-requeing a message (default 1m0s) -max-body-size int 命令消息体大小限制 maximum size of a single command body (default 5242880) -max-msg-size int 单条消息限制 maximum size of a single message in bytes (default 1048576) -max-msg-timeout duration 消息超时时间 touch 命令也不能超过该限制 maximum duration before a message will timeout (default 15m0s) -node-id int snowflake 算法中,生成message 的一部分, 为保证消息的唯一性,多个nsqd 需要不同的nodeid unique part for message IDs, (int) in range [0,1024) (default is hash of hostname) (default 781) -max-rdy-count int 客户端可以批量处理的个数 maximum RDY count for a client (default 2500) -max-req-timeout duration 延时消息,最大可延时时间, 默认不超过1h maximum requeuing timeout for a message (default 1h0m0s) -mem-queue-size int 内存队列大小 number of messages to keep in memory (per topic/channel) (default 10000) -max-channel-consumers int 每个channel 最多有多少个消费者 maximum channel consumer connection count per nsqd instance (default 0, i.e., unlimited) -max-heartbeat-interval duration 客户端的心跳, 默认间隔最大为1分钟 maximum client configurable duration of time between client heartbeats (default 1m0s) -max-output-buffer-size int 输出最大buffer maximum client configurable size (in bytes) for a client output buffer (default 65536) -max-output-buffer-timeout duration 最大buffer 超时,如果时间超过,刷新到客户端 maximum client configurable duration of time between flushing to a client (default 30s) -min-output-buffer-timeout duration 最小buffer 超时时间, 尽量减少高频词写客户端 minimum client configurable duration of time between flushing to a client (default 25ms) -output-buffer-timeout duration 默认的客户端刷新时间, 可以通过 IDENTIFY 协议修改 default duration of time between flushing data to clients (default 250ms) stats 相关 -statsd-address string UDP <addr>:<port> of a statsd daemon for pushing stats -statsd-interval duration duration between pushing to statsd (default 1m0s) -statsd-mem-stats toggle sending memory and GC stats to statsd (default true) -statsd-prefix string prefix used for keys sent to statsd (%s for host replacement) (default "nsq.%s") -statsd-udp-packet-size int the size in bytes of statsd UDP packets (default 508) -e2e-processing-latency-percentile value message processing time percentiles (as float (0, 1.0]) to track (can be specified multiple times or comma separated '1.0,0.99,0.95', default none) -e2e-processing-latency-window-time duration calculate end to end latency quantiles for this duration of time (ie: 60s would only show quantile calculations from the past 60 seconds) (default 10m0s) diskqueue 相关 -max-bytes-per-file int // 磁盘队列单文件大小 默认 100M number of bytes per diskqueue file before rolling (default 104857600) -sync-every int // 默认不超过 2500 个消息将刷一次盘 number of messages per diskqueue fsync (default 2500) -sync-timeout duration // 默认不超过 2s 将刷一次盘 duration of time per diskqueue fsync (default 2s) 消息压缩 -snappy enable snappy feature negotiation (client compression) (default true) -deflate enable deflate feature negotiation (client compression) (default true) -max-deflate-level int max deflate compression level a client can negotiate (> values == > nsqd CPU usage) (default 6) -version print version string ``` ### 总结 总体来说,nsq 的优势在于足够轻量级,消费速度够快,没有单点问题。但缺点也显而易见:消息是不保序的,并且无法做自动的reblance. ![](http://blog.lpflpf.cn/images/weixin_logo.png)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

744 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传