【kafka】Golang實現分布式Masscan任務調度系統

要求:

        輸出兩個程序,一個命令行程序(命令行參數用flag)和一個服務端程序。

        命令行程序支持通過命令行參數配置下發IP或IP段、端口、掃描帶寬,然后將消息推送到kafka里面。

服務端程序:

  1. 從kafka消費者接收掃描任務信息
  2. 通過調用masscan啟動探測任務,獲取進度和結果信息,進度寫入Redis,結果信息寫入Kafka。
  3. 要求對啟動任務、kafka、整理流程進行封裝。
  4. 要求啟動2個server端,通過命令行程序下發2個不同網段,可以均勻的分配到2個server上面執行完成。

測試要求:

  1. 啟動兩個server端程序。
  2. 通過命令行程序下發兩個任務,IP不一樣。
  3. 看server端程序日志,是否均勻的掃描了兩個任務。

     

前置準備:

        安裝docker

思路:

1. 系統架構設計

采用生產者-消費者模式:

  • 命令行客戶端作為生產者,將掃描任務發布到Kafka
  • 兩個服務端實例作為消費者,從Kafka獲取任務并執行

2. 關鍵組件設計

  1. 任務表示

    • 使用JSON格式表示掃描任務,包含:
      • IP范圍(單個IP或CIDR格式)
      • 端口范圍
      • 掃描帶寬限制
      • 任務狀態
      • 進度信息
  2. Kafka設計

    • 創建一個主題(如scan-tasks
    • 使用單個分區確保任務順序性(或根據需求設計分區策略)
    • 考慮使用消費者組實現兩個服務端的負載均衡
  3. Redis設計

    • 存儲任務進度信息
    • 使用Hash結構存儲每個任務的進度百分比
    • 設置適當的TTL防止數據無限增長
  4. 服務端負載均衡

    • 兩個服務端加入同一個Kafka消費者組
    • Kafka會自動將任務均勻分配給兩個消費者

3. 執行流程

  1. 客戶端流程

    • 解析命令行參數(IP范圍、端口、帶寬)
    • 驗證輸入格式
    • 創建Kafka生產者
    • 將任務發布到Kafka主題
  2. 服務端流程

    • 初始化Kafka消費者(加入消費者組)
    • 初始化Redis連接
    • 循環消費任務:
      a. 從Kafka獲取任務
      b. 更新Redis中任務狀態為"running"
      c. 調用masscan執行掃描:
      • 構造masscan命令行參數
      • 啟動masscan進程
      • 監控進程輸出和退出狀態
        d. 實時解析masscan輸出,更新Redis中的進度
        e. 掃描完成后:
      • 更新Redis中任務狀態為"completed"
      • 將完整結果發布到另一個Kafka主題(如scan-result

4. 關鍵技術點

  1. Masscan集成

    • 使用exec.Command啟動masscan進程
    • 實時解析masscan的標準輸出和錯誤輸出
    • 根據輸出計算掃描進度
  2. 錯誤處理

    • 處理無效IP格式
    • 處理masscan執行失敗
    • 處理Kafka/Redis連接問題
  3. 日志記錄

    • 記錄服務端操作日志
    • 記錄任務執行狀態變化
    • 記錄錯誤信息

5. 測試驗證思路

  1. 啟動兩個服務端實例
  2. 使用客戶端提交兩個不同網段的任務
  3. 觀察:
    • 兩個服務端的日志輸出
    • 任務是否被均勻分配(一個服務端處理一個任務)
    • 掃描進度是否正確更新
    • 最終結果是否正確輸出

6. 擴展考慮

  1. 任務優先級

    • 可以在任務中添加優先級字段
    • 服務端根據優先級處理任務
  2. 任務超時

    • 添加任務超時機制
    • 超時后重新分配任務
  3. 結果存儲

    • 可以考慮將結果存入數據庫而不僅是Kafka
  4. 水平擴展

    • 設計支持更多服務端實例的擴展方案

這個設計實現了基本的分布式掃描任務調度系統,核心是利用Kafka的消息隊列特性實現任務分發,通過消費者組機制實現負載均衡,使用Redis作為共享狀態存儲。

實現:

        項目結構:
        

         kafka:
         consumer   
        
package kafkaimport ("context""errors""fmt""github.com/IBM/sarama""log""sync"
)type MessageHandler func([]byte) errortype SaramaConsumer struct {client    sarama.ConsumerGrouphandlers  map[string]MessageHandlerready     chan boolctx       context.Contextcancel    context.CancelFuncconsuming sync.WaitGroupmemberId  stringgroupId   string
}func NewKafkaConsumer(brokers []string, groupId string, topic []string) (*SaramaConsumer, error) {config := sarama.NewConfig()config.Version = sarama.V2_5_0_0                      // 使用適當的 Kafka 版本config.Consumer.Offse

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84565.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84565.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84565.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ARM 和 x86_64是什么關系

什么是 ARM 和 x86_64? 它們都是 CPU 指令集架構(ISA) 指令集架構(Instruction Set Architecture)就是: CPU 能夠理解和執行的“語言”和“命令格式”。 類比解釋:指令集就像“語言” 類比對…

nginx配置中有無‘‘/’’的區別

在Nginx配置中,location指令末尾的斜杠/和proxy_pass目標地址末尾的斜杠/組合使用會產生顯著差異。以下是四種組合的區別詳解: ??核心區別對比表?? 配置方案匹配規則請求URI傳遞邏輯實際轉發效果示例location /api/ proxy_pass ...701/僅匹配/api/…

系統安全之身份認證

本篇我們對常用的身份認證協議做簡要的梳理,包括主流的 HTTP 相關認證協議以及證書密鑰對、新興的 WebAuthn 認證。 HTTP 協議認證 RFC 7235 中定義了 HTTP 協議的認證框架,要求在支持 HTTP 協議的服務器,如果訪問服務的身份驗證失敗&#…

部署http服務

使用flask搭建一個http服務,能夠通過本地的另外一個終端訪問對應接口,拿到服務端的計算結果 服務端: 創建一個test_http_dtw.py并運行 from flask import Flask, request, jsonifyapp Flask(__name__)# 示例分析函數 def analysis(data):…

WLAN 技術指南:從入門到原理

文章目錄 目錄 文章目錄 前言 一.WLAN 基本概念 有線側組網概念 AP-AC 組網方式 AC 連接方式 CAPWAP 協議 無線側組網概念 無線信道 ?編輯 BSS/SSID/BSSID ?編輯 VAP ESS 二.WLAN 組網架構 基本的 WLAN 組網架構 四.WLAN 工作原理 AP 上線 AP 獲取 IP 地址階段 CAP…

語言學習專用AI播放器推薦:LLPlayer

學語言,經常會看大量的比較優秀的視頻材料,那么推薦一款語言學習利器,極大提高生產力。 LLPlayer 是一款專為語言學習者設計的獨特視頻播放器。 它具有許多重要功能,例如可同時顯示文本字幕和位圖字幕、使用 OpenAI Whisper 自動…

mysql 關聯表查詢,索引失效

來源表: ##示例 CREATE TABLE order_wide (order_id varchar(33) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 訂單ID,member_id int(11) DEFAULT NULL COMMENT 用戶ID,content varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 訂單標簽,PRIMARY KEY (order_…

Oracle DG庫手動注冊歸檔日志的兩種方法

Oracle DG庫手動注冊歸檔日志的兩種方法 注冊單個歸檔日志文件注冊多個歸檔日志文件有的時候由于網絡或各種原因,Oracle DG庫服務器上可能缺少部分歸檔日志文件,導致DG庫的MRP進程一直處于WAIT_FOR_GAP狀態。 此時我們可以手動從主庫或其他DG拷貝歸檔日志到當前DG服務器,并…

中小型VUE3項目創建流程相關命令tips

開新項目因為距離上次初始化時間太過久遠,忘記初始化命令的有多少? 不得已簡要記錄一下流程 1. 使用vite構建新項目 1.1 構建 npm create vite@latest my-vue-app --template vue1.2 安裝依賴 npm install1.3 啟動 npm run dev參考文檔 2. 添加需要的插件 2.1 準備工作…

Web后端開發(請求、響應)

目錄 請求: Postman: 簡單參數: 實體參數: 數組集合參數: 日期參數: Json參數: 路徑參數: 響應: 請求響應: 請求:獲取請求數據 響應&a…

Excel大廠自動化報表實戰(互聯網金融-數據分析周報制作上)

這是Excel大廠自動化報表實戰第二期--互聯網金融-數據分析周報制作上 數據資源已經與這篇博客捆綁,有需要者可以下載通過網盤分享的文件:2.4自動化報表-8月成交數據.xlsx,2.4自動化報表-8月獲客數據.csv等2個文件 鏈接: https://pan.baidu.co…

HTTP 網絡協議演進過程

網絡協議演進問題,涉及到HTTP版本之間的連接復用優化和協議升級(特別是從HTTP/2到HTTP/3)的核心變化。我們以 HTTP/1.0 到 HTTP/2.0,再到 HTTP/3.0 的演進順序來詳細解釋它們在通道復用(TCP/QUIC)上的優化和…

Xsens動捕和Manus數據手套在元宇宙數字人制作中提供解決方案

硬件連接與數據傳輸 Xsens與Manus集成:Xsens慣性動作捕捉系統負責捕捉人體的身體動作,Manus數據手套專門精確捕捉手指動作。Xsens動捕套裝上有接口或無線連接模塊,可與Manus手套配對和傳輸數據,將身體與手指跟蹤數據結合。 Face…

【Java開發日記】簡單說一說使用 Netty 進行 Socket 編程

目錄 什么是 Netty 對比Netty和傳統的Socket 傳統Socket編程服務端 傳統Socket編程客戶端 Netty環境搭建 先創建出來一個項目 Netty服務端程序 Netty客戶端程序 Channel Channel分類 為什么選擇Netty 什么是 Netty Netty是由JBOSS提供的一個java開源框架&#xff0c…

目標檢測任務的評估指標mAP50和mAP50-95

mAP50 和 mAP50-95 是目標檢測任務中常用的評估指標,用于衡量模型在不同 交并比(IoU)閾值 下的平均精度(Average Precision, AP)。它們的區別主要體現在 IoU 閾值范圍 上。 ? 1. mAP50(mean Average Prec…

COHERENT XPRV23光電接收器控制軟件

COHERENT XPRV23光電接收器控制軟件

執行應用共享內存空間 同步QT進行快速捕獲數據流

引言:本文章針對驅動的應用app,例如sensor data內容的獲取,顯示到QT的一種辦法,共享內存。舉例子,這是一個常見需求,比如攝像頭采集進程與 GUI 顯示進程分離,通過共享內存傳輸圖像,避…

opencl的簡單介紹以及c++實例

🧩 一、什么是 OpenCL? OpenCL(Open Computing Language) 是一個用于異構計算的開放標準,由 Khronos Group 提出和維護。它允許你在各種計算設備上(如 CPU、GPU、DSP、FPGA)并行運行代碼&#…

ThingsCloud事物云平臺搭建-微信小程序

ThingsCloud云平臺與微信小程序設計 本文主要是介紹ThingsCloud云平臺的搭建及微信小程序與app的使用。 當前文章是作為一個通用案例,介紹如何快速使用 ThingsCloud云平臺 以及 利用 ThingsCloud云平臺平臺的框架快速設計手機APP和微信小程序。 可以快速讓硬件接入,實現硬件…

2024 一帶一路暨金磚國家職業技能大賽(金磚國家未來技能和技術挑戰賽)

2024 一帶一路暨金磚國家職業技能大賽(金磚國家未來技能和技術挑戰賽任務書) 1 參加比賽的形式:2 項目階段簡介:3 項目階段和所需時間:4 第一階段:職業素養與理論技能4.1 項目 1.職業素養4.2 項目 2.法律法…