8億兒童鉛中毒 聯合國:全球1/3孩子血裡有高濃度鉛

摘錄自2020年7月30日自由時報報導

聯合國與環保組織「Pure Earth」在一份大規模健康危機報告中警告,目前全世界有多達8億兒童正在遭受經由水和空氣感染的「鉛中毒」。聯合國兒童基金會(UNICEF)說明,據估計,每3個孩子就有1個血液中含有高濃度鉛,需採取立即的行動以防止對其神經或生長造成長期傷害。

鉛中毒問題目前在南亞地區極為普遍,可能原因為露天熔礦爐、油漆、汽油等,許多國家的地下鉛管線甚至可能影響飲用水的品質。鉛中毒目前已被證實會影響兒童的行為、認知、說話,進而在長大後可能會有腎臟損害、心血管疾病等問題。

聯合國報告指出,這種毒素主要源於未經回收或處理不善的汽車電池,在一些鉛中毒最為嚴重的國家,汽車數量自2000年開始暴增。

污染治理
國際新聞
鉛中毒
兒童

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

日本防疫、核安難兩全 民眾與科學家齊倡停止核電運轉

文:宋瑞文(媽媽監督核電廠聯盟特約撰述)

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

日本廣島法院宣判 擴大認定核爆「黑雨」受害者

摘錄自2020年7月29日中央社報導

美國於二戰末期對日本投下原子彈迄今已近75年。日本廣島地方法院今天(29日)做出罕見判決,擴大認定核彈倖存者。法新社報導,廣島地方法院裁決,84名原告都應獲得給予核彈攻擊受害者的醫療福利。

在1945年8月6日廣島核爆後,若干地區降下放射性物質「黑雨」。日本政府在二戰後為事發時位於這些地區的民眾提供免費醫療照護,上述原告事發時不在被指定的地區,但淋到「黑雨」,他們主張自己遭受的健康衝擊與政府認定地區內受害人相似。

日本放送協會(NHK)報導,廣島地方法院審判長高島義行在庭上表示:「醫療文件顯示,這些居民經歷的疾病據信與核彈有關,這符合認定被爆者的法律要件。」對於多年來主張自己也受苦於核彈攻擊的人士而言,這場官司也具象徵性意義。

污染治理
公害污染
國際新聞
原子彈
核爆

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

玩轉華為物聯網IoTDA服務系列三-自動售貨機銷售分析場景示例

場景簡介

       通過收集自動售貨機系統的銷售數據,EI數據分析售貨銷量狀況。

        該場景主要描述的是設備可以通過MQTT協議與物聯網平台進行交互,應用側可以到物聯網平台訂閱設備側變化的通知,用戶可以在控制台或通過應用側接口創建數據轉發規則,把設備上報的屬性轉發給其他華為雲服務。

        核心知識點:產品模型、編輯碼插件、訂閱推送、屬性上報、MQTT協議、數據轉發規則。

場景流程

流程解釋:

        

  • 1、創建自動售貨機產品:物聯網平台以產品為粒度管理批量設備。用戶可以通過平台提供的API接口或控制台創建產品。

  • 2、上傳產品模型:產品模型是定義一種設備的基本屬性和命令。產品模型可以通過控制台,也可以導入公共產品庫的模型。該場景沒有編解碼插件,是因為設備是基於安卓操作系統開發的,能夠通過MQTT協議與平台進行交互。

  • 3、批量註冊自動售貨機設備:平台提供了應用側API接口可以註冊設備,也可以通過控制台批量註冊。註冊設備時獲取的設備ID,是設備側與平台交互的唯一標識。

  • 4、創建自動售貨機設備狀態變化的訂閱:售貨管理系統可以在平台創建設備變化的通知訂閱,需要把callback url即應用回調地址傳給平台,平台後續會推送通知到該url。

  • 5、設備建鏈:MQTT設備是指通過MQTT協議,不論是集成了華為IoT Device SDK,還是原生MQTT協議接入,只要是json數據格式傳輸給平台,平台就無需使用編解碼插件。如果是二進制上傳,則需要先做編解碼插件的開發。MQTT是長連接,需要先建鏈才能進行數據傳輸,可以通過安全加密方式8883端口接入(推薦),也可以通過非安全加密方式1883端口接入。

  • 6、推送自動售貨機設備激活通知:平台會根據之前應用訂閱的回調地址,把自動售貨機設備上線的通知類型通過HTTP/HTTPS推送回去。

  • 7、創建數據轉發規則:售貨管理系統可以通過API接口創建規則,也可以通過控制台創建,指定過濾指定的屬性,給指定的通道轉發數據。

  • 8、開通DIS通道/MRS服務:華為公有雲上有豐富的SaaS服務和PaaS服務,供您結合自己的業務需要進行組合使用。DIS服務提供高效採集、傳輸、分發能力,支持多種IoT協議,可以開通該服務,通過IoTDA規則引擎,把自動售貨機設備的數據轉發給DIS,然後再利用諸如MRS服務,實現自動售貨銷量狀況數據分析。

  • 9、自動售貨機屬性上報:設備側可以通過SDK或MQTT原生協議接入平台,屬性上報銷售信息。這裏值得注意的是,設備側上報的數據,是通過屬性上報,與消息上報最大的區別在於是否經過產品模型。屬性上報的內容與格式都要跟產品模型定義保持一致。具體概念介紹可以參閱“物模型”。

  • 10、按規則數據轉發:平台收到設備上報的屬性后,規則引擎會進行過濾(不論屬性還是消息,平台都會做規則過濾),把設定好的屬性值轉發到指定的DIS通道,然後再通過DIS的接口,由MRS去消費DIS的數據,實現對銷量的分析。

