0.相關參考文章:
《nsq系統架構》
《NSQ消息隊列》
1.啟動命令
①nsqlookupd
②nsqd -lookupd-tcp-address=xxx.xxx.xxx.xxx:4160 -broadcast-address=xxx.xxx.xxx.xxx -max-msg-size=50000000 -data-path=your save data path
這里需要注意:xxx.xxx.xxx.xxx為對外ip地址
-broadcast-address:如果需要外網訪問,必須設置這個參數為對外ip地址。(當在同一台機器上開多個nsqd的情況下需要設置成不一樣的)
-max-msg-size:設置單條消息的最大字節數,如果消息超過這個字節數將被丟棄。
-data-path:數據存儲路徑(當在同一台機器上開多個nsqd的情況下需要設置成不一樣的)
③nsqadmin -lookupd-http-address=xxx.xxx.xxx.xxx:4161
2.端口相關
①外網訪問必須開放4150(TCP Producer),4151(HTTP Producer),4160,4161,4171(管理頁面)四個端口
②nsqlookupd 監聽兩個端口:
4160 TCP 用於接收nsqd的廣播,記錄nsqd的地址以及監聽TCP/HTTP端口等。
4161 HTTP 用於接收客戶端發送的管理和發現操作請求(增刪話題,節點等管理查看性操作等)。當Consumer進行連接時,返回對應存在Topic的nsqd列表。
③nsqd監聽兩個端口:
4151 HTTP Producer使用HTTP協議的curl等工具生產數據;Consumer使用HTTP協議的curl等工具消費數據;
4150 TCP Producer使用TCP協議的nsq-j等工具生產數據;Consumer使用TCP協議的nsq-j等工具消費數據;
④nsqadmin監聽一個端口
4171 HTTP 用於管理頁面
使用地址http://xxx.xxx.xxx.xxx:4171打開管理頁面
3.下面的示意圖清晰的展示了整個NSQ架構的端口關系:
(1)單點
流程說明:
①Consumer1首先使用HTTP連接nsqlookupd的4161端口,獲取Topic1相關nsqd的TCP4150端口。
②使用TCP連接到nsqd的4150端口,並生成對應的Channel1;
特別需要注意的是,當所需Topic不變的情況下,就算nsqlookupd和nsqadmin進程都殺掉,也不影響nsqd的生產和消費。
(2)集群
說明:
①當開啟多個nsqd才存在集群的意義。
②盡量避免多個nsqd存在相同的Topic。如果多個nsqd真的存在相同的Topic的情況下,通過nsqlookupd將會返回所有這個Topic的IP並都能進行讀取處理。(使用nsq-j進行過測試驗證。)
4.Channel相關
其實主要有兩個點:
①多個Consumer消費同一個Topic和同一個Channel:將會輪訓,按序分配給就緒(當前無處理任務)的消費者。因此,多消費者情況下,無法保證有序執行。(像上面動圖的"metrics"所示)
②多個Consumer消費同一個Topic和不同的Channel:將會將同一個數據同時到不同的Channel中。(像上面動圖的三個Channel所示)
注意:Consumer與Topic沒有直接聯系,而是通過具體的Channel接受數據。如果Consumer退出,Channel不會自動刪除。 如果不再需要,需要通過http端口刪除Channel,否則很可能會導致磁盤空間不足。
以上。