NSQ理解

Python开发环境搭建:从零配置PyCharm与虚拟环境 Python开发环境是编程学习与项目实践的基石,其核心由Python解释器、包管理工具和集成开发环境(IDE)构成。解释器负责执行代码,而pip作为包管理器,用于安装和管理第三方库。在工程实践中,直接使用系统全局环境易导致依赖冲突,因此虚拟环境技术应运而生,它为每个项目创建独立的沙箱,确保依赖隔离与环境纯净。PyCharm作为高效的Python IDE,集成了代码编辑、调试、版本控制等功能,能显著提升开发效率。本文聚焦于Python与PyCharm的安装配置、环境变量设置及虚拟环境管理,通过详解pip镜像源 阅读详情

一、介绍

   NSQ是Go语言编写的,开源的分布式消息队列中间件,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。它基于MIT开源协议发布,由bitly公司开源出来的一款简单易用的消息中间件。

特点:

  1. NSQ提供了分布式的,去中心化,且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和HA(高可用)特性。

2. NSQ支持水平扩展,没有中心化的brokers。内置的发现服务简化了在集群中增加节点。同时支持pub-sub和load-balanced 的消息分发。

3. NSQ非常容易配置和部署

4. NSQ支持延时消息的投递

 

二、核心组件及相关术语

    nsq的几个核心组件包括 nsqd、nsqlookupd、nsqadmin

 

1. nsqd

官方原话:nsqd 是一个守护进程,负责接收,排队,投递消息给客户端

简单的说,真正干活的就是这个服务,它主要负责message的收发,队列的维护。nsqd会默认监听一个tcp端口(4150)和一个http端口(4151)以及一个可选的https端口

总的来说,nsqd 具有以下功能或特性

  • 对订阅了同一个topic,同一个channel的消费者使用负载均衡策略(不是轮询)
  • 只要channel存在,即使没有该channel的消费者,也会将生产者的message缓存到队列中(注意消息的过期处理)
  • 保证队列中的message至少会被消费一次,即使nsqd退出,也会将队列中的消息暂存磁盘上(结束进程等意外情况除外)
  • 限定内存占用,能够配置nsqd中每个channel队列在内存中缓存的message数量,一旦超出,message将被缓存到磁盘中
  • topic,channel一旦建立,将会一直存在,要及时在管理台或者用代码清除无效的topic和channel,避免资源的浪费

这是官方的图,第一个channel(meteics)因为有多个消费者,所以触发了负载均衡机制。后面两个channel由于没有消费者,所有的message均会被缓存在相应的队列里,直到消费者出现

2. nsqlookupd

nsqlookupd是守护进程负责管理拓扑信息。客户端通过查询 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点广播话题(topic)和通道(channel)信息

简单的说nsqlookupd就是中心管理服务,它使用tcp(默认端口4160)管理nsqd服务,使用http(默认端口4161)管理nsqadmin服务。同时为客户端提供查询功能

总的来说,nsqlookupd具有以下功能或特性

  • 唯一性,在一个Nsq服务中只有一个nsqlookupd服务。当然也可以在集群中部署多个nsqlookupd,但它们之间是没有关联的
  • 去中心化,即使nsqlookupd崩溃,也会不影响正在运行的nsqd服务
  • 充当nsqd和naqadmin信息交互的中间件
  • 提供一个http查询服务,给客户端定时更新nsqd的地址目录 

 

3.nsqadmin

官方原话:是一套 WEB UI,用来汇集集群的实时统计,并执行不同的管理任务

总的来说,nsqadmin具有以下功能或特性

  • 提供一个对topic和channel统一管理的操作界面以及各种实时监控数据的展示,界面设计的很简洁,操作也很简单
  • 展示所有message的数量,恩....装X利器
  • 能够在后台创建topic和channel,这个应该不常用到
  • nsqadmin的所有功能都必须依赖于nsqlookupd,nsqadmin只是向nsqlookupd传递用户操作并展示来自nsqlookupd的数据

nsqadmin默认的访问地址是http://127.0.0.1:4171/ 

 

相关术语:

1. Topic 

一个topic就是程序发布消息的一个逻辑键,当程序第一次发布消息时就会创建topic。

2.Channels 

channel组与消费者相关,是消费者之间的负载均衡,channel在某种意义上来说是一个“队列”。每当一个发布者发送一条消息到一个topic,消息会被复制到所有消费者连接的channel上,消费者通过这个特殊的channel读取消息,实际上,在消费者第一次订阅时就会创建channel。

Channel会将消息进行排列,如果没有消费者读取消息,消息首先会在内存中排队,当量太大时就会被保存到磁盘中。

3.Messages