最佳實踐

場景說明

物聯網解決方案中,作為數據主體的“物”可能數量會非常大,產生的數據已經無法通過傳統的數據處理服務進行處理。如何分析與利用這龐大的物聯網設備數據對物聯網企業來說又是一個新的挑戰。

華為雲物聯網平台提供規則引擎能力,支持將數據上報的數據轉發至華為雲其他雲服務,可實現將海量數據通過數據接入服務(DIS)轉發至MapReduce服務(MRS),對數據進行處理后再由數據可視化服務(DLV)讀取數據呈現為可視化報表,實現數據的一站式採集、處理和分析。

在本示例中,我們實現下述場景:

自動售貨機每次銷售商品後上報銷售商品種類、數量、時間和所屬區域到物聯網平台,物聯網平台將數據通過數據接入服務轉發至MapReduce服務,MapReduce服務處理數據並寫為統計文件,數據可視化服務從統計文件讀取數據展現為四個維度的銷售報表。

創建MapReduce集群

創建集群,用於存儲和處理DIS轉儲的數據。

  1. 登錄華為雲官方網站,訪問MapReduce服務。

  2. 單擊“立即購買”,創建集群,以下配置僅為樣例。

    注:下圖以新版自定義購買界面為例,需要在“購買集群”界面點擊右上角的“點擊體驗新版”,然後選擇“自定義購買”。

參數名稱

說明

軟件配置

當前區域

保持默認。

集群名稱

自定義或保持默認。

集群版本

保持默認。

集群類型

分析集群。組件勾選Spark,系統會自動勾選Hive和Tez。“Hive使用外部數據源存儲元數據”保持關閉。

Kerberos認證

關閉。

用戶名

固定為“admin”不可修改。

密碼

自定義。

確認密碼

硬件配置

計費模式

按實際使用需求選擇,本示例中選擇“按需計費”。

網絡配置

全部保持默認。

實例

為節省實驗費用,可修改分析Core的實例數量為1,其餘保持默認值。密碼自定義。

高級配置均保持默認。

3.集群創建成功后,等待15到30分鐘,集群狀態變更為“運行中”則表示創建成功。

創建OBS桶

  1. 登錄華為雲官方網站,訪問對象存儲服務。

  2. 單擊“管理控制台”進入對象存儲服務管理控制台。

  3. 單擊頁面右上角的“創建桶”,根據需求選擇桶規格后,單擊“立即創建”。

創建數據接入通道和轉儲任務

創建通道並配置轉儲任務,實現將設備管理服務傳入DIS的數據轉發至MRS。

  1. 登錄華為雲官方網站,訪問數據接入服務。

  2. 單擊“立即購買”,購買接入通道,以下配置僅為樣例。

參數名稱

說明

區域

保持默認。

通道名稱

自定義或保持默認。

通道類型

保持默認值“普通”。

分區數量

按需填寫。

生命周期

源數據類型

選擇“JSON”。

自動擴縮容

保持關閉。

Schema開關

高級配置

保持默認。

3.通道購買成功后,進入DIS控制台接入管理 > 通道管理”頁面。

4.單擊需要查看的通道名稱,進入所選通道的管理頁面,選擇“轉儲管理”頁簽。

5.單擊“添加轉儲任務”按鈕。

6.在彈出的“添加轉儲任務”頁面配置轉儲相關配置項。

參數名稱

說明

源數據類型

默認為通道源數據類型

轉儲服務類型

選擇“MRS”。

任務名稱

自定義,如“iot_to_mrs”。

轉儲文件格式

選擇“Text”。

MRS集群

選擇已創建成功的MRS集群。

HDFS路徑

選擇轉儲文件要存儲的路徑,建議選擇“/user”。

轉儲文件目錄

自定義轉儲文件存放的文件夾名稱,本示例中為“temp”。

偏移量

選擇“最新”。

數據轉儲周期

本示例中修改為“60”。

數據臨時桶

選擇已創建的OBS桶。

數據臨時目錄

自定義,本示例中為“temp”。

7.單擊“立即創建”。

配置設備接入服務

在設備接入服務中創建產品模型、註冊設備並設置數據轉發規則,實現當設備上報數據時將數據轉發至DIS。

  1. 登錄華為雲官方網站,訪問設備接入服務。

  2. 單擊“立即使用”進入設備接入控制台。

  3. 單擊規則 > 創建規則 > 數據轉發”,首次創建對接到DIS服務的規則時,平台會根據對接的雲服務和區域彈出對應的雲服務訪問授權窗口。

4.單擊左側導航欄的“產品”,單擊右上角下拉框,選擇新建產品所屬的資源空間。

注:本文中使用的產品模型和設備僅為示例,您可以使用自己的產品模型和設備進行操作。

5.單擊右上角的“創建產品”,創建一個基於MQTT協議的產品,填寫參數后,單擊“確認”。

基本信息

產品名稱

自定義,如MQTT_Device

協議類型

選擇“MQTT”

數據格式

選擇“JSON”

廠商名稱

自定義

功能定義

選擇模型

請參考步驟6導入模型即可。

所屬行業

根據實際情況進行填寫。

設備類型

