歡迎訪問昆山寶鼎軟件有限公司網站! 設為首頁 | 網站地圖 | XML | RSS訂閱 | 寶鼎郵箱 | 后臺管理
?

新聞資訊

MENU

軟件開發知識

ChaperoneServic 勞務派遣信息管理系統 eWorker這5個子項目

點擊: 次  來源:寶鼎軟件 時間:2017-07-29

原文出處: 朱小廝

概述

Kafka端到端審計是指出產者出產的動靜存入至broker,以及消費者從broker中消費動靜這個進程之間動靜個數及延遲的審計,以此可以檢測是否有數據丟失,是否有數據反復以及端到端的延遲等。

今朝主要調研了3個產物:

  1. Chaperone (Uber)
  2. Confluent Control Center(非開源,收費)
  3. Kafka Monitor (LinkedIn)

對付Kafka端到端的審計主要通過:

  1. 動靜payload中內嵌時間戳timestamp
  2. 動靜payload中內嵌全局index
  3. 動靜payload中內嵌timestamp和index

內嵌timestamp的方法

主要是通過配置一個審計的時距離斷(這里稱之為time_bucket_interval,可以配置幾秒可能幾分鐘,這個可以自界說), 每個timestamp城市被分派到相應的桶中,算法有:

  1. timestamp – timestamp%time_bucket_interval
  2. floor((timestamp /15)*15)

這樣可以得到相應time_bucket的起始時間time_bucket_start,一個time_bucket的區間可以記錄為[time_bucket_start, time_bucket_start+time_bucket_interval]。

每發送可能消費一條動靜可以按照動靜payload內嵌的時間戳,分派到相應桶中,然后對桶舉辦計數,之后舉辦存儲,簡樸的可以存儲到,好比:Map<long time_bucket_start, long count>之中。

內嵌index的方法

這種方法就更容易領略了,對付每條動靜都分派一個全局獨一的index,假如topic及相應的partition牢靠的話,可覺得每一個topic-partition配置一個全局的index,當有動靜發送到某個topic-partition中,那么首先獲取其topic-partition對應的index, 然后內嵌到payload中,之后再發送到broker。消費者舉辦消費審計,可以判定出哪個動靜丟失,哪個動靜反復等等。假如要計較端到端延遲的話,還需要在payload中內嵌timestamp以作相應的計較。

下面來扼要闡明下三個產物。

Chaperone

github地點:https://github.com/uber/chaperone
官方先容(中文):http://www.infoq.com/cn/news/2016/12/Uber-Chaperone-Kafka
官方先容(英文):https://eng.uber.com/chaperone/

Chaperone進動作靜端到端的校驗主要是基于message內置timestamp實現的,按照timestamp將message分派到差異的bucket中。之后就是對這個bucket中的動靜舉辦計數等一系列的audit操縱,然后將這個audit操縱之后的信息auditMessage生存起來,auditMessage的內容:

  • topicName:被audit的topic
  • time_bucket_start:bucket的起始時間
  • time_bucket_end
  • metrics_count:time_bucket中的個數
  • metrics_mean_latency, metrics_p95_latency, metrics_p99_latency,metrics_max_latency:延遲
  • tier
  • hostname
  • datacenter
  • uuid
  • 留意這里的latency的計較法則是:currentTimeMillis – (timestamp*1000)。

    Chaperone的架構

     ChaperoneServic 勞務調派信息打點系統 eWorker這5個子項目

    Chaperone的整體架構分為:AuditLibrary, ChaperoneService, ChaperoneCollector和WebService, 它們會收集數據,并舉辦相關計較,自動檢測出丟失和延遲的數據,并展示審計功效。

    從Chaperone的github上的源碼來看:
    Chaperone分為ChaperoneClient, ChaperoneCollector, ChaperoneDistribution, ChaperoneServiceController, ChaperoneServiceWorker這5個子項目。比擬著上面的架構圖來闡明。

    1. ChaperoneClient對應著AuditLibrary,主要是用來audit message的庫(library),并不以實際處事運行,可以在Producer可能Consumer客戶端中挪用,默認利用10mins的轉動時間bucket來不絕地從每個主題收集動靜。然后發送到kafka的chaperone-audit這個topic中。官方文檔先容說AuditLibrary會被ChaperoneService, ChaperoneCollector和WebService這三個組件所依賴,但代碼中來看并非完全如此,略有進出。

    2. ChaperoneDistribution可以忽略

    3. ChaperoneServiceController和ChaperoneServiceWorker對應架構圖中的ChaperoneService,ChaperoneServiceController主要用來檢測topics并分派topic-partitions給ChaperoneServiceWorker用以審計(audit)。ChaperoneServiceWorker主要是audit message的一個處事。

  • ChaperoneServiceWorker回收scala語言編寫,內部又將ChaperoneClient可能說AuditLibrary又從頭用Scala實現了一番,軟件開發,并富厚了一下應用,好比回收hsqldb存儲數據,zk存取offsets來實現WAL(預寫式日志,詳細可見下段先容)
  • Chaperone認為message中內嵌timestamp是十分必需的,可是從ChaperoneServiceWorker的代碼來看動靜沒有timestamp也能運行,勞務派遣管理系統,當動靜沒有時間戳,那么會記錄noTimeMsgCount,Chaperone先容會有一個牛逼的算法來闡明動靜中的timestamp(其實就是讀打動靜的開頭部門,而不是全部整條動靜,雷同報文截斷理會,下面也有涉及先容),假如理會timestamp失敗,會記錄malformedMsgCount。
  • 4. ChaperoneCollector對是用來讀取audit的數據,然后耐久化操縱,默認存入mysql中,看代碼也可選存入redis中。

    5. 源碼中沒有WebService這個對象,預計是uber內部的web系統,讀取下mysql中的內容展示到頁面罷了。

    排列三305组选前后关系 浙江6 1开奖结果走势图 1分快3稳赚规律 北京快乐8在哪可买 腾讯分分彩分析app软件 股票行情600415 山西省体彩11选五走势图 甘肃十一选五来开奖号 湖北11选五前三直遗漏 股票配资监管相 北京28哪个网站开奖