消息构成了我们数据流的中坚力量,消费者可以选择结束消息,表明它们正在被正常处理,或者重新将他们排队待到后面再进行处理。每个消息包含传递尝试的次数,当消息传递超过一定的阀值次数时,我们应该放弃这些消息,或者作为额外消息进行处理。

 

本文由以下文章整理:

https://segmentfault.com/a/1190000009194607

https://mp.weixin.qq.com/s/lrbIx88Z1HwWNTO_5aABJQ

25. NSQ 简介及教程 NSQ 简介及教程 文章目录What is nsqWhy use nsqHow to use nsqExampleInstallTestCaseConsumerProducer What is nsq NSQ is a realtime distributed messaging platform. IntroduceLinks NSQ源码解析(1)–设计理念浅析 NSQ 解析 Why use... 阅读详情

相关推荐

NSQ源码分析(四)——inFlightPqueue和PriorityQueue优先级队列

在Channel结构体中用到了两种优先级队列pqueue.PriorityQueue和inFlightPqueue。 deferredMessages map[MessageID]*pqueue.Item deferredPQ pqueue.PriorityQueue deferredMutex sync.Mutex inFlightMessages map[MessageID]*Message inFlightPQ inFlightPqueue inFlightMut

_____________________________________simanstar____ 379

5、逻辑回归LR推导和分析

1、基本概念 逻辑回归 是一种监督学习分类算法,实现了给定数据集到0,1的一种映射。 逻辑回归的过程 面对一个回归或者分类问题,构造预测函数,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。 损失函数 表征预测值与真实值之间的差异程度,如果预测值与真实值越接近则损失函数应该越小。 结构风险函数 = 经验风险项 + 正则项 其中损失函数为经验风险项的重要组成部分 前半部分为经验风险项,后半部分为正则项。 概率 描述的是在一定条件下某个事件发生的可能性

weixin_45063703的博客 468

雷达系统仿真——非相参累积和相参累积检测

非相参累积和相参累积检测 在雷达回波检测中,在特殊情况下,才会根据单个脉冲来进行检测判决。通常,雷达会从每个目标接收几个到几百个成串脉冲,在做出判决之前,要先对脉冲串进行处理。对脉冲串进行处理的方法有5种: 相参累积(Coherent Integration); 非相参累积(Nocoherent Integration); 二进制累积; 累计检测; 反馈累积器。 1 非相参累积 也叫“检波后累积”,或者“视频累积”(Video Integration),比检波前累积更容易完成,因为不需要保存回波的相位。

little_soldier的专栏 1万+

NSQ系列(一)nsq 介绍

NSQ 介绍 简介 NSQ 是一款 Go 语言编写的开源分布式消息队列中间件,具备非常好的性能、易用性和可用性。 性能方面,采用了分布式可横向扩展的架构,让其适用于超大规模的消息实时处理,能够满足绝大部业务量级的需要; 易用性方面,NSQ 配置和部署都非常的简便,提供了清晰的文档和多语言且功能全面的 SDK,同时还提供了浏览器 nsqadmin、nsqlookupd 等非常好用的易用性组件,nsqadmin 可以实现可视化的管理消息集群; 可用性方面,NSQ 具备非常高质量的工程实现,程序鲁棒性非

会哭的雨@的博客 7967

Android流畅度优化实战:从掉帧定位到布局与渲染调优

在移动应用开发中,性能优化是决定用户体验与留存率的关键环节,其中Android流畅度优化更是核心命题。用户感知的“卡顿”往往并非持续低帧率,而是由于掉帧率波动引发的偶发不流畅。本文从性能优化理论出发,系统讲解如何使用Systrace、CPU Profiler等工具定位掉帧瓶颈,深入分析布局层级过深、过度绘制、对象分配与GC压力等常见诱因。同时结合冷启动耗时、列表滚动掉帧、Bitmap加载等真实工程案例,阐述从应用层到系统层的分级优化策略,并给出低端机适配、异步化改造及线上监控体系搭建的实践方案。内容覆盖布局

weixin_29185493的博客 201

一篇关于轴承故障诊断的综述

在设备的故障检测中,有约30%-40%的设备故障是由轴承故障引起的,因此本文将列举有关检测轴承故障使用到的相关数据集,模型和算法。 数据集 现有的数据集,普遍由固定在电机马达上的两个震动检测器获得,并根据需要,分离震动数据在时域和频域上的特征以供网络模型学习。 不同的数据集,区别在于,检测的马达转速不同,环境不同,取样频率不同,一段样本的时长不同等等 (1)Case Western Reserve University (CWRU) Dataset 该数据集拥有多种数据,测量的时候,通过改变轴承.

weixin_42036144的博客 2万+

分布式实时消息平台NSQ: 整体架构