6.在功能定義頁面,單擊“上傳模型文件”,單擊Profile.zip,獲取產品模型文件樣例。

7.進入設備 > 設備註冊”頁面,單擊“註冊設備”,參考下錶填寫參數。

參數名稱

說明

所屬產品

選擇在步驟5中創建的產品。

設備標識碼

設備唯一物理標識,如IMEI、MAC地址等,用於設備在接入物聯網平台時攜帶該標識信息完成接入鑒權。

  • 原生MQTT設備:自定義,英文字母和数字的組合字符串。通過註冊成功後生成的“設備ID”(與設備標識碼一一對應)和“設備密鑰”接入平台。

  • NB-IoT設備、集成SDK的設備:NB-IoT設備上的IMEI或MAC地址。設備通過註冊時填寫的“設備標識碼”和“密鑰”接入平台。

設備名稱

自定義。

設備認證類型

選擇“密鑰”。

密鑰

設備密鑰,可自定義,不填寫物聯網平台會自動生成。

填寫完成后單擊“確定”,請注意保存註冊成功返回的“設備ID”和“設備密鑰”。

8.單擊左側導航欄的“規則”,單擊右上角的“創建規則”,選擇“數據轉發”。

9.填寫規則內容,規則名稱自定義,“數據類型”選擇“JSON”,轉發至“數據接入服務(DIS)”,“區域”選擇您開通OBS的區域,“通道”選擇您創建的桶,填寫完成后單擊“創建規則”。

配置數據可視化服務

配置數據可視化服務,新建數據報表視圖。

  1. 登錄華為雲官方網站,訪問數據可視化服務。

  2. 單擊“進入控制台”。

    注:若您未開通DLV服務,可單擊“體驗試用”獲取30天的基礎版免費試用。

  3. 訪問DLV控制台“我的大屏”頁面,新建一個大屏。

4.選擇空白模板,輸入大屏名稱后,單擊“創建大屏”。

5.單擊文本 > 標題”新增一個標題。

 

6.在右側“數據”面板修改靜態數據中“value”的值為“每日銷量”。

7.在大屏內拖動標題到左上角,並拉伸成合適的形狀。

8.單擊常用圖表 > 線狀圖”新增一個線狀圖報表。

9.拖動圖表到標題下面並拉伸成合適的形狀。

10.重複以上步驟再添加一個標題為“時間段銷量”柱狀圖,一個標題為“種類銷量”的餅狀圖,一個標題為“地區銷量”的區域排行圖,並根據自己的需要設置圖表的樣式。最終效果類似下圖。

11.單擊頁面右上角的返回按鈕退出編輯頁面。

 

驗證操作

1.首先控制設備上報10條數據。

  • 您可以使用配置設備接入服務時註冊的真實設備接入平台,上報數據。

  • 您也可以使用模擬器模擬設備上報數據,操作方法請參考通過MQTT.fx體驗設備接入。

    上報數據的樣例如下,請自行修改參數的取值模擬真實設備數據:

樣例1

{
	"msgType": "deviceReq",
	"data": [{
		"serviceId": "sales",
		"serviceData": {
			"category": "soda",
            "number": "1",
            "area": "SZLH",
            "timeStamp": "20190425T091157Z"
		}
	}]
}

上述樣例表示UTC時間2019年4月25日9點11分57秒深圳羅湖的自動販賣機銷售了一支蘇打飲料。

樣例2

{
	"msgType": "deviceReq",
	"data": [{
		"serviceId": "sales",
		"serviceData": {
			"category": "juice",
            "number": "2",
            "area": "SZFT"
            "timeStamp": "20190426T170005Z"
		}
	}]
}

上述樣例表示UTC時間2019年4月26日17點05秒深圳福田的自動販賣機銷售了兩支果汁飲料。

本文以上報下錶的數據為例。

category

number

area

timeStamp

soda

1

SZLH

20190425T091157Z

juice

1

SZFT

20190425T121511Z

sport

1

SZLH

20190425T172433Z

juice

2

SZFT

20190426T170005Z

soda

1

SZNS

20190426T190905Z

juice

1

SZNS

20190427T085959Z

juice

2

SZLH

20190427T111111Z

soda

3

SZFT

20190428T182215Z

sport

1

SZLH

20190429T205901Z

soda

1

SZLG

20190430T225045Z

2.登錄MRS管理控制台,選擇“集群列表 > 現有集群”,單擊集群名進入集群管理頁面。

3.單擊頁面上方的“文件管理”,再單擊“HDFS文件列表”,進入轉儲文件目錄(例如“temp”)查看是否存在轉儲的數據文件。

注:DIS會將數據合併轉發,所以此處的文件數量和上報的數據條數可能會不一致。

4.單擊頁面上方的“作業管理”,在“作業”頁簽中單擊“添加”,配置作業信息。本示例中創建一個spark類型的作業,實現分析設備上報數據,分別按日期、時間段、種類、區域統計銷量,將分析結果輸出為CSV文件並保存至OBS。

參數名稱

說明

作業類型

選擇“SparkSubmit”。

作業名稱

自定義,如“test”。

執行程序路徑

  1. 點擊下載jar包並上傳至OBS桶。

  2. 回到添加作業頁面,單擊“OBS”后單擊“瀏覽”選擇剛剛上傳的jar文件。

運行程序參數

左側選擇“–class”,右側輸入“com.huawei.bigdata.spark.examples.SalesStatistics”。

執行程序參數

