NSQ系列(一):概述和架構

關於NSQ

NSQ是Go開發的,比較輕量的一款MQ。公司很多項目使用了NSQ作爲消息隊列,也藉此瞭解下NSQ。
先說下NSQ的幾個特性,

  • 分佈式部署,沒有單點問題
  • 支持水平擴容
  • 消息優先存儲在內存(超過限制後可以保持在磁盤)
  • Consumer可以動態發現Producer

架構

集羣兩個主要角色:nsqd和nsqlookupd。

nsqd

nsqd負責提供集羣的主要功能,一個nsqd實例同時處理多個數據流。與Kafka類似,一個數據流也可以被稱爲一個topic。NSQ還有一個Channel的概念,類似於Kafka的ConsumerGroup,一個topic可以對應多個Channel,不同的是,每個Channel都存儲一份完整的數據(完整的未消費的數據),而Kafka則是存儲同一份數據,通過Offset來區分不同的ConsumerGroup的消費進度。
Consumer需要指定一個Channel才能消費數據。
一個Channel通常會與多個Consumer Client建立連接。當channel中存在待處理的消息時,Channel會從多個Client中隨機選擇一個進行推送,整個流程如下圖所示,
NSQ架構圖
概括來說,一條消息從Topic廣播到Channel(每個Channel都會收到一份消息),然後再從Channel分發到Consumer。

nsqlookupd

nsqlookupd主要提供服務發現功能,Consumer可以通過nsqlookupd來知道它要消費的Channel數據分佈在哪些nsqd實例。

交互

每個nsqd都會與nsqlookupd建立一個TCP長連接,並且定期向nsqlookupd上報自己的狀態信息,主要包括自己當前處理那些Topic以及對應Topic包含哪些Channel。

參考資料

  • https://nsq.io/overview/features_and_guarantees.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章