分布式实时消息平台NSQ- 整体架构 介绍 NSQ是一个基于Go语言的分布式实时消息平台,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。 NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。 术语 Topic: 一个可供订阅的话题,是消息的分类概念。 channel: 一个通道(channel)是消费者订阅了某个话题的逻辑分组. 一个Topic有可以分为多个C

CoLiuRs 2842

无需Root!安卓模拟器+BurpSuite轻松搞定微信小程序抓包

本文详细介绍了如何在不root安卓设备的情况下,使用安卓模拟器和BurpSuite实现微信小程序抓包。通过夜神模拟器降级安卓版本、配置BurpSuite代理及安装证书等步骤,开发者可以轻松绕过微信的证书绑定,高效抓取小程序数据包。文章还提供了常见问题排查和高阶技巧,帮助开发者提升抓包效率。

weixin_29213655的博客 365

NSQ 实现逻辑探秘

topic 中的消息会被复制到多个 channel 中,并将消息推送到其中一个消费这个 channel 的消费者手中。go sdk 中提供的 NewProducer 函数需要提供 nsqd 的地址,因此生产者会直连某个 nsqd,并向其投递消息。如果希望生产也能实现负载均衡,则需要我们自己做进一步的封装,大概逻辑是:向 nsqlookup 获取所有 nsqd 的信息建立多个 producer, 每个 producer 与不同的 nsqd 建立连接。

qq_22548549的博客 1550

NVIDIA驱动装好了,Gazebo为啥还是卡?手把手教你用optirun搞定GPU加速

本文详细解析了NVIDIA驱动安装后Gazebo仍卡顿的原因,并提供三步精准诊断与GPU加速实战方案。通过optirun快速启用GPU加速,解决OpenGL与显示服务器的配置问题,显著提升仿真性能。适用于ROS、PX4等开发环境,帮助用户充分利用显卡性能。

weixin_30379531的博客 465

一个 ABAP 工具,能打印系统里某个用户对 BSP 应用的浏览历史记录

只要一个用户在 SAP ABAP 系统里浏览过 BSP 页面,会留下浏览历史记录。本工具会解析出这些记录,打印出该用户浏览的历史事件,和浏览过的页面名称。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 546

NSQ简介及连接模式

1、 NSQ简介 NSQ是一个实时的分布式的消息处理平台。 主要有以下特点: 支持分布式的拓扑结构,没有SPOF(单点故障) 支持横向水平扩展(没有 brokers 等任何集中式代理) 性能优越,基于推送的低延迟的消息传递模式 结合负载均衡和多路广播类型的消息路由 擅长面向流(streaming)(高吞吐量)和 任务(Job)导向的工作负载 主要是基于内存的(超过高水位线消息将透明的存储到磁盘中) 运行时的服务发现 传输层安全性(TLS) 数据格式不可知 很少的依赖项,容易部署,具有

hero_java的专栏 3899

FPGA和USB3.0通信-USB3.0 PHY介绍

可以和FPGA搭配使用的USB3.0 PHY芯片通过之前的介绍<FPGA和USB3.0通信-USB3.0协议介绍USB3.0 PHY简介首先我们需要了解PHY具体完成哪些工作以及我利...

OpenFPGA的博客 4940

nsq基本使用及理解