輸入“AK SK inputpath outputpath”。

  • 其中AK SK填寫華為雲賬號的AK、SK,獲取方法可參考AK和SK的獲取方法。

  • inputpath填寫文件輸入路徑,在本樣例中為DIS的轉儲路徑,如“/user/temp”。

  • outputpath填寫文件輸出路徑,在本樣例中為已申請的OBS桶內的output文件夾(無需提前在OBS創建文件夾,MRS會自動創建),如“s3a://{OBS桶名稱}/output”。

服務配置參數

無需填寫。

配置完成后單擊“確定”啟動作業。

5.作業完成后,可在OBS桶內看到output文件夾,裏面有四個文件夾,每個文件夾內有一個“_SUCCESS”文件和一個“part”開頭的csv文件。

注:本實驗的樣例程序分析數據時會將UTC時間轉換為本地時間,因此數據分析結果中的日期與時間段數值會和上報時的數值不一致。

6.登錄華為雲官方網站,訪問數據可視化服務。

7.單擊“進入控制台”。

8.單擊“我的數據 > 新建數據連接” ,在“新建數據連接”頁面左側的數據庫類型中,選擇“CSV文件”,按照下錶的數據規劃填寫配置后單擊“確定”。重複本步驟建立4個數據連接。

參數名

說明

名稱

建立4個數據連接,分別命名為:

  • salesByDate

  • salesByTime

  • salesByCategory

  • salesByArea

Access Key

填寫華為雲賬號的AK、SK,獲取方法可參考AK和SK的獲取方法。

Secret Access Key

文件來源

選擇“OBS文件”。

文件路徑

4個連接分別選擇步驟5的output文件夾內和連接同名的文件夾內的csv文件。

9.返回“我的大屏”頁簽,單擊配置數據可視化服務時創建的大屏右下的編輯按鈕進入編輯頁面。

10.選中“每日銷量”表,在右側數據面板選擇數據類型為“CSV文件”,數據連接選擇步驟8添加的數據連接“salesByDate”。

11.根據響應數據的屬性名稱配置字段映射。

配置 “x”為 “saleDate”, “y”為 “saleNumber”。

12.選中“時間段銷量”表,在右側數據面板選擇數據類型為“CSV文件”,數據連接選擇步驟8添加的數據連接“salesByTime”。

13.根據響應數據的屬性名稱配置字段映射。

配置 “x”為 “saleTime”, “y”為 “saleNumber”。

14.選中“種類銷量”表,在右側數據面板選擇數據類型為“CSV文件”,數據連接選擇步驟8添加的數據連接“salesByCategory”。

15.根據響應數據的屬性名稱配置字段映射。

配置 “s”為 “category”, “y”為 “saleNumber”,並設置各個分類的名稱(本示例中為“soda”,“juice”,“sport”)和圖例的顏色。

16.選中“地區銷量”表,在右側數據面板選擇數據類型為“CSV文件”,數據連接選擇步驟8添加的數據連接“salesByArea”。

17.根據響應數據的屬性名稱配置字段映射。

配置 “num”為 “saleNumber”。

18.全部圖表配置完成后,單擊頁面右上角的可預覽報表,示例如下圖。

至此,通過該文檔的學習,您應該對自動售貨機銷售分析場景有了一定的了解。接下來,可以在系列後續文章中,可以學習到更多的物聯網業務場景。

添加華為IoT小助手(微信號:huawei-iot,回復“博客園”)獲取此物聯網免費學習課程。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

RocketMQ系列(五)廣播與延遲消息

今天要給大家介紹RocketMQ中的兩個功能,一個是“廣播”,這個功能是比較基礎的,幾乎所有的mq產品都是支持這個功能的;另外一個是“延遲消費”,這個應該算是RocketMQ的特色功能之一了吧。接下來,我們就分別看一下這兩個功能。

廣播

廣播是把消息發送給訂閱了這個主題的所有消費者。這個定義很清楚,但是這裏邊的知識點你都掌握了嗎?咱們接着說“廣播”的機會,把消費者這端的內容好好和大家說說。

  • 首先,消費者端的概念中,最大的應該是消費者組,一個消費者組中可以有多個消費者,這些消費者必須訂閱同一個Topic。
  • 那麼什麼算是一個消費者呢?我們在寫消費端程序時,看到了setConsumeThreadMax這個方法,設置消費者的線程數,難道一個線程就是一個消費者?錯!這裏的一個消費者是一個進程,你可以理解為ip+端口。如果在同一個應用中,你實例化了兩個消費者,這兩個消費者配置了相同的消費者組名稱,那麼應用程序啟動時會報錯的,這裏不給大家演示了,感興趣的小夥伴私下里試一下吧。
  • 同一個消息,可以被不同的消費者組同時消費。假設,我有兩個消費者組cg-1和cg-2,這兩個消費者組訂閱了同一個Topic,那麼這個Topic的消息會被cg-1和cg-2同時消費。那這是不是廣播呢?錯!當然不是廣播,廣播是同一個消費者組中的多個消費者都消費這個消息。如果配置的不是廣播,像前幾個章節中的那樣,一個消息只能被一個消費者組消費一次。

好了,說了這麼多,我們實驗一下吧,先把消費者配置成廣播,如下:

@Bean(name = "broadcast", initMethod = "start",destroyMethod = "shutdown")
public DefaultMQPushConsumer broadcast() throws MQClientException {
    DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("broadcast");
    consumer.setNamesrvAddr("192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;");
    consumer.subscribe("cluster-topic","*");
    consumer.setMessageModel(MessageModel.BROADCASTING);
    consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
        for (MessageExt msg : msgs) {
            System.out.println(new String(msg.getBody()));
        }
        return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
    });
    return consumer;
}

  • 其中,NameServer,訂閱的Topic都沒有變化。
  • 注意其中consumer.setMessageModel(MessageModel.BROADCASTING);這段代碼,設置消費者為廣播。咱們可以看一下,MessageModel枚舉中只有兩個值,BROADCASTINGCLUSTERING,默認為CLUSTERING

因為要測試廣播,所以我們要啟動多個消費者,還記得什麼是消費者嗎?對了,一個ip+端口算是一個消費者,在這裏我們啟動兩個應用,端口分別是8080和8081。發送端的程序不變,如下:

@Test
public void producerTest() throws Exception {

    for (int i = 0;i<5;i++) {
        MessageExt message = new MessageExt();
        message.setTopic("cluster-topic");
        message.setKeys("key-"+i);
        message.setBody(("this is simpleMQ,my NO is "+i+"---"+new Date()).getBytes());
        SendResult sendResult = defaultMQProducer.send(message);
        System.out.println("i=" + i);
        System.out.println("BrokerName:" + sendResult.getMessageQueue().getBrokerName());
    }
}

我們執行一下發送端的程序,日誌如下:

i=0
BrokerName:broker-a
i=1
BrokerName:broker-a
i=2
BrokerName:broker-b
i=3
BrokerName:broker-b
i=4
BrokerName:broker-b

再來看看8080端口的應用後台打印出來的日誌:

消費了5個消息,再看看8081的後台打印的日誌,

也消費了5個。兩個消費者同時消費了消息,這就是廣播。有的小夥伴可能會有疑問了,如果不設置廣播,會怎麼樣呢?私下里實驗一下吧,上面的程序中,只要把設置廣播的那段代碼註釋掉就可以了。運行的結果當然是只有一個消費者可以消費消息。

延遲消息

延遲消息是指消費者過了一個指定的時間后,才去消費這個消息。大家想象一個電商中場景,一個訂單超過30分鐘未支付,將自動取消。這個功能怎麼實現呢?一般情況下,都是寫一個定時任務,一分鐘掃描一下超過30分鐘未支付的訂單,如果有則被取消。這種方式由於每分鐘查詢一下訂單,一是時間不精確,二是查庫效率比較低。這個場景使用RocketMQ的延遲消息最合適不過了,我們看看怎麼發送延遲消息吧,發送端代碼如下:

@Test
public void producerTest() throws Exception {

    for (int i = 0;i<1;i++) {
        MessageExt message = new MessageExt();
        message.setTopic("cluster-topic");
        message.setKeys("key-"+i);
        message.setBody(("this is simpleMQ,my NO is "+i+"---"+new Date()).getBytes());
        message.setDelayTimeLevel(2);
        SendResult sendResult = defaultMQProducer.send(message);
        System.out.println("i=" + i);
        System.out.println("BrokerName:" + sendResult.getMessageQueue().getBrokerName());
    }
}
  • 我們只是增加了一句message.setDelayTimeLevel(2);
  • 為了方便,這次我們只發送一個消息。

setDelayTimeLevel是什麼意思,設置的是2,難道是2s后消費嗎?怎麼參數也沒有時間單位呢?如果我要自定義延遲時間怎麼辦?我相信很多小夥伴都有這樣的疑問,我也是帶着這樣的疑問查了很多資料,最後在RocketMQ的Github官網上看到了說明,

  • 在RocketMQ的源碼中,有一個MessageStoreConfig類,這個類中定義了延遲的時間,我們看一下,
// org/apache/rocketmq/store/config/MessageStoreConfig.java
private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";
  • 我們在程序中設置的是2,那麼這個消息將在5s以後被消費。
  • 目前RocketMQ還不支持自定義延遲時間,延遲時間只能從上面的時間中選。如果你非要定義一個時間怎麼辦呢?RocketMQ是開源的,下載代碼,把上面的時間改一下,再打包部署,就OK了。

再看看消費端的代碼,

@Bean(name = "broadcast", initMethod = "start",destroyMethod = "shutdown")
public DefaultMQPushConsumer broadcast() throws MQClientException {
    DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("broadcast");
    consumer.setNamesrvAddr("192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;");
    consumer.subscribe("cluster-topic","*");
    consumer.setMessageModel(MessageModel.BROADCASTING);
    consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> {
        for (MessageExt msg : msgs) {
            Date now = new Date();
            System.out.println("消費時間:"+now);

            Date msgTime = new Date();
            msgTime.setTime(msg.getBornTimestamp());
            System.out.println("消息生成時間:"+msgTime);

            System.out.println(new String(msg.getBody()));
        }
        return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
    });
    return consumer;
}
  • 我們還是使用廣播的模式,沒有變。
  • 打印出了當前的時間,這個時間就是消費的時間。
  • 通過msg.getBornTimestamp()方法,獲得了消息的生成時間,也打印出來,看看是不是延遲5s。

啟動兩個消費者8080和8081,發送消息,再看看消費者的後台日誌,

消費時間:Thu Jun 11 14:45:53 CST 2020
消息生成時間:Thu Jun 11 14:45:48 CST 2020
this is simpleMQ,my NO is 0---Thu Jun 11 14:45:47 CST 2020

我們看到消費時間比生成時間晚5s,符合我們的預期。這個功能還是比較實用的,如果能夠自定義延遲時間就更好了。

總結

RocketMQ的這兩個知識點還是比較簡單的,大家要分清楚什麼是消費者組,什麼是消費者,什麼是消費者線程。另外就是延遲消息是不支持自定義的,大家可以在Github上看一下源碼。好了~今天就到這裏了。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網絡KPI異常檢測之時序分解算法

時間序列數據伴隨着我們的生活和工作。從牙牙學語時的“1, 2, 3, 4, 5, ……”到房價的走勢變化,從金融領域的刷卡記錄到運維領域的核心網性能指標。時間序列中的規律能加深我們對事物和場景的認識,時間序列中的異常能提醒我們某些部分可能出現問題。那麼如何去發現時間序列中的規律、找出其中的異常點呢?接下來,我們將揭開這些問題的面紗。

什麼是異常

直觀上講,異常就是現實與心理預期產生較大差距的特殊情形。如2020年春節的新型肺炎(COVID-19,coronavirus disease 2019),可以看到2月12日有一個明顯的確診病例的升高,這就是一個異常點,如下圖:

從統計上講,嚴重偏離預期的點,常見的可以通過3-sigma準則來判定。

從數學上講,它就是一個分段函數:

那麼我們有哪些方法來發現異常呢?異常分析的方法有很多,在本文中,我們主要講解時間序列分解的算法。接下來,我們先從時間序列的定義開始講起。

什麼是時間序列

前面章節,我們列舉了生活和工作中的一些時間序列的例子,但是並沒有給出定義。在本節中,我們將首先給出時間序列的定義,然後給出時間序列的分類方法,最後再給大家展示常見的時間序列。

1.時間序列的定義

時間序列是不同時間點的一系列變量所組成的有序序列。例如北京市2013年4月每日的平均氣溫就構成了一個時間序列,為了方便,我們一般認為序列中相鄰元素具有相同的時間間隔。

時間序列可以分為確定的和隨機的。例如,一個1990年出生的人,從1990年到1999年年齡可以表述為{0,1,2,…,9},這個序列並沒有任何隨機因素。這是一個確定性的時間序列。現實生活中我們所面對的序列更多的是摻雜了隨機因素的時間序列,例如氣溫、銷售量等等,這些是帶有隨機性的例子。我們說的時間序列一般是指帶有隨機性的。

那麼對於隨機性的時間序列,又如何進行分類呢?

2.時間序列的分類

從研究對象上分,時間序列分為一元時間序列和多元時間序列,如新冠肺炎例子中,只看確診病例的變化,它是一元時間序列。如果把確診病例和疑似病例聯合起來看,它是一個多元時間序列。

從時間參數上分,時間序列分為離散時間的時間序列和連續時間的時間序列。例如氣溫變化曲線,通常是按照天、小時進行預測、計算的,這個採集的時間是離散的,因此,它是一個離散時間的時間序列。再如花粉在水中呈現不規則的運動,它無時無刻不在運動,它是一個連續時間的時間序列,這就是大家眾所周知的布朗運動。在我們的工作中,我們一般遇到的都是離散時間的時間序列。

從統計特徵上分,時間序列分為平穩時間序列和非平穩時間序列。平穩序列從直觀上講,均值和標準差不隨着時間發生變化,而非平穩序列均值或者標準差一般會隨着時間發生變化。下面兩個圖分別給出平穩序列和非平穩序列的例子。

3.常見的時間序列

在本節,我們將給大家列舉一些常見的時間序列,讓大家對常見的時間序列有一個直觀的概念。

時間序列的分解

前面給大家講了異常和時間序列的概念,本章將給大家講解時間序列分解技術。

1.目的

時間序列分解是探索時序變化規律的一種方法,主要探索周期性和趨勢性。基於時序分解的結果,我們可以進行後續的時間預測和異常檢測。

2.主要組成部分

在時間序列分析中,我們經常要關注趨勢和周期。因此,一般地,我們將時序分成三個部分:趨勢部分、周期部分和殘差部分。結合下圖CO2含量的例子(見下圖)對這三個主要部分進行解釋:

1)趨勢部分:展示了CO2含量逐年增加;

2)周期部分:反應了一年中CO2含量是周期波動的;

3)殘差部分:趨勢和周期部分不能解釋的部分。

3.時序分解模型

時間序列分解基於分解模型的假設。通常,我們會考慮以下兩種模型:

加法模型適用於以下場景:

  1. 當周期性不隨着趨勢發生變化時,首選加法模型,如下圖(a);
  2. 當目標存在負值時,應選擇加法模型;

乘法模型適用於以下場景:

  1. 周期隨着隨時發生變化時,首選乘法模型,如下圖(b);
  2. 經濟數據,首選乘法模型(增長率、可解釋)。

另外,當我們不清楚選擇哪個模型時,可以兩個模型都使用,選擇誤差最小的那一個。

由於乘法模型與加法模型可以相互轉化,我們後面僅以加法模型來進行介紹。

4.時序分解算法

基於周期、趨勢分解的時序分解算法主要有經典時序分解算法、Holt-Winters算法和STL算法。經典時序分解算法起源於20世紀20年代,方法較簡單。Holt-Winters算法於1960年由Holt的學生 Peter Winters 提出,能夠適應隨着時間變化的季節項。STL(Seasonal and Trend decomposition using Loess)分解法,由Cleveland 等於1990年提出,比較通用,且較為穩健。三者之間的關係,如下圖所示:

 