NSQ 是一个轻量级、实时分布式消息队列,主要用于以下几种场景:高并发的消息队列处理。分布式系统中,多个服务之间的解耦。任务调度与事件通知。nsqd:消息队列守护进程,处理消息的发布和消费。nsqlookupd:服务发现组件,用于查找可用的 nsqd 实例。消费者:从 nsqd 获取消息并进行处理。生产者:将消息发布到 nsqd。发布消息:通过和发布消息到 NSQ.消费消息:使用创建消费者,监听并处理消息。同步处理:使用来确保多个消息的同步处理,或者在需要批量处理时使用锁(sync.Mutex。

qq_45249945的博客 2043

【Zephyr存储专题】06_存储块设备驱动开发(Nand Flash)

本文介绍了基于Zephyr系统的NAND Flash驱动实现方案,重点阐述了Flash驱动模型的核心架构和关键API设计。

zero的博客 1803

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

nsq理解

核心概念在讨论NSQ如何在实践中使用前,先理解NSQ队列的架构原理是非常值得的。它的设计很简单,可以通过几个核心概念来理解。Topic——一个topic就是程序发布消息的一个逻辑键,当程序第一次发布消息时就会创建topic。Channels——channel组与消费者相关,是消费者之间的负载均衡,channel在某种意义上来说是一个“队列”。每当一个发布者发送一条消息到一个topic,消息会被...

weixin_30834783的博客 190

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

深入理解NSQ的Go客户端实现:go-nsq核心用法解析

NSQ是一个高性能、分布式消息队列系统,而go-nsq是其官方提供的Go语言客户端库。本文将深入解析go-nsq的核心功能和使用方法,帮助开发者快速掌握这一强大的消息队列工具。 ## 核心概念与架构 go-nsq库提供了两个主要组件:Consumer(消费者)和Producer(生产者),它们分别对应消息的消费和生产场景。该库既提供了高级别的封装类型,也保留了底层NSQ协议的通信能力,让开发者

gitblog_00445的博客 593

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

EasyCVR使用NSQ处理消息时topic和channel的理解

EasyCVR 使用 NSQ 进行消息的处理和推送,目前发现对 topic 和 channel 很难理解其使用,官网的解释也是复杂难懂,因此直接写代码进行确认。 首先编写两个消费者,topic 相同,channel 不同,一个是 channel 1 一个是 channel 2,代码如下: package main import ( "fmt" "github.com/nsqio/go-nsq" "log" "os" "os/signal" "syscall"

EasyCVR视频融合云平台的技术博客 359

NSQ源码分析之nsqd

概述 最近想通过观察分析NSQ的源码,来更进一步学习golang,编程嘛,就是多看、多写、多思考,没有捷径。 什么是NSQ 引用官方文档的话:NSQ is a realtime distributed messaging platform designed to operate at scale, handling billions of messages per day. NSQ特性和使用 网上很多介绍NSQ的文章,这里就不再赘述。 文章链接 NSQ的架构 文本源码分析的思路就是根据NSQ的不同功能模块,

Think Different. 881

NSQ 全视图

前段时间,基于对go语言的兴趣,又苦于没有机会实践,于是想研究一些开源框架的源码。而选择NSQ主要是因为在工作中经常需要使用的MQ,比如RabbitMQ或 RocketMQ,因此也萌发了对MQ实现原理的兴趣。 NSQ的一些介绍大家可以在百度或者官网中查看,我这就不赘述了。 下面的逻辑图是基于我对NSQ源码的研究而画,主要是NSQD和Lookupd。如果有不对的地方,欢迎大家留言指出。后期将会...

H_L_S的专栏 423

消息长度_nsq消息队列源码分析

nsq的源码比较简单,值得一读,特别是golang开发人员,下面重点介绍nsqd,nsqd是nsq的核心,其他的都是辅助工具,看完这篇文章希望你能对消息队列的原理和实现有一定的了解。nsqd是一个守护进程,负责接收,排队,投递消息给客户端,并不保证消息的严格顺序,nsqd默认监听一个tcp端口 (4150) 和一个http端口 (4151) 以及一个可选的https端口对订阅了同一个topic的同...

weixin_39539807的博客 415

nsq阅读概述

NSQ是Go语言编写的,开源的分布式消息队列中间件,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。 最近又重新仔细学了一下Go语言,看完基础之后,想过段时间再来看Go语言的源码,但是又不想马上放下Go,于是从GitHub上找来nsq...

m0_37343985的博客 235

go -nsq 生产者消费者

nsq 生产者 package main import ( "bufio" "fmt" "os" "strings" "github.com/nsqio/go-nsq" ) var producer *nsq.Producer // 初始化生产者 func initProducer(str string) (err error) { config := nsq.NewConfig() producer, err = nsq.NewProducer(str, config) if e

weixin_43781374的博客 602

NSQ使用详解 (MAC端 + Linux端)

关于nsq的功能和特性,本文中不再赘述。 对nsq完全没有了解的同学,可以读一下nsq官方文档,英文阅读能力有限的同学可以阅读翻译后的版本。但是翻译后的quick_start(快速开始)部分的代码有点问题。 $ curl -d 'hello world 1' 'http://127.0.0.1:4151/put?topic=test' 应该改成 $ curl -d 'hello w...

路漫漫其修远兮 1626

nsq系统架构

go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin 发表回复 上一篇go语言nsq源码解读-基本介绍  介绍了最基本的nsq环境搭建及使用。在最后使用时,我们用到了几个命令:nsqlookupd、nsqd、nsqadmin、curl及nsq_to_file,并看到用curl命令写入的几个”hello world”被nsq_to_file命令保存在了硬盘文

kai_ding的专栏 4171

three components of nsq

NSQ is composed of 3 daemons nsqd is a daemon that receives, saves and transmits messages to the client. nsqlookupd is the topological information for management, maintains the status of all nsqd, and provides a daemon that eventually discovers the servi

qq_38963393的博客 153
上一篇: Docker容器挂载数据卷出现Permission denied权限问题的解决办法
下一篇: Golang使用NSQ示例
思维的深度
博客等级 码龄11年 2万+粉丝 391原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值