4.1經典時序分解算法

經典時序分解算法是最簡單的一種分解算法,它是很多其他分解算法的基礎。該算法基於“季節部分不隨着時間發生變化”這一假設,且需要知道序列的周期。另外,該算法基於滑動平均技術。

其中,m=2k+1. 也就是說,時刻t的趨勢項的估計值可以通過前後k個時刻內的平均值得到。階數 m 越大,趨勢越光滑。由上面的公式可以看出,m一般取奇數,這保證了對稱性。但是在很多場景下,周期是偶數,例如一年有4個季度,則周期為4,是偶數。此時,需要做先做一個4階滑動平均(4-MA),再對所得結果做一個2階滑動平均(2-MA),整個過程記為 。這樣處理后的結果是對稱的,即加權的滑動平均,數學表達如下:

下面我們將講解經典時序分解算法的計算步驟。

經典時序分解算法雖然簡單、應用廣泛,但是也存在一些問題:

1) 無法估計序列最前面幾個和最後面幾個的趨勢和周期部分,例如若m=4,則無法估計前2個和后2個觀測的趨勢和周期的部分;

2) 嚴重依賴“季節性部分每個周期都是相同的”這一假設;

3) 過度光滑趨勢部分。

4.2Holt-Winters算法

在上一節中,我們介紹了經典時序分解算法,但是它嚴重依賴“季節性部分每個周期都是相同的”這一假設。為了能夠適應季節部分隨時間發生變化,Holt-Winters算法被提出。Holt-Winters算法是基於簡單指數光滑技術。首先,我們先介紹簡單指數光滑技術。

簡單指數光滑的思想主要是以下兩點:

  1. 對未來的預測:用當前的水平對下一時刻的點進行預測;
  2. 當前水平的估計:使用當前時刻的觀測值和預測值(基於歷史觀測數據的預測值,即上一時刻的水平)的加權平均作為當前水平的估計。

簡單指數光滑的模型比較簡單,如下:

Holt-Winters算法是簡單指數光滑在趨勢(可理解為水平的變化率)和季節性上的推廣,主要包括水平(前文中的趨勢項)、趨勢項和季節項三個部分。

4.3 STL算法

STL(Seasonal and Trend decomposition using Loess)是一個非常通用的、穩健性強的時序分解方法,其中Loess是一種估算非線性關係的方法。STL分解法由 Cleveland et al. (1990) 提出。

STL算法中最主要的是局部光滑技術 (locally weighted scatterplot smoothing, LOWESS or LOESS),有時也稱為局部多項式回歸擬合。它是對兩維散點圖進行平滑的常用方法,它結合了傳統線性回歸的簡潔性和非線性回歸的靈活性。當要估計某個響應變量值時,先從其預測點附近取一個數據子集(如下圖實點 是要預測的點,選取周圍的需點來進行擬合),然後對該子集進行線性回歸或二次回歸,回歸時採用加權最小二乘法(如下圖,採用的是高斯核進行加權),即越靠近估計點的值其權重越大,最後利用得到的局部回歸模型來估計響應變量的值。用這種方法進行逐點運算得到整條擬合曲線。

STL算法的主要環節包含內循環、外循環和季節項后平滑三個部分:

  • 內循環:
  • 外循環:

外循環主要作用則是引入了一個穩健性權重項,以控制數據中異常值產生的影響,這一項將會考慮到下一階段內循環的臨近權重中去。

  • 季節項后平滑:

趨勢分量和季節分量都是在內循環中得到的。循環完后,季節項將出現一定程度的毛刺現象,因為在內循環中平滑時是在每一個截口中進行的,因此,在按照時間序列重排后,就無法保證相鄰時段的平滑了,為此,還需要進行季節項的后平滑,后平滑基於局部二次擬合,並且不再需要在loess中進行穩健性迭代。

異常判斷的準則

對於異常的判斷,我們常用的有 n-sigma 準則和boxplot準則(箱線圖準則)。那這些準備是如何計算的,有哪些區別和聯繫呢?

1.n-sigma 準則

n-sigma準則有計算簡單、效率高且有很強的理論支撐,但是需要近似正態的假設,且均值和標準差的計算用到了全部的數據,因此,受異常點的影響較大。

2.boxplot 準則

為了降低異常點的影響,boxplot準則被提出。boxplot(箱線圖)是一種用作显示一組數據分散情況的統計圖,經常用於異常檢測。BoxPlot的核心在於計算一組數據的中位數、兩個四分位數、上限和下限,基於這些統計值畫出箱線圖。

根據上面的統計值就可以畫出下面的圖,超過上限的點或這個低於下限的點都可以認為是異常點。

從上面的計算上可以看出,boxplot對異常點是穩健的。

基於時序分解的異常檢測算法

在前面的章節,我們了解了時序分解的算法,也學習了異常判斷的準則,那麼如何基於時序分解進行異常檢測呢?在本章,我們將首先給出異常檢測算法的原理,再給出基於時序分解的異常檢測算法步驟。

1.異常檢測算法原理

回顧一下異常的定義,它是一個分段函數:

我們可以看到預測值(擬合值)和閾值是不知道的。對於預測值,我們可以通過找規律來猜這個預測值是多少,本章我們可以通過時序分解找周期和趨勢的規律,進而得到預測值。對於閾值,我們可以看到閾值是針對真實值和預測值的差值設置的,目的是把異常值找到,因此我們只要找到正常值的殘差和異常值的殘差的邊界即可。而我們n-sigma準則和boxplot準則就可以根據殘差把邊界找出來,即閾值。這個思考和實現的過程示意圖如下:

2.基於時序分解的異常檢測算法

Demo代碼下載地址 ,本文主要是想記錄基於時間序列的異常檢測方法,希望能夠幫到你。

 

點擊關注,第一時間了解華為雲新鮮技術~

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

新加坡銷毀重達9公噸走私象牙 打擊非法交易

摘錄自2020年8月11日中央社報導

新加坡今天(11日)銷毀重達9公噸的非法走私象牙,並透過網路直播,預計數天才能完成銷毀。當局表示,這是全球近年最大的銷毀非法象牙行動,展現星國打擊非法野生動物交易的決心。

根據動保人士估計,每天約有100隻非洲象被意圖盜取象牙等大象身體部位的盜獵者所殺,目前僅存約40萬隻非洲象。

新加坡是非洲與亞洲之間運送非法動物商品的海上航路點。除了對非法運輸的商品採取強硬立場,新加坡去年也宣示,自2021年9月起,將全面禁止國內象牙及其製品銷售。

生物多樣性
國際新聞
新加坡
象牙
野生動物
非洲象
非法盜獵
象牙走私

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?

加拿大最後完整冰棚崩塌 面積縮 43% 、分裂出冰山面積比曼哈頓大

摘錄自2020年8月11日立場新聞報導

今年7月的最後兩日,加拿大北極群島中最北的埃爾斯米爾島(Ellesmere Island)米爾恩冰棚(Milne Ice Shelf)崩塌,使加拿大最後一個完整的冰棚面積減少了 43%,該冰塊其後漂入北冰洋,進一步分成兩大塊,並被歐洲太空總署哥白尼計劃哨兵衛星所拍攝到。

塌下的冰棚約有 80 平方公里,比 60 平方公里的曼哈頓更大。根據加拿大極冰局,高於正常的空氣溫度、離岸風和冰棚前的開揚水域,都是造成冰棚破裂的原因。由於冰棚破裂,北極最後一個已知的棚外湖 (epishelf lake) 可能消失。

冰棚可像活塞一樣,減緩與阻擋冰蓋與融冰水流入海洋的速度,有助於限制全球海水水位上升。另外,冰棚崩塌,造成的冰山可能會危害當地的航運業。

棚外湖是困於浮在海水上冰棚的淡水水體。當米爾恩冰棚崩塌時,可能將棚外湖以及其所含的淡水送進北冰洋,影響其鹹度,不過專家不確定其影響程度,情況將取決於米爾恩冰棚剩餘部分的完整性。

氣候變遷
國際新聞
加拿大
北極
冰棚
冰山融化

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

澳洲北領地邊界再封18個月 防原住民染疫

摘錄自2020年8月11日中央社報導

澳洲當局今天(11日)表示,將持續關閉北領地(Northern Territory)邊界18個月,以免其他疫情重災區的民眾進入,藉此保護當地龐大且弱勢的原住民族群。法新社報導,根據政府統計,北領地僅有約25萬人居住,其中30%為原住民。

外界認為澳洲原住民更容易受到武漢肺炎(COVID-19)等疾病的威脅,因為社會經濟與文化因素會影響醫療照護資源的取得及潛在健康問題。許多原住民族群擔憂疫情恐襲擊偏遠且醫療資源有限的原住民社區。

自澳洲爆發疫情以來,北領地確診病例很少,無人病歿。北領地近來不允許維多利亞州(Victoria)及雪梨的人進入當地。

土地利用
國際新聞
澳洲
原住民
疫情下的社會衝突
弱勢族群

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

研究實證!在牛屁股畫假眼睛 能嚇退打獵的獅子

摘錄自2020年8月13日聯合新聞網報導

一項最新研究發現,在牛屁股畫上假眼睛,能有效降低遭獅子或獵豹等掠食動物襲擊的風險。每日郵報與Phys.org報導,這項研究為期四年,由澳洲和波札那的學術與保育單位共同執行,地點選在家畜與掠食動物並存的歐卡萬哥三角洲(Okavango Delta)地區。

研究人員與當地農民合作,對14個最近遭受獅子攻擊的牛群進行塗漆。牛群被分成3組。一組在牛屁股畫上假眼,另外一組畫上簡單的叉號,最後一組保持原狀。結果發現,畫上假眼的牛完全沒事,有4頭畫叉與15頭保持原狀的牛被殺。

研究論文認為,許多生物靠著視覺訊號避免被補食,如蛾、蝴蝶、軟體動物和鳥類等,「研究期間進行塗漆的牲口,可靠著假的視覺器官嚇阻獅子和獵豹等伏擊掠食動物發動攻擊。」

研究人員已經印製英文與札那文的文宣手冊,也承認塗假眼仍有侷限,但波札那保育團體人員告訴南非媒體,「在保護區的邊界,農民與野生動物的衝突可能非常激烈,與野生動物共存讓部分社區承擔巨大的代價」,「我們希望這個簡單、低成本方法能減少部分農夫的負擔。」

※ 本文與 行政院農業委員會 林務局   合作刊登

土地利用
國際新聞
波札那
經濟動物
野生動物和農業共存
與野共生案例故事

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※教你寫出一流的銷售文案?