文章實(shí)時(shí)采集
文章實(shí)時(shí)采集(如何利用文章采集器讓蜘蛛瘋狂收錄排名?(圖) )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2022-01-10 09:15
)
如何使用文章采集器讓蜘蛛瘋狂收錄等級?每個(gè)搜索引擎都有自己的蜘蛛程序。蜘蛛程序通過(guò)網(wǎng)頁(yè)的鏈接地址搜索該網(wǎng)頁(yè),直到爬取到這個(gè)網(wǎng)站的所有網(wǎng)頁(yè),然后通過(guò)搜索引擎算法對網(wǎng)站進(jìn)行評價(jià),得到評價(jià)。如果把互聯(lián)網(wǎng)比作蜘蛛網(wǎng),那么蜘蛛程序對每張網(wǎng)站圖像的爬行活動(dòng)就稱(chēng)為蜘蛛爬行。
如何吸引蜘蛛爬取頁(yè)面
1、一個(gè) 網(wǎng)站 和頁(yè)面權重。算是質(zhì)量上乘,老的網(wǎng)站的權重比較高。這個(gè)網(wǎng)站的網(wǎng)絡(luò )爬取深度會(huì )比較高,也收錄很多。
2、網(wǎng)站 的更新頻率。蜘蛛抓取的每個(gè)頁(yè)面的數據存儲。如果爬蟲(chóng)第二次發(fā)現第一個(gè)收錄完全相同的頁(yè)面,則該頁(yè)面不會(huì )更新,并且蜘蛛不需要經(jīng)常捕獲它。網(wǎng)站的頁(yè)面內容更新頻繁,蜘蛛會(huì )更頻繁地訪(fǎng)問(wèn)該頁(yè)面,頁(yè)面上會(huì )出現一個(gè)新的鏈接,這將更快地跟蹤和抓取蜘蛛。
3、網(wǎng)站 的原創(chuàng ) 內容。百度蜘蛛的誘惑很大原創(chuàng )內容,原創(chuàng )內容的主食,搜索引擎蜘蛛每天都需要。
4、網(wǎng)站的整體結構。包括:頁(yè)面更新?tīng)顟B(tài)、標題、關(guān)鍵詞、標題、關(guān)鍵詞、meta中嵌入的描述標簽、導航欄等。
5、建筑工地地圖。網(wǎng)站地圖就像一個(gè)燈塔,唯一一個(gè)清晰的燈塔可以指引蜘蛛的下落。引誘更多蜘蛛的便捷方式。
6、內部鏈接優(yōu)化。蜘蛛來(lái)到你的網(wǎng)站,自然是通過(guò)你的網(wǎng)站的結構,通過(guò)你的網(wǎng)站,你幾乎可以運行任何網(wǎng)站鏈接,這些鏈接中的任何一個(gè)死鏈接都可以輕松導致蜘蛛爬出來(lái)。更多的時(shí)候,百度自然會(huì )來(lái)你的網(wǎng)站沒(méi)有好感。
7、外部網(wǎng)站 鏈接。要成為蜘蛛爬蟲(chóng),頁(yè)面必須有一個(gè)傳入鏈接,否則蜘蛛沒(méi)有機會(huì )知道該頁(yè)面的存在。
8、監控蜘蛛爬行??梢允褂镁W(wǎng)絡(luò )日志蜘蛛知道哪些頁(yè)面被爬取,可以使用SEO工具查看蜘蛛頻率,合理分配資源,實(shí)現更高的速度和更多的蜘蛛爬取。
提高網(wǎng)站的收錄的排名是通過(guò)網(wǎng)站優(yōu)化SEO,可以參考SEO的優(yōu)化方法。簡(jiǎn)單來(lái)說(shuō),可以從以下幾個(gè)方面進(jìn)行改進(jìn):
1、改進(jìn)網(wǎng)站結構的布局,使其結構合理清晰;
2、保證網(wǎng)頁(yè)內容的原創(chuàng )質(zhì)量并定期更新;
3、增加網(wǎng)頁(yè)的反向鏈接,網(wǎng)站在搜索引擎中排名不錯的做友情鏈接;
4、優(yōu)化URL鏈接,可以在URL中適當添加一些關(guān)鍵詞,使用中文拼音;
5、始終將用戶(hù)體驗放在首位。
通過(guò)以上信息,我們了解了網(wǎng)站內容更新的重要性。網(wǎng)站 更新頻率越快,蜘蛛爬行的頻率就越高。數量會(huì )減少,減少網(wǎng)站的權重。由于個(gè)人精力有限原創(chuàng ),難以保證大量長(cháng)期更新。如果邀請編輯,投入產(chǎn)出比可能為負。但是只要方法得當,采集的效果并不比原創(chuàng )差多少,甚至比那些沒(méi)有掌握方法的原創(chuàng )好很多。
如何選擇好的文章采集器?
1.直接訪(fǎng)問(wèn)大量關(guān)鍵詞,這些關(guān)鍵詞都是百度統計的網(wǎng)民需求詞(有百度索引),或者這些的長(cháng)尾詞詞,從百度下拉框或相關(guān)搜索。
2.直接按關(guān)鍵詞采集智能分析網(wǎng)頁(yè)正文進(jìn)行爬取,無(wú)需編寫(xiě)采集規則。
3. 捕獲的文本已經(jīng)用標準化的標簽進(jìn)行了清理,所有段落都以
4. 標簽顯示,亂碼會(huì )被移除。
5. 根據采集收到的內容,自動(dòng)匹配圖片,圖片必須與內容相關(guān)度很高。以這種方式替換 偽原創(chuàng ) 不會(huì )影響可讀性,但也允許 文章 比 原創(chuàng ) 提供的信息更豐富。
6.整合百度站長(cháng)平臺,積極推送提速收錄。
7.可以直接使用關(guān)鍵詞及其相關(guān)詞作為標題,或者抓取登陸頁(yè)面的標題
如果我們處理好文章采集的內容,采集站點(diǎn)也可以很快收錄。由于本文章采集器永久免費并得到廣大站長(cháng)朋友的支持,是SEO圈子里的良心軟件,為眾多站長(cháng)朋友帶來(lái)了實(shí)實(shí)在在的流量和經(jīng)濟效益。的收益。
查看全部
文章實(shí)時(shí)采集(如何利用文章采集器讓蜘蛛瘋狂收錄排名?(圖)
)
如何使用文章采集器讓蜘蛛瘋狂收錄等級?每個(gè)搜索引擎都有自己的蜘蛛程序。蜘蛛程序通過(guò)網(wǎng)頁(yè)的鏈接地址搜索該網(wǎng)頁(yè),直到爬取到這個(gè)網(wǎng)站的所有網(wǎng)頁(yè),然后通過(guò)搜索引擎算法對網(wǎng)站進(jìn)行評價(jià),得到評價(jià)。如果把互聯(lián)網(wǎng)比作蜘蛛網(wǎng),那么蜘蛛程序對每張網(wǎng)站圖像的爬行活動(dòng)就稱(chēng)為蜘蛛爬行。
如何吸引蜘蛛爬取頁(yè)面
1、一個(gè) 網(wǎng)站 和頁(yè)面權重。算是質(zhì)量上乘,老的網(wǎng)站的權重比較高。這個(gè)網(wǎng)站的網(wǎng)絡(luò )爬取深度會(huì )比較高,也收錄很多。
2、網(wǎng)站 的更新頻率。蜘蛛抓取的每個(gè)頁(yè)面的數據存儲。如果爬蟲(chóng)第二次發(fā)現第一個(gè)收錄完全相同的頁(yè)面,則該頁(yè)面不會(huì )更新,并且蜘蛛不需要經(jīng)常捕獲它。網(wǎng)站的頁(yè)面內容更新頻繁,蜘蛛會(huì )更頻繁地訪(fǎng)問(wèn)該頁(yè)面,頁(yè)面上會(huì )出現一個(gè)新的鏈接,這將更快地跟蹤和抓取蜘蛛。
3、網(wǎng)站 的原創(chuàng ) 內容。百度蜘蛛的誘惑很大原創(chuàng )內容,原創(chuàng )內容的主食,搜索引擎蜘蛛每天都需要。
4、網(wǎng)站的整體結構。包括:頁(yè)面更新?tīng)顟B(tài)、標題、關(guān)鍵詞、標題、關(guān)鍵詞、meta中嵌入的描述標簽、導航欄等。
5、建筑工地地圖。網(wǎng)站地圖就像一個(gè)燈塔,唯一一個(gè)清晰的燈塔可以指引蜘蛛的下落。引誘更多蜘蛛的便捷方式。
6、內部鏈接優(yōu)化。蜘蛛來(lái)到你的網(wǎng)站,自然是通過(guò)你的網(wǎng)站的結構,通過(guò)你的網(wǎng)站,你幾乎可以運行任何網(wǎng)站鏈接,這些鏈接中的任何一個(gè)死鏈接都可以輕松導致蜘蛛爬出來(lái)。更多的時(shí)候,百度自然會(huì )來(lái)你的網(wǎng)站沒(méi)有好感。
7、外部網(wǎng)站 鏈接。要成為蜘蛛爬蟲(chóng),頁(yè)面必須有一個(gè)傳入鏈接,否則蜘蛛沒(méi)有機會(huì )知道該頁(yè)面的存在。
8、監控蜘蛛爬行??梢允褂镁W(wǎng)絡(luò )日志蜘蛛知道哪些頁(yè)面被爬取,可以使用SEO工具查看蜘蛛頻率,合理分配資源,實(shí)現更高的速度和更多的蜘蛛爬取。
提高網(wǎng)站的收錄的排名是通過(guò)網(wǎng)站優(yōu)化SEO,可以參考SEO的優(yōu)化方法。簡(jiǎn)單來(lái)說(shuō),可以從以下幾個(gè)方面進(jìn)行改進(jìn):
1、改進(jìn)網(wǎng)站結構的布局,使其結構合理清晰;
2、保證網(wǎng)頁(yè)內容的原創(chuàng )質(zhì)量并定期更新;
3、增加網(wǎng)頁(yè)的反向鏈接,網(wǎng)站在搜索引擎中排名不錯的做友情鏈接;
4、優(yōu)化URL鏈接,可以在URL中適當添加一些關(guān)鍵詞,使用中文拼音;
5、始終將用戶(hù)體驗放在首位。
通過(guò)以上信息,我們了解了網(wǎng)站內容更新的重要性。網(wǎng)站 更新頻率越快,蜘蛛爬行的頻率就越高。數量會(huì )減少,減少網(wǎng)站的權重。由于個(gè)人精力有限原創(chuàng ),難以保證大量長(cháng)期更新。如果邀請編輯,投入產(chǎn)出比可能為負。但是只要方法得當,采集的效果并不比原創(chuàng )差多少,甚至比那些沒(méi)有掌握方法的原創(chuàng )好很多。
如何選擇好的文章采集器?
1.直接訪(fǎng)問(wèn)大量關(guān)鍵詞,這些關(guān)鍵詞都是百度統計的網(wǎng)民需求詞(有百度索引),或者這些的長(cháng)尾詞詞,從百度下拉框或相關(guān)搜索。
2.直接按關(guān)鍵詞采集智能分析網(wǎng)頁(yè)正文進(jìn)行爬取,無(wú)需編寫(xiě)采集規則。
3. 捕獲的文本已經(jīng)用標準化的標簽進(jìn)行了清理,所有段落都以
4. 標簽顯示,亂碼會(huì )被移除。
5. 根據采集收到的內容,自動(dòng)匹配圖片,圖片必須與內容相關(guān)度很高。以這種方式替換 偽原創(chuàng ) 不會(huì )影響可讀性,但也允許 文章 比 原創(chuàng ) 提供的信息更豐富。
6.整合百度站長(cháng)平臺,積極推送提速收錄。
7.可以直接使用關(guān)鍵詞及其相關(guān)詞作為標題,或者抓取登陸頁(yè)面的標題
如果我們處理好文章采集的內容,采集站點(diǎn)也可以很快收錄。由于本文章采集器永久免費并得到廣大站長(cháng)朋友的支持,是SEO圈子里的良心軟件,為眾多站長(cháng)朋友帶來(lái)了實(shí)實(shí)在在的流量和經(jīng)濟效益。的收益。
文章實(shí)時(shí)采集(用c語(yǔ)言抓數據包,提取數據但是好捉迷藏一樣)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 186 次瀏覽 ? 2022-01-01 05:02
文章實(shí)時(shí)采集。首先的首先,我們得有能收集到我們需要的數據的設備。我只推薦一款,yogac5-a10其實(shí)還可以考慮macbookair或者windows的thinkpads系列,小巧輕薄。觸摸手感優(yōu)秀的觸摸屏就是神器。接著(zhù)說(shuō),我們就要把自己需要采集的數據編碼到數據庫里。我們用udp方式采集就行了。最后對文本數據處理。說(shuō)起來(lái)簡(jiǎn)單,實(shí)踐起來(lái)很難。需要用到的工具,應該是zepth自帶的那個(gè)snake。
我會(huì )做,
用c語(yǔ)言寫(xiě)一個(gè)小程序在固定幾個(gè)時(shí)刻分別發(fā)送幾百億幀過(guò)去,看看能不能抓到別人的數據就得了。
如果不考慮硬件的話(huà),就需要懂點(diǎn)編程了。抓取數據主要是做udp的處理。如果你懂點(diǎn)編程就可以用最基本的方法,用base64編碼。在udp網(wǎng)絡(luò )中保存數據需要主動(dòng)發(fā)起一次握手,即發(fā)送一個(gè)名字過(guò)去給服務(wù)器,服務(wù)器發(fā)送對應的名字過(guò)去給你。
要抓包才能看到吧
上,搜索一下c51,多數機器都有賣(mài),價(jià)格很便宜,
nas,現在都是無(wú)盤(pán)的了,帶密碼的文件傳輸不了。抓包,好捉迷藏,懸疑的節目就是用到這個(gè)功能。
用c語(yǔ)言抓數據包,然后反過(guò)來(lái)就知道名字了。tcp協(xié)議可以讀寫(xiě)文件,提取數據但是好捉迷藏一樣的。
我覺(jué)得qpython很好用, 查看全部
文章實(shí)時(shí)采集(用c語(yǔ)言抓數據包,提取數據但是好捉迷藏一樣)
文章實(shí)時(shí)采集。首先的首先,我們得有能收集到我們需要的數據的設備。我只推薦一款,yogac5-a10其實(shí)還可以考慮macbookair或者windows的thinkpads系列,小巧輕薄。觸摸手感優(yōu)秀的觸摸屏就是神器。接著(zhù)說(shuō),我們就要把自己需要采集的數據編碼到數據庫里。我們用udp方式采集就行了。最后對文本數據處理。說(shuō)起來(lái)簡(jiǎn)單,實(shí)踐起來(lái)很難。需要用到的工具,應該是zepth自帶的那個(gè)snake。
我會(huì )做,
用c語(yǔ)言寫(xiě)一個(gè)小程序在固定幾個(gè)時(shí)刻分別發(fā)送幾百億幀過(guò)去,看看能不能抓到別人的數據就得了。
如果不考慮硬件的話(huà),就需要懂點(diǎn)編程了。抓取數據主要是做udp的處理。如果你懂點(diǎn)編程就可以用最基本的方法,用base64編碼。在udp網(wǎng)絡(luò )中保存數據需要主動(dòng)發(fā)起一次握手,即發(fā)送一個(gè)名字過(guò)去給服務(wù)器,服務(wù)器發(fā)送對應的名字過(guò)去給你。
要抓包才能看到吧
上,搜索一下c51,多數機器都有賣(mài),價(jià)格很便宜,
nas,現在都是無(wú)盤(pán)的了,帶密碼的文件傳輸不了。抓包,好捉迷藏,懸疑的節目就是用到這個(gè)功能。
用c語(yǔ)言抓數據包,然后反過(guò)來(lái)就知道名字了。tcp協(xié)議可以讀寫(xiě)文件,提取數據但是好捉迷藏一樣的。
我覺(jué)得qpython很好用,
文章實(shí)時(shí)采集(Tapdata重點(diǎn)闡述Tapdata在數據庫實(shí)時(shí)同步方面的技術(shù)要點(diǎn)(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 145 次瀏覽 ? 2021-12-30 04:07
Tapdata是深圳市鈦數據有限公司開(kāi)發(fā)的實(shí)時(shí)數據處理與服務(wù)平臺產(chǎn)品,企業(yè)可以使用Tapdata快速搭建數據中心和實(shí)時(shí)數據倉庫。Tapdata提供一站式解決方案,包括實(shí)時(shí)數據采集、數據融合和數據發(fā)布等功能和能力。
Tapdata 專(zhuān)注于實(shí)時(shí)數據處理技術(shù)。在數據庫遷移和同步方面,Tapdata的性能非常好,實(shí)時(shí)性、多樣性、異構性,尤其是關(guān)系型數據庫和非關(guān)系型數據庫的雙向同步,無(wú)論是操作上,效率上,均體現了行業(yè)領(lǐng)先水平。
本文重點(diǎn)介紹Tapdata在實(shí)時(shí)數據庫同步方面的技術(shù)要點(diǎn)。
基于數據庫日志的實(shí)時(shí)遷移或同步
在數據庫同步場(chǎng)景下,Tapdata支持批量和增量數據遷移同步。Tapdata專(zhuān)注于實(shí)時(shí)場(chǎng)景,是數據庫增量同步的關(guān)鍵能力。目前Tapdata支持的數據源基本支持增量同步。大多數場(chǎng)景下,Tapdata通過(guò)解析數據庫日志獲取源數據庫的增刪改查操作,然后將這些操作轉化為標準的數據庫事件推送到內部處理隊列中。
數據同步流程 那么,Tapdata是如何進(jìn)行數據同步的呢?
第一層數據同步是基于CDC機制的,也就是說(shuō)它不使用Select語(yǔ)句定期掃描最近有什么類(lèi)型的數據,或者全量取,而是基于數據庫,比如對于Oracle,就是Redo log。對于 SQL Server,就是它的 CDC 機制。MongoDB 有它的 Oplog,而 MySQL 使用它的 Binlog。為了監控這些日志日志,Tapdata 中的每一條數據都有一個(gè)日志解析器。取出后,當監聽(tīng)到變化時(shí),會(huì )轉換成update語(yǔ)句或者insret語(yǔ)句或者delete語(yǔ)句。在目標庫中,Tapdata 還創(chuàng )建了 FDM,即基礎層和主數據層。把它寫(xiě)入目標庫,然后這樣,就相當于在目標平臺上建立了一個(gè)邏輯鏡像,可以與源庫保持高度同步。這種CDC事件的延遲一般在幾百毫秒,往往在1到2秒內,我們就可以將數據同步到目標平臺,所以同步延遲很短,亞秒級的概率很高。
下面是每個(gè)數據庫采集
增量數據的方式
啟動(dòng)同步任務(wù)時(shí),用戶(hù)可以使用以下模式之一:
基于流水線(xiàn)的流數據處理模式
Tapdata 底層使用基于 Hazelcast Jet 的 DAG 流處理引擎。引擎支持基于DAG(有向無(wú)環(huán)圖)的任務(wù)鏈流計算能力。用戶(hù)可以通過(guò)Pipeline API構建任務(wù)鏈處理流程,包括數據源讀取、數據處理、過(guò)濾、聚合,最后輸出到目標sink。管道將被系統轉換為Core DAG,并在流數據處理引擎中執行。如下所示:
這些 DAG 中的計算節點(diǎn)都是基于記錄(原創(chuàng )
流)而不是基于批處理的。每次有新記錄(在源端產(chǎn)生R1)),都會(huì )立即被數據庫采集
節點(diǎn)處理,然后交給DAG的下一個(gè)節點(diǎn)。通過(guò)結合JSDK,用戶(hù)可以根據DAG的規則構建一個(gè)非常復雜的數據庫處理環(huán)節,交給系統的流數據引擎完成數據處理。
流處理引擎的計算框架采用協(xié)程機制。與傳統線(xiàn)程不同,DFS 不會(huì )為每個(gè)數據處理任務(wù)啟動(dòng)一個(gè)單獨的線(xiàn)程(線(xiàn)程資源有限),而是使用類(lèi)似于 Coroutines 的方法。處理任務(wù)的執行由Java端啟動(dòng)和停止。要做。底層線(xiàn)程會(huì )繼續執行,不斷將控制權交給框架管理程序,協(xié)調不同任務(wù)之間的計算工作。由于避免了昂貴的線(xiàn)程上下文切換,協(xié)程在很多情況下可以顯著(zhù)提高處理速度。
Tapdata 流數據處理引擎支持以下 Transformation 能力(算子):
在實(shí)時(shí)流數據統計方面,tapdata可以支持以下與時(shí)間窗口相關(guān)的功能:
NoSQL 支持
大多數常見(jiàn)的 ETL 工具都是針對關(guān)系型數據庫的,例如 Oracle 和 MySQL。Tapdata在提供關(guān)系型數據庫支持的基礎上,還提供了完整的NoSQL支持,如MongoDB、Elastic Search、Redis等。目前企業(yè)的數據同步需求很大一部分是從關(guān)系型數據庫的實(shí)時(shí)同步到分布式NoSQL,用于解決關(guān)系型數據庫的查詢(xún)性能瓶頸和業(yè)務(wù)創(chuàng )新。
Tapdata 的研發(fā)團隊在處理 NoSQL 方面有著(zhù)天然的優(yōu)勢,這與團隊成員大部分來(lái)自 MongoDB 原廠(chǎng)和社區代碼貢獻者有關(guān)。
NoSQL數據庫的特點(diǎn)是文檔結構往往基于JSON,一個(gè)文檔收錄
一對多和多對一的關(guān)系。同步時(shí),需要從多個(gè)表按照對應關(guān)系寫(xiě)入目標JSON,并且還需要在源表子表更新時(shí)同步目標JSON子文檔的更新,如下圖數字。
Tapdata 支持以下高級 JSON 同步功能:
數據驗證、增量驗證
數據驗證是任何數據同步或遷移工具的必要功能。完善的驗證能力可以讓用戶(hù)有足夠的信心使用數據同步工具。
Tapdata 的驗證數據類(lèi)型包括:
Tapdata驗證通過(guò)Merge Sort實(shí)現,可以快速完成大數據表的遷移和同步驗證。測試表明,對于5000萬(wàn)行的表,只需不到2分鐘即可完成一次完整的校準。驗證結果的分析包括一致率、錯誤數據比較等。
此外,Tapdata 支持獨創(chuàng )的增量驗證功能。用戶(hù)為指定的數據同步任務(wù)啟動(dòng)增量驗證功能后,Tapdata會(huì )將需要驗證的表的CDC事件分別記錄到緩沖區中,并啟動(dòng)后臺線(xiàn)程,根據用戶(hù)指定的驗證策略,緩沖區 新添加的用于分析的 CDC 事件。解析時(shí)會(huì )根據源表的DDL得到主鍵信息,然后查詢(xún)目標表和源表的數據進(jìn)行比較。
容錯機制
Tapdata 提供了部署的高可用機制和數據寫(xiě)入的冪等操作,以確保任務(wù)可以繼續運行,數據在錯誤狀態(tài)下可以最終保持一致。
每個(gè)數據處理任務(wù)在運行時(shí),會(huì )頻繁地向管理終端報告健康狀態(tài)(每5秒一次)。如果管理端在一分鐘內沒(méi)有收到報告,則認為處理節點(diǎn)離線(xiàn)。這時(shí)候,另一個(gè)幸存的節點(diǎn)會(huì )在沒(méi)有心跳的情況下檢查這個(gè)任務(wù)并接管它。
每個(gè)數據處理任務(wù)在運行時(shí)都會(huì )頻繁記錄當前的處理流程位置。當任務(wù)重新啟動(dòng)時(shí),它會(huì )自動(dòng)從該位置重新啟動(dòng)。
為了實(shí)現上述容錯機制,Tapdata要求源端和目標端滿(mǎn)足以下條件:
帶性能參數
Tapdata是企業(yè)級商業(yè)產(chǎn)品。實(shí)時(shí)數據同步和遷移只是部分功能。如果您想了解更多關(guān)于產(chǎn)品的信息,您可以訪(fǎng)問(wèn)官方網(wǎng)站并提交測試應用程序以獲得運行演示。
官網(wǎng)地址:
此外,Tapdata還推出了異構數據實(shí)時(shí)同步的云服務(wù)。登錄云服務(wù)平臺僅需簡(jiǎn)單三步,即可實(shí)現數據實(shí)時(shí)同步。更令人興奮的是,這個(gè)功能是免費使用的。 查看全部
文章實(shí)時(shí)采集(Tapdata重點(diǎn)闡述Tapdata在數據庫實(shí)時(shí)同步方面的技術(shù)要點(diǎn)(組圖))
Tapdata是深圳市鈦數據有限公司開(kāi)發(fā)的實(shí)時(shí)數據處理與服務(wù)平臺產(chǎn)品,企業(yè)可以使用Tapdata快速搭建數據中心和實(shí)時(shí)數據倉庫。Tapdata提供一站式解決方案,包括實(shí)時(shí)數據采集、數據融合和數據發(fā)布等功能和能力。
Tapdata 專(zhuān)注于實(shí)時(shí)數據處理技術(shù)。在數據庫遷移和同步方面,Tapdata的性能非常好,實(shí)時(shí)性、多樣性、異構性,尤其是關(guān)系型數據庫和非關(guān)系型數據庫的雙向同步,無(wú)論是操作上,效率上,均體現了行業(yè)領(lǐng)先水平。
本文重點(diǎn)介紹Tapdata在實(shí)時(shí)數據庫同步方面的技術(shù)要點(diǎn)。
基于數據庫日志的實(shí)時(shí)遷移或同步
在數據庫同步場(chǎng)景下,Tapdata支持批量和增量數據遷移同步。Tapdata專(zhuān)注于實(shí)時(shí)場(chǎng)景,是數據庫增量同步的關(guān)鍵能力。目前Tapdata支持的數據源基本支持增量同步。大多數場(chǎng)景下,Tapdata通過(guò)解析數據庫日志獲取源數據庫的增刪改查操作,然后將這些操作轉化為標準的數據庫事件推送到內部處理隊列中。

數據同步流程 那么,Tapdata是如何進(jìn)行數據同步的呢?
第一層數據同步是基于CDC機制的,也就是說(shuō)它不使用Select語(yǔ)句定期掃描最近有什么類(lèi)型的數據,或者全量取,而是基于數據庫,比如對于Oracle,就是Redo log。對于 SQL Server,就是它的 CDC 機制。MongoDB 有它的 Oplog,而 MySQL 使用它的 Binlog。為了監控這些日志日志,Tapdata 中的每一條數據都有一個(gè)日志解析器。取出后,當監聽(tīng)到變化時(shí),會(huì )轉換成update語(yǔ)句或者insret語(yǔ)句或者delete語(yǔ)句。在目標庫中,Tapdata 還創(chuàng )建了 FDM,即基礎層和主數據層。把它寫(xiě)入目標庫,然后這樣,就相當于在目標平臺上建立了一個(gè)邏輯鏡像,可以與源庫保持高度同步。這種CDC事件的延遲一般在幾百毫秒,往往在1到2秒內,我們就可以將數據同步到目標平臺,所以同步延遲很短,亞秒級的概率很高。
下面是每個(gè)數據庫采集
增量數據的方式
啟動(dòng)同步任務(wù)時(shí),用戶(hù)可以使用以下模式之一:
基于流水線(xiàn)的流數據處理模式
Tapdata 底層使用基于 Hazelcast Jet 的 DAG 流處理引擎。引擎支持基于DAG(有向無(wú)環(huán)圖)的任務(wù)鏈流計算能力。用戶(hù)可以通過(guò)Pipeline API構建任務(wù)鏈處理流程,包括數據源讀取、數據處理、過(guò)濾、聚合,最后輸出到目標sink。管道將被系統轉換為Core DAG,并在流數據處理引擎中執行。如下所示:

這些 DAG 中的計算節點(diǎn)都是基于記錄(原創(chuàng )
流)而不是基于批處理的。每次有新記錄(在源端產(chǎn)生R1)),都會(huì )立即被數據庫采集
節點(diǎn)處理,然后交給DAG的下一個(gè)節點(diǎn)。通過(guò)結合JSDK,用戶(hù)可以根據DAG的規則構建一個(gè)非常復雜的數據庫處理環(huán)節,交給系統的流數據引擎完成數據處理。
流處理引擎的計算框架采用協(xié)程機制。與傳統線(xiàn)程不同,DFS 不會(huì )為每個(gè)數據處理任務(wù)啟動(dòng)一個(gè)單獨的線(xiàn)程(線(xiàn)程資源有限),而是使用類(lèi)似于 Coroutines 的方法。處理任務(wù)的執行由Java端啟動(dòng)和停止。要做。底層線(xiàn)程會(huì )繼續執行,不斷將控制權交給框架管理程序,協(xié)調不同任務(wù)之間的計算工作。由于避免了昂貴的線(xiàn)程上下文切換,協(xié)程在很多情況下可以顯著(zhù)提高處理速度。
Tapdata 流數據處理引擎支持以下 Transformation 能力(算子):
在實(shí)時(shí)流數據統計方面,tapdata可以支持以下與時(shí)間窗口相關(guān)的功能:
NoSQL 支持
大多數常見(jiàn)的 ETL 工具都是針對關(guān)系型數據庫的,例如 Oracle 和 MySQL。Tapdata在提供關(guān)系型數據庫支持的基礎上,還提供了完整的NoSQL支持,如MongoDB、Elastic Search、Redis等。目前企業(yè)的數據同步需求很大一部分是從關(guān)系型數據庫的實(shí)時(shí)同步到分布式NoSQL,用于解決關(guān)系型數據庫的查詢(xún)性能瓶頸和業(yè)務(wù)創(chuàng )新。
Tapdata 的研發(fā)團隊在處理 NoSQL 方面有著(zhù)天然的優(yōu)勢,這與團隊成員大部分來(lái)自 MongoDB 原廠(chǎng)和社區代碼貢獻者有關(guān)。
NoSQL數據庫的特點(diǎn)是文檔結構往往基于JSON,一個(gè)文檔收錄
一對多和多對一的關(guān)系。同步時(shí),需要從多個(gè)表按照對應關(guān)系寫(xiě)入目標JSON,并且還需要在源表子表更新時(shí)同步目標JSON子文檔的更新,如下圖數字。

Tapdata 支持以下高級 JSON 同步功能:
數據驗證、增量驗證
數據驗證是任何數據同步或遷移工具的必要功能。完善的驗證能力可以讓用戶(hù)有足夠的信心使用數據同步工具。
Tapdata 的驗證數據類(lèi)型包括:
Tapdata驗證通過(guò)Merge Sort實(shí)現,可以快速完成大數據表的遷移和同步驗證。測試表明,對于5000萬(wàn)行的表,只需不到2分鐘即可完成一次完整的校準。驗證結果的分析包括一致率、錯誤數據比較等。

此外,Tapdata 支持獨創(chuàng )的增量驗證功能。用戶(hù)為指定的數據同步任務(wù)啟動(dòng)增量驗證功能后,Tapdata會(huì )將需要驗證的表的CDC事件分別記錄到緩沖區中,并啟動(dòng)后臺線(xiàn)程,根據用戶(hù)指定的驗證策略,緩沖區 新添加的用于分析的 CDC 事件。解析時(shí)會(huì )根據源表的DDL得到主鍵信息,然后查詢(xún)目標表和源表的數據進(jìn)行比較。
容錯機制
Tapdata 提供了部署的高可用機制和數據寫(xiě)入的冪等操作,以確保任務(wù)可以繼續運行,數據在錯誤狀態(tài)下可以最終保持一致。
每個(gè)數據處理任務(wù)在運行時(shí),會(huì )頻繁地向管理終端報告健康狀態(tài)(每5秒一次)。如果管理端在一分鐘內沒(méi)有收到報告,則認為處理節點(diǎn)離線(xiàn)。這時(shí)候,另一個(gè)幸存的節點(diǎn)會(huì )在沒(méi)有心跳的情況下檢查這個(gè)任務(wù)并接管它。
每個(gè)數據處理任務(wù)在運行時(shí)都會(huì )頻繁記錄當前的處理流程位置。當任務(wù)重新啟動(dòng)時(shí),它會(huì )自動(dòng)從該位置重新啟動(dòng)。
為了實(shí)現上述容錯機制,Tapdata要求源端和目標端滿(mǎn)足以下條件:
帶性能參數

Tapdata是企業(yè)級商業(yè)產(chǎn)品。實(shí)時(shí)數據同步和遷移只是部分功能。如果您想了解更多關(guān)于產(chǎn)品的信息,您可以訪(fǎng)問(wèn)官方網(wǎng)站并提交測試應用程序以獲得運行演示。
官網(wǎng)地址:
此外,Tapdata還推出了異構數據實(shí)時(shí)同步的云服務(wù)。登錄云服務(wù)平臺僅需簡(jiǎn)單三步,即可實(shí)現數據實(shí)時(shí)同步。更令人興奮的是,這個(gè)功能是免費使用的。
文章實(shí)時(shí)采集(如何下載公眾號文章的方法,再也不用擔心找不到)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 179 次瀏覽 ? 2021-12-25 08:18
微信公眾號里有很多文章,很正面??赐炅?,讓人覺(jué)得舒服,但是好的文章太多了,每一篇文章都津津有味的看完,有時(shí)候想下載下來(lái)以后記住。, 那么公眾號文章怎么下載呢?
微信公眾號可以算是一個(gè)非常非常大的素材庫。但是,微信在管理上非常嚴格。和之前的Misty一樣,有些文章寫(xiě)的還不錯,但是突然就看不到了。
但是直接下載肯定不行。你可以把所有的東西復制粘貼到你自己公眾號的后臺,然后再編輯。如果是對方,原創(chuàng )還沒(méi)有發(fā)布,需要稍微處理一下。
所以把公眾號的文章導出成word或pdf格式保存在電腦上,隨時(shí)隨地,想看就看。
對于導出文章,可以在瀏覽器中打開(kāi)鏈接,然后按Ctrl+P,可以看到另存為pdf,可以保持原格式,導入效果還是不錯的,但是需要一個(gè)一個(gè)的導出,稍微有點(diǎn)麻煩,如果能批量導出就更好了
讓我與您分享我正在使用的導出小工具。微信公眾號文章搜索下載拖圖數據??梢酝ㄟ^(guò)關(guān)鍵詞搜索公眾號平臺上的所有文章,也可以采集發(fā)送一個(gè)公眾號文章中的所有歷史記錄,然后導出批量轉word、pdf、html等格式,非常好用。
“拓圖數據”是公眾號運營(yíng)的工具。主要提供優(yōu)質(zhì)公眾號查詢(xún)功能和公眾號相關(guān)報表下載功能。它還可以讓您快速判斷公眾號的好壞。目前越來(lái)越多的人開(kāi)始青睞公眾號的推廣,但是如何找到一個(gè)合適的公眾號進(jìn)行推廣就成了一個(gè)難題?!巴貓D數據”旨在為關(guān)注新媒體領(lǐng)域的機構、個(gè)人和研究機構提供從數據到價(jià)值的服務(wù)。服務(wù)支持。
以上就是小編為大家總結的公眾號文章的下載方法。再也不用擔心找不到好的文章。你學(xué)會(huì )如何閱讀了嗎? 查看全部
文章實(shí)時(shí)采集(如何下載公眾號文章的方法,再也不用擔心找不到)
微信公眾號里有很多文章,很正面??赐炅?,讓人覺(jué)得舒服,但是好的文章太多了,每一篇文章都津津有味的看完,有時(shí)候想下載下來(lái)以后記住。, 那么公眾號文章怎么下載呢?
微信公眾號可以算是一個(gè)非常非常大的素材庫。但是,微信在管理上非常嚴格。和之前的Misty一樣,有些文章寫(xiě)的還不錯,但是突然就看不到了。
但是直接下載肯定不行。你可以把所有的東西復制粘貼到你自己公眾號的后臺,然后再編輯。如果是對方,原創(chuàng )還沒(méi)有發(fā)布,需要稍微處理一下。
所以把公眾號的文章導出成word或pdf格式保存在電腦上,隨時(shí)隨地,想看就看。
對于導出文章,可以在瀏覽器中打開(kāi)鏈接,然后按Ctrl+P,可以看到另存為pdf,可以保持原格式,導入效果還是不錯的,但是需要一個(gè)一個(gè)的導出,稍微有點(diǎn)麻煩,如果能批量導出就更好了
讓我與您分享我正在使用的導出小工具。微信公眾號文章搜索下載拖圖數據??梢酝ㄟ^(guò)關(guān)鍵詞搜索公眾號平臺上的所有文章,也可以采集發(fā)送一個(gè)公眾號文章中的所有歷史記錄,然后導出批量轉word、pdf、html等格式,非常好用。
“拓圖數據”是公眾號運營(yíng)的工具。主要提供優(yōu)質(zhì)公眾號查詢(xún)功能和公眾號相關(guān)報表下載功能。它還可以讓您快速判斷公眾號的好壞。目前越來(lái)越多的人開(kāi)始青睞公眾號的推廣,但是如何找到一個(gè)合適的公眾號進(jìn)行推廣就成了一個(gè)難題?!巴貓D數據”旨在為關(guān)注新媒體領(lǐng)域的機構、個(gè)人和研究機構提供從數據到價(jià)值的服務(wù)。服務(wù)支持。

以上就是小編為大家總結的公眾號文章的下載方法。再也不用擔心找不到好的文章。你學(xué)會(huì )如何閱讀了嗎?
文章實(shí)時(shí)采集(易撰自媒體采集平臺官網(wǎng)版顛覆傳統模式,高配置數據服務(wù)器)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 370 次瀏覽 ? 2021-12-20 22:17
易寫(xiě)自媒體采集平臺官網(wǎng)版下載,非常優(yōu)質(zhì)的自媒體新聞資訊賺錢(qián)平臺。這里采集開(kāi)手、美拍、妙拍、土豆、火山視頻等短視頻,實(shí)時(shí)捕捉全網(wǎng)熱點(diǎn)和熱詞,更新推送最新網(wǎng)絡(luò )熱搜文章和視頻資訊、看視頻、閱讀轉發(fā)文章即可兌換現金紅包,邊了解熱點(diǎn)邊賺零花錢(qián)!有興趣的朋友快來(lái)下載吧!
易傳自媒體采集平臺官網(wǎng)版介紹
易傳爆文系統是服務(wù)自媒體用戶(hù)的新媒體運營(yíng)助手。新手用戶(hù)可以使用本程序自動(dòng)推送文章給讀者,獲取更多閱讀訪(fǎng)問(wèn)數據!實(shí)時(shí)推送最新的網(wǎng)絡(luò )熱搜文章和視頻信息,也可以關(guān)注感興趣的自媒體作者。
易傳自媒體采集平臺官網(wǎng)版顛覆傳統模式,打造最實(shí)用的自媒體推廣應用!分鐘級實(shí)時(shí)監測各類(lèi)行業(yè)樣本網(wǎng)站數據和傳統媒體信息,生成最新熱點(diǎn)數據!您可以關(guān)注感興趣的作者。當以下作者有新的文章發(fā)布時(shí),智能提醒。
易傳自媒體采集平臺官網(wǎng)版本亮點(diǎn)
5年數據服務(wù):保證數據完整穩定
系統模塊化開(kāi)發(fā):按需配置,降低成本
擁有核心算法:成熟的算法技術(shù)改進(jìn)
完善的售后服務(wù):24小時(shí)
多重支持計劃:零代理費,零風(fēng)險
易傳自媒體采集平臺官網(wǎng)版本特點(diǎn)
分布式實(shí)時(shí)爬取
采用分布式爬蟲(chóng)架構,N+1組服務(wù)器,智能增加任務(wù)進(jìn)程,快速響應爬蟲(chóng)任務(wù)。請求實(shí)時(shí)響應,http代理毫秒級智能切換,24小時(shí)人工值守,確保數據正確分析,按照約定規則存儲,數據真實(shí)、有效、實(shí)時(shí)。
大數據存儲優(yōu)化
分布式數據庫,高配置數據服務(wù)器。高并發(fā)數據查詢(xún)優(yōu)化、索引優(yōu)化等大數據優(yōu)化,滿(mǎn)足用戶(hù)良好體驗。多數據、大容量服務(wù)器,保證數據安全,多備份,快速計算。
數據分析和存儲
根據規則抓取數據,根據數據樣本的需要對數據進(jìn)行清洗,根據不同的數據進(jìn)行聚類(lèi)、提示、打標簽等,然后存儲到數據庫中。根據不同應用場(chǎng)景對數據進(jìn)行二次篩選,確保數據真實(shí)有效。
易傳自媒體采集平臺官網(wǎng)版功能
1.爆文標題助理
該機器在分析大量爆文 標題后形成高級算法。用戶(hù)可以通過(guò)添加關(guān)鍵詞,自動(dòng)智能生成爆文標題。
2.文章,圖片風(fēng)險監控
7大指標項檢測,全面檢測標題和內容重復,檢測和提示文章內容中的非法詞、敏感、涉政、廣告等信息。
3.視頻庫
采集 快手、美拍、喵拍、土豆、火山視頻等短視頻平臺實(shí)時(shí)數據(鏈接、封面圖、播放量、發(fā)布時(shí)間、點(diǎn)贊數)。
4.實(shí)時(shí)新聞,全網(wǎng)熱點(diǎn)
采集國內外主流權威媒體新聞源,覆蓋30多個(gè)行業(yè),分鐘級監控,數據實(shí)時(shí)、海量、精準。
根據采集的海量數據,采用獨特的算法捕捉全網(wǎng)熱點(diǎn)和熱詞。
5. 一鍵發(fā)布,多平臺賬號管理
同時(shí)管理多個(gè)自媒體平臺賬號,一次編輯,同時(shí)發(fā)布到多個(gè)平臺,大大提高發(fā)布效率。
6.自媒體爆文
采集今日頭條、大魚(yú)、企鵝、百家等主流自媒體平臺實(shí)時(shí)數據,對具有爆文潛力的自媒體數據進(jìn)行分鐘級監控,保證數據準確性,實(shí)時(shí),實(shí)時(shí)發(fā)現爆文。
對《易傳》官網(wǎng)版自媒體采集的評論:
1、更專(zhuān)業(yè)的全能軟件,可以幫助自媒體平臺更好的編輯和操作!
2、 數據更精確、更廣泛,用于成熟的算法和穩定的安全數據。 查看全部
文章實(shí)時(shí)采集(易撰自媒體采集平臺官網(wǎng)版顛覆傳統模式,高配置數據服務(wù)器)
易寫(xiě)自媒體采集平臺官網(wǎng)版下載,非常優(yōu)質(zhì)的自媒體新聞資訊賺錢(qián)平臺。這里采集開(kāi)手、美拍、妙拍、土豆、火山視頻等短視頻,實(shí)時(shí)捕捉全網(wǎng)熱點(diǎn)和熱詞,更新推送最新網(wǎng)絡(luò )熱搜文章和視頻資訊、看視頻、閱讀轉發(fā)文章即可兌換現金紅包,邊了解熱點(diǎn)邊賺零花錢(qián)!有興趣的朋友快來(lái)下載吧!
易傳自媒體采集平臺官網(wǎng)版介紹
易傳爆文系統是服務(wù)自媒體用戶(hù)的新媒體運營(yíng)助手。新手用戶(hù)可以使用本程序自動(dòng)推送文章給讀者,獲取更多閱讀訪(fǎng)問(wèn)數據!實(shí)時(shí)推送最新的網(wǎng)絡(luò )熱搜文章和視頻信息,也可以關(guān)注感興趣的自媒體作者。
易傳自媒體采集平臺官網(wǎng)版顛覆傳統模式,打造最實(shí)用的自媒體推廣應用!分鐘級實(shí)時(shí)監測各類(lèi)行業(yè)樣本網(wǎng)站數據和傳統媒體信息,生成最新熱點(diǎn)數據!您可以關(guān)注感興趣的作者。當以下作者有新的文章發(fā)布時(shí),智能提醒。

易傳自媒體采集平臺官網(wǎng)版本亮點(diǎn)
5年數據服務(wù):保證數據完整穩定
系統模塊化開(kāi)發(fā):按需配置,降低成本
擁有核心算法:成熟的算法技術(shù)改進(jìn)
完善的售后服務(wù):24小時(shí)
多重支持計劃:零代理費,零風(fēng)險

易傳自媒體采集平臺官網(wǎng)版本特點(diǎn)
分布式實(shí)時(shí)爬取
采用分布式爬蟲(chóng)架構,N+1組服務(wù)器,智能增加任務(wù)進(jìn)程,快速響應爬蟲(chóng)任務(wù)。請求實(shí)時(shí)響應,http代理毫秒級智能切換,24小時(shí)人工值守,確保數據正確分析,按照約定規則存儲,數據真實(shí)、有效、實(shí)時(shí)。
大數據存儲優(yōu)化
分布式數據庫,高配置數據服務(wù)器。高并發(fā)數據查詢(xún)優(yōu)化、索引優(yōu)化等大數據優(yōu)化,滿(mǎn)足用戶(hù)良好體驗。多數據、大容量服務(wù)器,保證數據安全,多備份,快速計算。
數據分析和存儲
根據規則抓取數據,根據數據樣本的需要對數據進(jìn)行清洗,根據不同的數據進(jìn)行聚類(lèi)、提示、打標簽等,然后存儲到數據庫中。根據不同應用場(chǎng)景對數據進(jìn)行二次篩選,確保數據真實(shí)有效。
易傳自媒體采集平臺官網(wǎng)版功能
1.爆文標題助理
該機器在分析大量爆文 標題后形成高級算法。用戶(hù)可以通過(guò)添加關(guān)鍵詞,自動(dòng)智能生成爆文標題。
2.文章,圖片風(fēng)險監控
7大指標項檢測,全面檢測標題和內容重復,檢測和提示文章內容中的非法詞、敏感、涉政、廣告等信息。
3.視頻庫
采集 快手、美拍、喵拍、土豆、火山視頻等短視頻平臺實(shí)時(shí)數據(鏈接、封面圖、播放量、發(fā)布時(shí)間、點(diǎn)贊數)。
4.實(shí)時(shí)新聞,全網(wǎng)熱點(diǎn)
采集國內外主流權威媒體新聞源,覆蓋30多個(gè)行業(yè),分鐘級監控,數據實(shí)時(shí)、海量、精準。
根據采集的海量數據,采用獨特的算法捕捉全網(wǎng)熱點(diǎn)和熱詞。
5. 一鍵發(fā)布,多平臺賬號管理
同時(shí)管理多個(gè)自媒體平臺賬號,一次編輯,同時(shí)發(fā)布到多個(gè)平臺,大大提高發(fā)布效率。
6.自媒體爆文
采集今日頭條、大魚(yú)、企鵝、百家等主流自媒體平臺實(shí)時(shí)數據,對具有爆文潛力的自媒體數據進(jìn)行分鐘級監控,保證數據準確性,實(shí)時(shí),實(shí)時(shí)發(fā)現爆文。
對《易傳》官網(wǎng)版自媒體采集的評論:
1、更專(zhuān)業(yè)的全能軟件,可以幫助自媒體平臺更好的編輯和操作!
2、 數據更精確、更廣泛,用于成熟的算法和穩定的安全數據。
文章實(shí)時(shí)采集( 實(shí)時(shí)數據流的python產(chǎn)生器選型?選型選型?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 157 次瀏覽 ? 2021-12-18 20:19
實(shí)時(shí)數據流的python產(chǎn)生器選型?選型選型?)
Flume和Kafka完成實(shí)時(shí)數據采集
寫(xiě)在前面
Flume和Kafka一般在生產(chǎn)環(huán)境中結合使用??梢詫烧呓Y合使用來(lái)采集實(shí)時(shí)日志信息,這一點(diǎn)非常重要。如果你不知道flume和kafka,可以先查一下我寫(xiě)的關(guān)于這兩部分的知識。再學(xué)習一下,這部分操作也是可以的。
采集 的實(shí)時(shí)數據面臨一個(gè)問(wèn)題。我們如何生成我們的實(shí)時(shí)數據源?因為我們可能想直接獲取實(shí)時(shí)數據流不是那么方便。在文章之前寫(xiě)過(guò)一篇關(guān)于實(shí)時(shí)數據流的python生成器的文章,文章地址:
大家可以先看看,如何生成實(shí)時(shí)數據...
主意?? 如何開(kāi)始??
分析:我們可以從數據的流向開(kāi)始。數據一開(kāi)始就在網(wǎng)絡(luò )服務(wù)器上。我們的訪(fǎng)問(wèn)日志是nginx服務(wù)器實(shí)時(shí)采集到指定文件的。我們從這個(gè)文件中采集日志數據,即:webserver=>flume=>kafka
網(wǎng)絡(luò )服務(wù)器日志存儲文件位置
這個(gè)文件的位置一般是我們自己設置的
我們的網(wǎng)絡(luò )日志存儲的目錄是:
/home/hadoop/data/project/logs/access.log
[hadoop@hadoop000 logs]$ pwd
/home/hadoop/data/project/logs
[hadoop@hadoop000 logs]$ ls
access.log
[hadoop@hadoop000 logs]$
水槽
做flume其實(shí)就是寫(xiě)一個(gè)conf文件,所以面臨選擇的問(wèn)題
來(lái)源選擇?頻道選擇?水槽選擇?
這里我們選擇exec source memory channel kafka sink
怎么寫(xiě)?
按照前面提到的步驟 1234
從官方網(wǎng)站上,我們可以找到我們的選擇應該怎么寫(xiě):
1) 配置源
執行源
# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.log
a1.sources.r1.shell = /bin/sh -c
2) 配置通道
記憶通道
a1.channels.c1.type = memory
3) 配置接收器
卡夫卡水槽
水槽1.6 版本可以參考
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.brokerList = hadoop000:9092
a1.sinks.k1.topic = flume_kafka
a1.sinks.k1.batchSize = 5
a1.sinks.k1.requiredAcks =1
4) 將以上三個(gè)組件串在一起
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
**我們的新文件叫做 test3.conf
粘貼我們分析的代碼:**
[hadoop@hadoop000 conf]$ vim test3.conf
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.log
a1.sources.r1.shell = /bin/sh -c
a1.channels.c1.type = memory
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.brokerList = hadoop000:9092
a1.sinks.k1.topic = flume_kafka
a1.sinks.k1.batchSize = 5
a1.sinks.k1.requiredAcks =1
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
這里不展開(kāi)了,因為涉及kafka的東西,首先要部署kafka,
Kafka部署
Kafka是如何部署的??
按照官網(wǎng)的說(shuō)法,我們先啟動(dòng)一個(gè)zookeeper進(jìn)程,然后就可以啟動(dòng)kafka服務(wù)器了
第一步:?jiǎn)?dòng)zookeeper
[hadoop@hadoop000 ~]$
[hadoop@hadoop000 ~]$ jps
29147 Jps
[hadoop@hadoop000 ~]$ zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop000 ~]$ jps
29172 QuorumPeerMain
29189 Jps
[hadoop@hadoop000 ~]$
第二步:?jiǎn)?dòng)服務(wù)器
[hadoop@hadoop000 ~]$ kafka-server-start.sh $KAFKA_HOME/config/server.properties
#外開(kāi)一個(gè)窗口,查看jps
[hadoop@hadoop000 ~]$ jps
29330 Jps
29172 QuorumPeerMain
29229 Kafka
[hadoop@hadoop000 ~]$
如果這部分不是很熟悉,可以參考
第 3 步:創(chuàng )建主題
[hadoop@hadoop000 ~]$ kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic flume_kafka
WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.
Created topic "flume_kafka".
[hadoop@hadoop000 ~]$
第四步:?jiǎn)?dòng)之前的代理
[hadoop@hadoop000 conf]$ flume-ng agent --name a1 --conf . --conf-file ./test3.conf -Dflume.root.logger=INFO,console
第 5 步:?jiǎn)?dòng)消費者
kafka-console-consumer.sh --zookeeper hadoop000:2181 –topic flume-kafka
執行完上面的第五步,就會(huì )收到刷新屏幕的結果了,哈哈哈??!
上面的消費者會(huì )不斷刷新屏幕,還是很有意思的?。?!
這里的消費者就是把接收到的數據放到屏幕上
后面我們會(huì )介紹使用SparkStreaming作為消費者實(shí)時(shí)接收數據,接收的數據是為了簡(jiǎn)單的數據清洗而開(kāi)發(fā)的,從隨機生成的日志中過(guò)濾掉我們需要的數據…… 查看全部
文章實(shí)時(shí)采集(
實(shí)時(shí)數據流的python產(chǎn)生器選型?選型選型?)
Flume和Kafka完成實(shí)時(shí)數據采集
寫(xiě)在前面
Flume和Kafka一般在生產(chǎn)環(huán)境中結合使用??梢詫烧呓Y合使用來(lái)采集實(shí)時(shí)日志信息,這一點(diǎn)非常重要。如果你不知道flume和kafka,可以先查一下我寫(xiě)的關(guān)于這兩部分的知識。再學(xué)習一下,這部分操作也是可以的。
采集 的實(shí)時(shí)數據面臨一個(gè)問(wèn)題。我們如何生成我們的實(shí)時(shí)數據源?因為我們可能想直接獲取實(shí)時(shí)數據流不是那么方便。在文章之前寫(xiě)過(guò)一篇關(guān)于實(shí)時(shí)數據流的python生成器的文章,文章地址:
大家可以先看看,如何生成實(shí)時(shí)數據...
主意?? 如何開(kāi)始??
分析:我們可以從數據的流向開(kāi)始。數據一開(kāi)始就在網(wǎng)絡(luò )服務(wù)器上。我們的訪(fǎng)問(wèn)日志是nginx服務(wù)器實(shí)時(shí)采集到指定文件的。我們從這個(gè)文件中采集日志數據,即:webserver=>flume=>kafka
網(wǎng)絡(luò )服務(wù)器日志存儲文件位置
這個(gè)文件的位置一般是我們自己設置的
我們的網(wǎng)絡(luò )日志存儲的目錄是:
/home/hadoop/data/project/logs/access.log
[hadoop@hadoop000 logs]$ pwd
/home/hadoop/data/project/logs
[hadoop@hadoop000 logs]$ ls
access.log
[hadoop@hadoop000 logs]$
水槽
做flume其實(shí)就是寫(xiě)一個(gè)conf文件,所以面臨選擇的問(wèn)題
來(lái)源選擇?頻道選擇?水槽選擇?
這里我們選擇exec source memory channel kafka sink
怎么寫(xiě)?
按照前面提到的步驟 1234
從官方網(wǎng)站上,我們可以找到我們的選擇應該怎么寫(xiě):
1) 配置源
執行源
# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.log
a1.sources.r1.shell = /bin/sh -c
2) 配置通道
記憶通道
a1.channels.c1.type = memory
3) 配置接收器
卡夫卡水槽
水槽1.6 版本可以參考
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.brokerList = hadoop000:9092
a1.sinks.k1.topic = flume_kafka
a1.sinks.k1.batchSize = 5
a1.sinks.k1.requiredAcks =1
4) 將以上三個(gè)組件串在一起
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
**我們的新文件叫做 test3.conf
粘貼我們分析的代碼:**
[hadoop@hadoop000 conf]$ vim test3.conf
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.log
a1.sources.r1.shell = /bin/sh -c
a1.channels.c1.type = memory
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.brokerList = hadoop000:9092
a1.sinks.k1.topic = flume_kafka
a1.sinks.k1.batchSize = 5
a1.sinks.k1.requiredAcks =1
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
這里不展開(kāi)了,因為涉及kafka的東西,首先要部署kafka,
Kafka部署
Kafka是如何部署的??
按照官網(wǎng)的說(shuō)法,我們先啟動(dòng)一個(gè)zookeeper進(jìn)程,然后就可以啟動(dòng)kafka服務(wù)器了
第一步:?jiǎn)?dòng)zookeeper
[hadoop@hadoop000 ~]$
[hadoop@hadoop000 ~]$ jps
29147 Jps
[hadoop@hadoop000 ~]$ zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop000 ~]$ jps
29172 QuorumPeerMain
29189 Jps
[hadoop@hadoop000 ~]$
第二步:?jiǎn)?dòng)服務(wù)器
[hadoop@hadoop000 ~]$ kafka-server-start.sh $KAFKA_HOME/config/server.properties
#外開(kāi)一個(gè)窗口,查看jps
[hadoop@hadoop000 ~]$ jps
29330 Jps
29172 QuorumPeerMain
29229 Kafka
[hadoop@hadoop000 ~]$
如果這部分不是很熟悉,可以參考
第 3 步:創(chuàng )建主題
[hadoop@hadoop000 ~]$ kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic flume_kafka
WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.
Created topic "flume_kafka".
[hadoop@hadoop000 ~]$
第四步:?jiǎn)?dòng)之前的代理
[hadoop@hadoop000 conf]$ flume-ng agent --name a1 --conf . --conf-file ./test3.conf -Dflume.root.logger=INFO,console
第 5 步:?jiǎn)?dòng)消費者
kafka-console-consumer.sh --zookeeper hadoop000:2181 –topic flume-kafka
執行完上面的第五步,就會(huì )收到刷新屏幕的結果了,哈哈哈??!
上面的消費者會(huì )不斷刷新屏幕,還是很有意思的?。?!
這里的消費者就是把接收到的數據放到屏幕上
后面我們會(huì )介紹使用SparkStreaming作為消費者實(shí)時(shí)接收數據,接收的數據是為了簡(jiǎn)單的數據清洗而開(kāi)發(fā)的,從隨機生成的日志中過(guò)濾掉我們需要的數據……
文章實(shí)時(shí)采集(引流方法最常用的就是寫(xiě)文章、做互推這三個(gè)主要方法)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 205 次瀏覽 ? 2021-12-14 16:21
很多人到處學(xué)習招攬粉絲的方法和技巧,卻不知道“一招鮮,吃遍天際”。仔細觀(guān)察,你會(huì )發(fā)現很多大咖往往只用兩種技巧來(lái)做流量。很多人經(jīng)常問(wèn)我經(jīng)常用什么方法引流。最常用的引流方式就是寫(xiě)文章、制作視頻、互推三種方式!縱觀(guān)整個(gè)互聯(lián)網(wǎng),目前的流量類(lèi)型準確率最高。是搜索流量,也是轉化率最高的流量。為什么?
搜索流量是轉化率最高的流量
用戶(hù)搜索的關(guān)鍵詞收錄隱藏的需求。例如,如果有人搜索“短視頻是如何流行起來(lái)的?”,他們想了解短視頻的底層邏輯和方法技巧。如果你在做短視頻培訓,那么抓住搜索這些詞的人就等于抓住了他們。潛在客戶(hù)!
搜索流量在互聯(lián)網(wǎng)上無(wú)處不在,因為互聯(lián)網(wǎng)的特點(diǎn)之一就是數據量大。如果數據很大,則需要檢索。如果需要檢索,可以做SEO優(yōu)化,搶搜索流量!許多人對搜索流量的看法很狹窄。理解為搜索引擎流量。其實(shí)電商平臺也有搜索流量,這也需要關(guān)鍵詞搜索排名優(yōu)化。以抖音為代表的去中心化,基于標簽定位的流量池分布的流量模式也有搜索流量。
據官方報道:抖音目前日活躍用戶(hù)搜索量超過(guò)4億,未來(lái)肯定還會(huì )更多。
其實(shí)只要大家掌握了搜索的原理和核心,很多平臺上的搜索做法都是大同小異的。以百度為例。2015年以來(lái),百度90%的搜索流量都集中在手機上。近年來(lái),隨著(zhù)短視頻和直播的興起,百度搜索結果也出現在視頻聚合排名、小視頻聚合排名,甚至直播排名中!
比如我們搜索關(guān)鍵詞這樣的視頻制作,除了競價(jià)廣告,排名第一的是視頻聚合。然后下拉,還有小視頻聚合排名和直播聚合排名:
運營(yíng)視頻聚合排名搶占搜索流量
也就是說(shuō),如果我們發(fā)布視頻(橫豎屏)或者開(kāi)直播相關(guān)關(guān)鍵詞,我們就會(huì )被百度收錄,有機會(huì )參與百度搜索結果的排名!經(jīng)過(guò)大量的測試和研究,我們發(fā)現視頻聚合排名特別適合競爭激烈的關(guān)鍵詞排名,基本可以進(jìn)入前幾名。通過(guò)操作好多個(gè)詞,它們可以在自然搜索結果中排名第一。
目前,操作視頻聚合排名搶占搜索流量也很簡(jiǎn)單。主要有以下幾個(gè)步驟:
第一步:用戶(hù)需求數據分析+關(guān)鍵詞挖掘
通過(guò)需求分析,弄清楚你的潛在客戶(hù)類(lèi)型,進(jìn)而深入挖掘用戶(hù)需求甚至痛點(diǎn)。然后從需求的角度,深入挖掘相關(guān)的關(guān)鍵詞和長(cháng)尾關(guān)鍵詞,構建自己的關(guān)鍵詞庫;常用工具有:站長(cháng)工具、愛(ài)站網(wǎng)、5118網(wǎng)、百度指數、百度關(guān)鍵詞規劃師、搜索引擎下拉關(guān)鍵詞、微信索引、抖音海量索引(查詢(xún)抖音關(guān)鍵詞搜索數量)等。
例如,要采集各種搜索框下拉關(guān)鍵詞 和相關(guān)搜索關(guān)鍵詞,我們使用:
當然,目前比較好用的工具有站長(cháng)工具大數據平臺、愛(ài)站net大數據、5118大數據工具。這三個(gè)工具都是收費的。如果你做一個(gè)單一的數據挖掘,你可以去某個(gè)寶藏。電商平臺可以租用賬號,也可以讓他們代為挖礦!
第 2 步:構建您自己的 關(guān)鍵詞 庫!
第三步:注冊視頻平臺賬號并維護賬號
可以參與視頻聚合的常見(jiàn)平臺有:好看視頻、愛(ài)奇藝、優(yōu)酷、騰訊視頻、獨小視(全民小視頻)、微視、小紅書(shū)、B站、搜狐視頻等,其中百度旗下值得關(guān)注:Goodview Video、獨小視等,特別推薦百度投資愛(ài)奇藝。愛(ài)奇藝的另一個(gè)優(yōu)勢是對廣告的審核不是很?chē)栏瘛?br /> 支持賬號:很多平臺前期還是不帶廣告的,甚至軟廣告也是不允許的。帳上來(lái)后,又軟又寬。此外,很多平臺的級別也越高,單日發(fā)布的數量也越高。比如愛(ài)奇藝開(kāi)設了愛(ài)奇藝的自媒體賬戶(hù),單日最多可以募集100個(gè)賬戶(hù),愛(ài)奇藝賬戶(hù)也有三五個(gè)。足夠的!總之,要想做好,首先要磨礪自己的工具。
第四步:視頻的批量制作
要做這個(gè)視頻聚合排名,必須有大量的視頻。日產(chǎn) 300+ 視頻怎么樣?以下是三種方法:
方法一:制作一個(gè)長(cháng)視頻,然后用視頻分割工具分割成20-40秒左右!
常用的叫視頻編輯專(zhuān)家,而且是免費的!比如我們把一個(gè)準備好的視頻分成240多個(gè):
方法二:使用Silhouette(Byte公司)和妙劍(騰訊公司)。兩款免費工具都有一鍵拍攝和圖文拍攝功能!
方法三:采集下載或制作大量圖片,然后使用會(huì )聲會(huì )影等工具制作帶有圖片的視頻,然后進(jìn)行分割。
其實(shí)上面的方法就夠了,還有一個(gè)很好的辦法就是用一張圖片或者幾張圖片生成無(wú)限視頻上傳。不過(guò)這個(gè)方法僅限于愛(ài)奇藝,這里就不介紹了!總之,第三步的目的就是制作大量的視頻。當然,如果能制作出有針對性的高質(zhì)量視頻就更好了。如果做不到,就制作一些垃圾視頻進(jìn)行宣傳(以上方法)
第五步:將關(guān)鍵詞庫與視頻內容進(jìn)行匹配
為了方便發(fā)布,我們需要提前制作視頻標題。比如每天要發(fā)布300個(gè)視頻,就需要準備300個(gè)標題!準備將視頻批量重命名為準備好的標題:
批量重命名工具一
批量重命名工具二
上述兩個(gè)工具中的第二個(gè)很簡(jiǎn)單,第一個(gè)復雜而強大。一般小白可以用第二個(gè)!
第 6 步:發(fā)布視頻
這一步比較簡(jiǎn)單。大家仔細研究各個(gè)平臺的規則。然后,除了標題中的關(guān)鍵詞意外,其他可以填寫(xiě)關(guān)鍵詞的地方,比如視頻介紹,標簽等!
補充:
1、如果搜索結果中沒(méi)有視頻聚合怎么辦?
大量相關(guān)關(guān)鍵詞視頻發(fā)布后,視頻聚合肯定會(huì )出現。而且操作越多,視頻聚合排名就越好,很多時(shí)候可以搶到第一。
2、視頻聚合排名還能做什么?
其實(shí)操作起來(lái)你會(huì )發(fā)現,視頻聚合可以搶到競技關(guān)鍵詞的流量,單條視頻也可以搶到長(cháng)尾關(guān)鍵詞的流量。所以單個(gè)視頻的相關(guān)關(guān)鍵詞排版也是必須要做的!
3、視頻排名晚了又掉線(xiàn)怎么辦?
一般優(yōu)質(zhì)視頻的數據好的話(huà),可以繼續排名,但垃圾視頻的排名是基于時(shí)效性的。如果有很多競爭對手,他們就會(huì )下降。這個(gè)時(shí)候,繼續補充!金額大的話(huà),對方根本看不到影子!
最后,奉勸各位做流量的人,有方法一定要大力實(shí)施。吸引粉絲和引流沒(méi)有困難。關(guān)鍵詞 就看你的執行力和放大力了!
無(wú)情的執行和大規模擴張是成功的核心。我們很多學(xué)員都達到了3000+的月粉絲數,厲害的人一個(gè)月就可以填滿(mǎn)一個(gè)VX。目前微信好友在線(xiàn)已改為10000,但被動(dòng)家庭成員數量也有限。我們可以多準備幾個(gè)VX號進(jìn)行操作。也可以先轉移到QQ或群甚至公眾號。這種方法也可以用于品牌曝光、負面信息壓制、服務(wù)信息推廣。 查看全部
文章實(shí)時(shí)采集(引流方法最常用的就是寫(xiě)文章、做互推這三個(gè)主要方法)
很多人到處學(xué)習招攬粉絲的方法和技巧,卻不知道“一招鮮,吃遍天際”。仔細觀(guān)察,你會(huì )發(fā)現很多大咖往往只用兩種技巧來(lái)做流量。很多人經(jīng)常問(wèn)我經(jīng)常用什么方法引流。最常用的引流方式就是寫(xiě)文章、制作視頻、互推三種方式!縱觀(guān)整個(gè)互聯(lián)網(wǎng),目前的流量類(lèi)型準確率最高。是搜索流量,也是轉化率最高的流量。為什么?
搜索流量是轉化率最高的流量
用戶(hù)搜索的關(guān)鍵詞收錄隱藏的需求。例如,如果有人搜索“短視頻是如何流行起來(lái)的?”,他們想了解短視頻的底層邏輯和方法技巧。如果你在做短視頻培訓,那么抓住搜索這些詞的人就等于抓住了他們。潛在客戶(hù)!
搜索流量在互聯(lián)網(wǎng)上無(wú)處不在,因為互聯(lián)網(wǎng)的特點(diǎn)之一就是數據量大。如果數據很大,則需要檢索。如果需要檢索,可以做SEO優(yōu)化,搶搜索流量!許多人對搜索流量的看法很狹窄。理解為搜索引擎流量。其實(shí)電商平臺也有搜索流量,這也需要關(guān)鍵詞搜索排名優(yōu)化。以抖音為代表的去中心化,基于標簽定位的流量池分布的流量模式也有搜索流量。
據官方報道:抖音目前日活躍用戶(hù)搜索量超過(guò)4億,未來(lái)肯定還會(huì )更多。
其實(shí)只要大家掌握了搜索的原理和核心,很多平臺上的搜索做法都是大同小異的。以百度為例。2015年以來(lái),百度90%的搜索流量都集中在手機上。近年來(lái),隨著(zhù)短視頻和直播的興起,百度搜索結果也出現在視頻聚合排名、小視頻聚合排名,甚至直播排名中!

比如我們搜索關(guān)鍵詞這樣的視頻制作,除了競價(jià)廣告,排名第一的是視頻聚合。然后下拉,還有小視頻聚合排名和直播聚合排名:


運營(yíng)視頻聚合排名搶占搜索流量
也就是說(shuō),如果我們發(fā)布視頻(橫豎屏)或者開(kāi)直播相關(guān)關(guān)鍵詞,我們就會(huì )被百度收錄,有機會(huì )參與百度搜索結果的排名!經(jīng)過(guò)大量的測試和研究,我們發(fā)現視頻聚合排名特別適合競爭激烈的關(guān)鍵詞排名,基本可以進(jìn)入前幾名。通過(guò)操作好多個(gè)詞,它們可以在自然搜索結果中排名第一。
目前,操作視頻聚合排名搶占搜索流量也很簡(jiǎn)單。主要有以下幾個(gè)步驟:
第一步:用戶(hù)需求數據分析+關(guān)鍵詞挖掘
通過(guò)需求分析,弄清楚你的潛在客戶(hù)類(lèi)型,進(jìn)而深入挖掘用戶(hù)需求甚至痛點(diǎn)。然后從需求的角度,深入挖掘相關(guān)的關(guān)鍵詞和長(cháng)尾關(guān)鍵詞,構建自己的關(guān)鍵詞庫;常用工具有:站長(cháng)工具、愛(ài)站網(wǎng)、5118網(wǎng)、百度指數、百度關(guān)鍵詞規劃師、搜索引擎下拉關(guān)鍵詞、微信索引、抖音海量索引(查詢(xún)抖音關(guān)鍵詞搜索數量)等。
例如,要采集各種搜索框下拉關(guān)鍵詞 和相關(guān)搜索關(guān)鍵詞,我們使用:

當然,目前比較好用的工具有站長(cháng)工具大數據平臺、愛(ài)站net大數據、5118大數據工具。這三個(gè)工具都是收費的。如果你做一個(gè)單一的數據挖掘,你可以去某個(gè)寶藏。電商平臺可以租用賬號,也可以讓他們代為挖礦!
第 2 步:構建您自己的 關(guān)鍵詞 庫!
第三步:注冊視頻平臺賬號并維護賬號
可以參與視頻聚合的常見(jiàn)平臺有:好看視頻、愛(ài)奇藝、優(yōu)酷、騰訊視頻、獨小視(全民小視頻)、微視、小紅書(shū)、B站、搜狐視頻等,其中百度旗下值得關(guān)注:Goodview Video、獨小視等,特別推薦百度投資愛(ài)奇藝。愛(ài)奇藝的另一個(gè)優(yōu)勢是對廣告的審核不是很?chē)栏瘛?br /> 支持賬號:很多平臺前期還是不帶廣告的,甚至軟廣告也是不允許的。帳上來(lái)后,又軟又寬。此外,很多平臺的級別也越高,單日發(fā)布的數量也越高。比如愛(ài)奇藝開(kāi)設了愛(ài)奇藝的自媒體賬戶(hù),單日最多可以募集100個(gè)賬戶(hù),愛(ài)奇藝賬戶(hù)也有三五個(gè)。足夠的!總之,要想做好,首先要磨礪自己的工具。
第四步:視頻的批量制作
要做這個(gè)視頻聚合排名,必須有大量的視頻。日產(chǎn) 300+ 視頻怎么樣?以下是三種方法:
方法一:制作一個(gè)長(cháng)視頻,然后用視頻分割工具分割成20-40秒左右!

常用的叫視頻編輯專(zhuān)家,而且是免費的!比如我們把一個(gè)準備好的視頻分成240多個(gè):

方法二:使用Silhouette(Byte公司)和妙劍(騰訊公司)。兩款免費工具都有一鍵拍攝和圖文拍攝功能!
方法三:采集下載或制作大量圖片,然后使用會(huì )聲會(huì )影等工具制作帶有圖片的視頻,然后進(jìn)行分割。

其實(shí)上面的方法就夠了,還有一個(gè)很好的辦法就是用一張圖片或者幾張圖片生成無(wú)限視頻上傳。不過(guò)這個(gè)方法僅限于愛(ài)奇藝,這里就不介紹了!總之,第三步的目的就是制作大量的視頻。當然,如果能制作出有針對性的高質(zhì)量視頻就更好了。如果做不到,就制作一些垃圾視頻進(jìn)行宣傳(以上方法)
第五步:將關(guān)鍵詞庫與視頻內容進(jìn)行匹配
為了方便發(fā)布,我們需要提前制作視頻標題。比如每天要發(fā)布300個(gè)視頻,就需要準備300個(gè)標題!準備將視頻批量重命名為準備好的標題:


批量重命名工具一

批量重命名工具二
上述兩個(gè)工具中的第二個(gè)很簡(jiǎn)單,第一個(gè)復雜而強大。一般小白可以用第二個(gè)!
第 6 步:發(fā)布視頻
這一步比較簡(jiǎn)單。大家仔細研究各個(gè)平臺的規則。然后,除了標題中的關(guān)鍵詞意外,其他可以填寫(xiě)關(guān)鍵詞的地方,比如視頻介紹,標簽等!
補充:
1、如果搜索結果中沒(méi)有視頻聚合怎么辦?
大量相關(guān)關(guān)鍵詞視頻發(fā)布后,視頻聚合肯定會(huì )出現。而且操作越多,視頻聚合排名就越好,很多時(shí)候可以搶到第一。
2、視頻聚合排名還能做什么?
其實(shí)操作起來(lái)你會(huì )發(fā)現,視頻聚合可以搶到競技關(guān)鍵詞的流量,單條視頻也可以搶到長(cháng)尾關(guān)鍵詞的流量。所以單個(gè)視頻的相關(guān)關(guān)鍵詞排版也是必須要做的!
3、視頻排名晚了又掉線(xiàn)怎么辦?
一般優(yōu)質(zhì)視頻的數據好的話(huà),可以繼續排名,但垃圾視頻的排名是基于時(shí)效性的。如果有很多競爭對手,他們就會(huì )下降。這個(gè)時(shí)候,繼續補充!金額大的話(huà),對方根本看不到影子!
最后,奉勸各位做流量的人,有方法一定要大力實(shí)施。吸引粉絲和引流沒(méi)有困難。關(guān)鍵詞 就看你的執行力和放大力了!
無(wú)情的執行和大規模擴張是成功的核心。我們很多學(xué)員都達到了3000+的月粉絲數,厲害的人一個(gè)月就可以填滿(mǎn)一個(gè)VX。目前微信好友在線(xiàn)已改為10000,但被動(dòng)家庭成員數量也有限。我們可以多準備幾個(gè)VX號進(jìn)行操作。也可以先轉移到QQ或群甚至公眾號。這種方法也可以用于品牌曝光、負面信息壓制、服務(wù)信息推廣。
文章實(shí)時(shí)采集(再看看被搬的時(shí)間,還好搬文章的人用是博客園)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2021-12-09 15:01
看看它被移動(dòng)的時(shí)間。還好搬家文章的人用的是博客園而不是自己的程序,不然可以隨意修改文章的發(fā)布時(shí)間:
先說(shuō)一下那個(gè)文章的背景吧,那個(gè)文章就是剛出來(lái)工作(實(shí)習)的博主,實(shí)習結束前,他所見(jiàn)所聞所見(jiàn)所聞。寫(xiě)一點(diǎn)Laravel admin的小知識。
沒(méi)想到,就這樣被搬走了。其實(shí)博主并不反對搬文章,而是應該放個(gè)原文鏈接。這是對原作者的尊重。
其實(shí)采集這樣背著(zhù)文章的人還有很多。比如一個(gè)博主所在的QQ群是這樣的:
由于某些搜索引擎的算法,采集文章的一些博客的權重會(huì )更高,而真正努力寫(xiě)好每篇博文的博客的權重都比收錄高。但。
所以這會(huì )導致很多博客致力于采集文章。
就像現在的博主,百度搜索到Laravel-admin到第三頁(yè),我沒(méi)有看到博主的原創(chuàng )文章,但是我可以看到去掉的文章,因為權重博客園比博主強很多,一個(gè)只有少量流量的博客。
不過(guò)百度不應該因為網(wǎng)站的權重太高而忽略了一些動(dòng)人的文章的存在。
網(wǎng)上很大,其實(shí)很可能不止這個(gè)文章被搬走了,很多博客也被搬走了文章。
如果不注意,可能會(huì )導致一些原創(chuàng )博主不公開(kāi)自己的文章。
雖然博主經(jīng)常寫(xiě)一些關(guān)于如何自動(dòng)采集的文章,但是博主并沒(méi)有在任何系統中使用采集。
自動(dòng)采集可以學(xué)習,也可以用于一些數據的統計。但是這種直接刪除文章還是很煩的。并且沒(méi)有原創(chuàng )地址的鏈接。
最后說(shuō)一下通過(guò)技術(shù)手段避免被文章傳輸的方法。
如果是手動(dòng)復制,然后貼在自己的博客上,基本就停不下來(lái)了。
如果使用自動(dòng)采集(爬蟲(chóng)),可以限制訪(fǎng)問(wèn)頻率等。當然,如果對方只是爬了一篇文章的文章,也是必然的,必然的。
最重要的是給每張圖片加水印。推薦使用對象存儲(好像現在市面上的云服務(wù)商都有這個(gè),騰訊和阿里都有,七牛應該也有)。
它不會(huì )破壞原創(chuàng )圖像,只是添加訪(fǎng)問(wèn)樣式。
比如博主用阿里的:
當然,加水印也不是100%避免被采集,因為水印也可以通過(guò)技術(shù)手段去除。除非整個(gè)圖像都是水印。 查看全部
文章實(shí)時(shí)采集(再看看被搬的時(shí)間,還好搬文章的人用是博客園)
看看它被移動(dòng)的時(shí)間。還好搬家文章的人用的是博客園而不是自己的程序,不然可以隨意修改文章的發(fā)布時(shí)間:

先說(shuō)一下那個(gè)文章的背景吧,那個(gè)文章就是剛出來(lái)工作(實(shí)習)的博主,實(shí)習結束前,他所見(jiàn)所聞所見(jiàn)所聞。寫(xiě)一點(diǎn)Laravel admin的小知識。
沒(méi)想到,就這樣被搬走了。其實(shí)博主并不反對搬文章,而是應該放個(gè)原文鏈接。這是對原作者的尊重。
其實(shí)采集這樣背著(zhù)文章的人還有很多。比如一個(gè)博主所在的QQ群是這樣的:

由于某些搜索引擎的算法,采集文章的一些博客的權重會(huì )更高,而真正努力寫(xiě)好每篇博文的博客的權重都比收錄高。但。
所以這會(huì )導致很多博客致力于采集文章。
就像現在的博主,百度搜索到Laravel-admin到第三頁(yè),我沒(méi)有看到博主的原創(chuàng )文章,但是我可以看到去掉的文章,因為權重博客園比博主強很多,一個(gè)只有少量流量的博客。
不過(guò)百度不應該因為網(wǎng)站的權重太高而忽略了一些動(dòng)人的文章的存在。
網(wǎng)上很大,其實(shí)很可能不止這個(gè)文章被搬走了,很多博客也被搬走了文章。
如果不注意,可能會(huì )導致一些原創(chuàng )博主不公開(kāi)自己的文章。
雖然博主經(jīng)常寫(xiě)一些關(guān)于如何自動(dòng)采集的文章,但是博主并沒(méi)有在任何系統中使用采集。
自動(dòng)采集可以學(xué)習,也可以用于一些數據的統計。但是這種直接刪除文章還是很煩的。并且沒(méi)有原創(chuàng )地址的鏈接。
最后說(shuō)一下通過(guò)技術(shù)手段避免被文章傳輸的方法。
如果是手動(dòng)復制,然后貼在自己的博客上,基本就停不下來(lái)了。
如果使用自動(dòng)采集(爬蟲(chóng)),可以限制訪(fǎng)問(wèn)頻率等。當然,如果對方只是爬了一篇文章的文章,也是必然的,必然的。
最重要的是給每張圖片加水印。推薦使用對象存儲(好像現在市面上的云服務(wù)商都有這個(gè),騰訊和阿里都有,七牛應該也有)。
它不會(huì )破壞原創(chuàng )圖像,只是添加訪(fǎng)問(wèn)樣式。
比如博主用阿里的:

當然,加水印也不是100%避免被采集,因為水印也可以通過(guò)技術(shù)手段去除。除非整個(gè)圖像都是水印。
文章實(shí)時(shí)采集(【Python爬蟲(chóng)+數據分析】實(shí)時(shí)采集最新疫情數據,繪制可視化地圖分析 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 168 次瀏覽 ? 2021-12-09 07:14
)
文章內容
一、 寫(xiě)在前面
兄弟們,最近有各種流行病。下班后盡量少去人多的地方。出門(mén)記得戴口罩。
所以如果你不出去,在家什么都不做,你只能學(xué)到更多的新東西。今天,我就爬取國內的疫情數據,看看國內的疫情情況。最后,讓我們將數據可視化并制作可視化地圖。
二、準備2.1、開(kāi)發(fā)環(huán)境
如果您不知道如何安裝軟件、模塊或其他基本和簡(jiǎn)單的問(wèn)題,請參閱此處:Python 入門(mén)集合
我還在本文末尾附上了視頻教程。文章看不懂,可以看視頻。
2.2、知識點(diǎn)爬蟲(chóng)基本流程jsonrequests在爬蟲(chóng)中發(fā)送網(wǎng)絡(luò )請求,pandas表單處理/保存數據pyecharts可視化三、爬蟲(chóng)部分3.1、爬蟲(chóng)過(guò)程明確要求
我們在爬什么?
分析數據從何而來(lái)#/
使用開(kāi)發(fā)者工具抓包(數據包)分析代碼流
?、? 發(fā)送訪(fǎng)問(wèn)請求網(wǎng)站
?、? 獲取數據
?、? 分析數據
xpath css re json bs4(已過(guò)時(shí))
python語(yǔ)言的json字典類(lèi)型數據{key 1: value 1, key 2: value 2, key 3: value 3}
?、? 保存數據3.2、數據采集
導入模塊
import time # 時(shí)間模塊
import json # json包
import requests # 網(wǎng)絡(luò )請求庫 第三方 pip
import pandas as pd # 數據處理 第三庫 pip
目標網(wǎng)址
url = 'https://view.inews.qq.com/g2/g ... 25int(time.time()*1000)
模擬瀏覽器發(fā)送請求并得到響應
html = requests.get(url)
分析網(wǎng)頁(yè)并提取數據
# json類(lèi)型轉換
data = json.loads(html.json()['data'])
china_data = data['areaTree'][0]['children']
data_set = []
for i in china_data:
data_dict = {}
# 地區名稱(chēng)
data_dict['province'] = i['name']
# 疫情數據
# 新增確診
data_dict['nowConfirm'] = i['total']['nowConfirm']
data_dict['confirm'] = i['total']['confirm']
data_dict['dead'] = i['total']['dead']
data_dict['heal'] = i['total']['heal']
data_dict['deadRate'] = i['total']['deadRate']
data_dict['healRate'] = i['total']['healRate']
data_set.append(data_dict)
df = pd.DataFrame(data_set)
df
保存數據
df.to_csv(r'data.csv')
四、數據可視化部分
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Pie,Map,Grid
df2 = df.sort_values(by=['nowConfirm'],ascending=False)[:9]
df2
[list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())]
pie = (
Pie()
.add(
"",
[list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())],
radius = ["10%","30%"]
)
.set_global_opts(
legend_opts=opts.LegendOpts(orient="vertical", pos_top="70%", pos_left="70%"),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter=": {c}"))
)
pie.render_notebook()
死亡率和治愈率
line = (
Line()
.add_xaxis(list(df['province'].values))
.add_yaxis("治愈率", df['healRate'].values.tolist())
.add_yaxis("死亡率", df['deadRate'].values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="死亡率與治愈率"),
)
)
line.render_notebook()
各地區確診及死亡人數
各地區確診病例數
china_map = (
Map()
.add("現有確診", [list(i) for i in zip(df['province'].values.tolist(),df['nowConfirm'].values.tolist())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="各地區確診人數"),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
)
)
china_map.render('a.html')
五、視頻教程
怕是零基礎不好。已經(jīng)為此發(fā)布了相關(guān)的視頻教程。你可以自己看。
【Python爬蟲(chóng)+數據分析】實(shí)時(shí)采集最新疫情數據,繪制可視化地圖分析!
六、寫(xiě)在最后
兄弟們,如果覺(jué)得對你有幫助,別忘了給你的臉點(diǎn)個(gè)贊,評論,采集,連續四次轉發(fā)哦~
查看全部
文章實(shí)時(shí)采集(【Python爬蟲(chóng)+數據分析】實(shí)時(shí)采集最新疫情數據,繪制可視化地圖分析
)
文章內容
一、 寫(xiě)在前面
兄弟們,最近有各種流行病。下班后盡量少去人多的地方。出門(mén)記得戴口罩。

所以如果你不出去,在家什么都不做,你只能學(xué)到更多的新東西。今天,我就爬取國內的疫情數據,看看國內的疫情情況。最后,讓我們將數據可視化并制作可視化地圖。

二、準備2.1、開(kāi)發(fā)環(huán)境
如果您不知道如何安裝軟件、模塊或其他基本和簡(jiǎn)單的問(wèn)題,請參閱此處:Python 入門(mén)集合
我還在本文末尾附上了視頻教程。文章看不懂,可以看視頻。
2.2、知識點(diǎn)爬蟲(chóng)基本流程jsonrequests在爬蟲(chóng)中發(fā)送網(wǎng)絡(luò )請求,pandas表單處理/保存數據pyecharts可視化三、爬蟲(chóng)部分3.1、爬蟲(chóng)過(guò)程明確要求
我們在爬什么?
分析數據從何而來(lái)#/
使用開(kāi)發(fā)者工具抓包(數據包)分析代碼流
?、? 發(fā)送訪(fǎng)問(wèn)請求網(wǎng)站
?、? 獲取數據
?、? 分析數據
xpath css re json bs4(已過(guò)時(shí))
python語(yǔ)言的json字典類(lèi)型數據{key 1: value 1, key 2: value 2, key 3: value 3}
?、? 保存數據3.2、數據采集
導入模塊
import time # 時(shí)間模塊
import json # json包
import requests # 網(wǎng)絡(luò )請求庫 第三方 pip
import pandas as pd # 數據處理 第三庫 pip
目標網(wǎng)址
url = 'https://view.inews.qq.com/g2/g ... 25int(time.time()*1000)
模擬瀏覽器發(fā)送請求并得到響應
html = requests.get(url)
分析網(wǎng)頁(yè)并提取數據
# json類(lèi)型轉換
data = json.loads(html.json()['data'])
china_data = data['areaTree'][0]['children']
data_set = []
for i in china_data:
data_dict = {}
# 地區名稱(chēng)
data_dict['province'] = i['name']
# 疫情數據
# 新增確診
data_dict['nowConfirm'] = i['total']['nowConfirm']
data_dict['confirm'] = i['total']['confirm']
data_dict['dead'] = i['total']['dead']
data_dict['heal'] = i['total']['heal']
data_dict['deadRate'] = i['total']['deadRate']
data_dict['healRate'] = i['total']['healRate']
data_set.append(data_dict)
df = pd.DataFrame(data_set)
df
保存數據
df.to_csv(r'data.csv')
四、數據可視化部分
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Pie,Map,Grid
df2 = df.sort_values(by=['nowConfirm'],ascending=False)[:9]
df2
[list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())]
pie = (
Pie()
.add(
"",
[list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())],
radius = ["10%","30%"]
)
.set_global_opts(
legend_opts=opts.LegendOpts(orient="vertical", pos_top="70%", pos_left="70%"),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter=": {c}"))
)
pie.render_notebook()
死亡率和治愈率
line = (
Line()
.add_xaxis(list(df['province'].values))
.add_yaxis("治愈率", df['healRate'].values.tolist())
.add_yaxis("死亡率", df['deadRate'].values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="死亡率與治愈率"),
)
)
line.render_notebook()
各地區確診及死亡人數
各地區確診病例數
china_map = (
Map()
.add("現有確診", [list(i) for i in zip(df['province'].values.tolist(),df['nowConfirm'].values.tolist())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="各地區確診人數"),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
)
)
china_map.render('a.html')
五、視頻教程
怕是零基礎不好。已經(jīng)為此發(fā)布了相關(guān)的視頻教程。你可以自己看。
【Python爬蟲(chóng)+數據分析】實(shí)時(shí)采集最新疫情數據,繪制可視化地圖分析!
六、寫(xiě)在最后
兄弟們,如果覺(jué)得對你有幫助,別忘了給你的臉點(diǎn)個(gè)贊,評論,采集,連續四次轉發(fā)哦~
文章實(shí)時(shí)采集(一個(gè)個(gè)人總結性的原則采集中的問(wèn)題以及相應的含義)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2021-11-30 02:02
前言
今天無(wú)意間刷新了技術(shù)公眾號,看到了這樣一篇文章的文章,是基于Flink關(guān)于Mysql Binlog數據的計劃采集。我看了實(shí)際方法和具體操作。有一些不充分的考慮。情況,缺少一些操作來(lái)處理實(shí)際情況。筆者之前也做過(guò)一些類(lèi)似的采集工具實(shí)踐文章,但是沒(méi)有做一個(gè)整體的系統總結,所以想知道是否可以做一個(gè)個(gè)人總結文章,總結Binlog采集中的問(wèn)題以及相應的解決方案?
可能很多人對 Binlog 還不夠了解。有些人可能會(huì )膚淺地想:“不是mysql生成的,它有固定結構的日志。把數據采集帶過(guò)來(lái),然后做成數據,登陸,有什么難的?”
的確,它本質(zhì)上確實(shí)是一個(gè)日志,但實(shí)際上,關(guān)于Binlog采集,從場(chǎng)景分析到技術(shù)選擇,整體里面還有很多不為人知的坑,所以不要小看它。
作者寫(xiě)這篇文章,目的是為了展示Binlog數據采集在實(shí)際工作中開(kāi)發(fā)過(guò)程的原理、注意事項以及可能出現的問(wèn)題。也會(huì )有作者的一些個(gè)人性格??偨Y一下數據采集中的原理,供大家參考,都是干貨。
讓我們開(kāi)始吧!
個(gè)人總結原則
首先拋開(kāi)技術(shù)框架的討論,個(gè)人總結一下Binlog日志數據采集的主要原理:
分別說(shuō)明這三個(gè)原則的具體含義
原則一
在數據采集中,數據登陸一般采用時(shí)間分區進(jìn)行登陸,所以我們需要確定一個(gè)固定的時(shí)間戳作為時(shí)間分區的基本時(shí)間序列。
在這種情況下,業(yè)務(wù)數據上的時(shí)間戳字段,無(wú)論是從實(shí)際開(kāi)發(fā)中獲取時(shí)間戳的角度,還是實(shí)際表中都會(huì )有這樣的時(shí)間戳,似乎都不可能所有表都完全滿(mǎn)足.
舉個(gè)反例:
表:業(yè)務(wù)時(shí)間戳
表 A:create_time、update_time
表 B:創(chuàng )建時(shí)間
表 C:create_at
表 D:無(wú)
像這樣的情況,理論上可以通過(guò)限制RD和DBA在設計表時(shí)對表結構的正則化來(lái)統一和限制時(shí)間戳和命名,但在實(shí)際工作中,這種情況基本不可能做到我相信很多讀者都會(huì )遇到這種情況。
可能很多做數據采集的同學(xué)會(huì )想,能不能請他們制定標準?
我個(gè)人的看法是,是的,但大數據的底層數據采集并不是完全依賴(lài)于這種相互開(kāi)發(fā)的標準。原因有以下三個(gè):
因此,如果要使用唯一的固定時(shí)間序列,必須與業(yè)務(wù)數據分離,并且我們想要的時(shí)間戳不受業(yè)務(wù)數據變化的影響。
原則二
在業(yè)務(wù)數據庫中,必然存在表結構變化的問(wèn)題。大多數情況下是添加列,但也有列重命名、列刪除等情況,字段變化的順序不可控。
這個(gè)原則想描述的是,導入數據倉庫的表必須適應數據庫表的各種操作,以保持其可用性和列數據的正確性。
原則三
這個(gè)數據可以追溯,包括兩個(gè)方面
第一個(gè)描述是在采集binlog采集端,可以再次按下位置采集binlog。
第二個(gè)描述是消費binlog登陸結束時(shí),可以通過(guò)重復消費來(lái)重新登陸數據。
這是作者的個(gè)人總結,無(wú)論選擇什么樣的技術(shù)選擇進(jìn)行組合施工,都需要具備這些原則。
實(shí)施方案及具體操作
技術(shù)架構:Debezium + Confluent + Kafka + OSS/S3 + Hive
基于原理一的解決方案
Debezium 提供了 New Record State Extraction 的配置選項,相當于提供了一個(gè)轉換算子來(lái)提取 binlog 中的元數據。
對于0.10版本的配置,可以提取表、版本、連接器、名稱(chēng)、ts_ms、db、server_id、file、pos、row等binlog元數據信息。
其中ts_ms是binlog日志的生成時(shí)間,這個(gè)是binlog元數據,可以應用到所有數據表,這個(gè)固定的時(shí)間戳可以在不完全了解數據表內部結構的情況下,完全實(shí)現我們的原理一。
關(guān)于Debezium,不同版本之前的配置參數可能不同。讀者如果需要練習,需要在官方文檔中確認對應版本的配置參數。
對于其他框架,比如市面上比較常用的Canal,或者讀者需要自己開(kāi)發(fā)數據采集程序,建議提取binlog元數據,在這個(gè)過(guò)程中可能會(huì )用到,后續流程。到達。
基于原理2的解決方案
對于Hive,目前主流的數據存儲格式有Parquet、ORC、Json、Avro。
暫且不談數據存儲效率的討論。
對于前兩種數據格式,是列存儲。也就是說(shuō),這兩種數據格式的數據讀取將嚴格依賴(lài)于我們數據表中數據的存儲順序。這種數據格式不能滿(mǎn)足數據列的靈活性。添加、刪除等操作。
Avro 格式是行存儲,但需要依賴(lài) Schema Register 服務(wù)??紤]到Hive的數據表讀取完全依賴(lài)于外部服務(wù),風(fēng)險太大。
最后決定使用Json格式進(jìn)行數據存儲。這種讀取和存儲效率雖然沒(méi)有其他格式高,但是可以保證業(yè)務(wù)數據的任何變化都可以在hive中讀取。
Debezium組件采集binlog的數據為json格式,符合預期的設計方案,可以解決原理2帶來(lái)的問(wèn)題。
對于其他框架,比如市面上比較常用的Canal,可以設置成Json數據格式進(jìn)行傳輸,或者讀者如果需要自己開(kāi)發(fā)數據采集程序,同樣的道理是真的。
基于原理三的解決方案
在采集binlog采集端,可以再次按下位置采集binlog。
官方 Debezium 網(wǎng)站 上也提供了該方案的實(shí)現。需要一般說(shuō)明。需要Kafkacat工具。
對于采集的每個(gè)mysql實(shí)例,在創(chuàng )建數據采集任務(wù)時(shí),Confluent都會(huì )創(chuàng )建連接器的采集元數據的主題(即采集程序) 因此,
對應的時(shí)間戳、文件位置和位置都會(huì )存儲在里面。您可以通過(guò)修改此數據來(lái)重置 采集binlog 日志的位置。
值得注意的是,這個(gè)操作的時(shí)間節點(diǎn)也是有限制的,這和mysql的binlog日志的存儲周期有關(guān),所以用這種方式回溯的時(shí)候,需要確認mysql日志還存在。
將數據放回地面以供重復使用。
因為這個(gè)方案是基于Kafka的,所以網(wǎng)上有很多Kafka重新設計消費抵消消費站點(diǎn)的方案,這里不再贅述。
供讀者自行實(shí)現,需要確認的選定MQ支持此功能。
#how_to_change_the_offsets_of_the_source_database
業(yè)務(wù)場(chǎng)景影響下的重要操作
本部分僅描述如何在作者的技術(shù)架構下實(shí)現以下操作。讀者可以根據他們選擇的技術(shù)組件探索不同的技術(shù)解決方案。
數據庫分庫分表情況
基于Debezium的架構,一個(gè)Source只能對應一個(gè)采集的mysql實(shí)例。對于同一個(gè)實(shí)例上的表拆分,您可以使用 Debezium Topic Routing 功能。
通過(guò)采集過(guò)濾binlog時(shí),將需要采集的表按照正則匹配寫(xiě)入指定topic。
在子庫的情況下,還需要在sink端添加RegexRouter變換算子,進(jìn)行topic之間的合并和寫(xiě)入操作。
數據增量采集和全量采集
對于采集組件,當前的配置是基于增量為默認的,所以無(wú)論選擇Debezium還是Canal,正常配置都可以。
但是,在某些情況下,會(huì )出現需要采集 的整個(gè)表的情況。作者還給出了全量數據的方案采集。
選項一
Debezium本身自帶這樣的功能,你需要
將snapshot.mode參數選擇設置為when_needed,這樣就可以做全表的采集操作。
在官方文檔中,這里的參數配置有更詳細的說(shuō)明。
#快照
選項二
同時(shí)使用sqoop和增量采集。
該方案適用于已經(jīng)有很多表數據,但當前binlog數據頻率不高的情況,使用該方案。
值得注意的是,有兩點(diǎn):
脫機重復數據刪除條件
數據落地后,通過(guò)json表映射出binlog原創(chuàng )數據,那么問(wèn)題來(lái)了,我們如何找到最新的那條數據呢?
或許我們可以簡(jiǎn)單的想,用剛才提取的ts_ms,然后再做反演,是不是就可以了?
在大多數情況下,這確實(shí)是可能的。
但是在實(shí)際開(kāi)發(fā)中,筆者發(fā)現這樣的情況并不能滿(mǎn)足所有的情況,因為在binlog中,可能有兩個(gè)數據和ts_ms和PK一樣,但是確實(shí)不同。
那么我們如何同時(shí)解析兩條數據呢?
答案就在上面,我們只是建議提取所有 binlog 元數據。
SELECT *
FROM
(
SELECT *,
row_number() over(partition BY t.id ORDER BY t.`__ts_ms` DESC,t.`__file` DESC,cast(t.`__pos` AS int) DESC) AS order_by
FROM test t
WHERE dt='{pt}'
AND hour='{now_hour}'
) t1
WHERE t1.order_by = 1
解釋一下這個(gè)sql中row_number的條件
__ts_ms:binlog中的ts_ms,即事件時(shí)間。
__file:是binlog數據的文件名。
__pos:是binlog中數據所在文件在文件中的位置,為數據類(lèi)型。
這樣組合條件取出的數據是最新的。
有讀者可能會(huì )問(wèn),如果這條數據被刪除了怎么辦?你這樣檢索出來(lái)的數據是不是錯了?
這個(gè)Debezium也有相應的操作,有相應的配置選項讓你選擇如何處理刪除行為的binlog數據。
作為給大家參考,作者選擇了rewrite的參數配置,這樣上面的sql最外層只需要判斷“delete='false'”是正確的數據即可。
架構總結
在技??術(shù)選擇和整體細節結構上,作者始終堅持一個(gè)原則——
過(guò)程應該盡可能簡(jiǎn)單,而不是越簡(jiǎn)單越好。數據鏈路越長(cháng),可能出現的問(wèn)題鏈路就越多。后期的鎖死問(wèn)題和運維也會(huì )很困難。
所以筆者在技術(shù)選型上考慮了Flink+Kafka的方式,但是基于當時(shí)的情況,筆者并沒(méi)有選擇這樣的技術(shù)選型,筆者也詳細闡述了原因。
綜上所述,我當時(shí)就想到了 Flink。如果Flink不是基于平臺的開(kāi)發(fā)和運維監控,可以作為臨時(shí)解決方案,但如果后期在這樣的開(kāi)發(fā)過(guò)程下縫補了,就要多人開(kāi)發(fā)。很容易出問(wèn)題,或者大家都在這樣的程序框架下造輪子,造的越多越慢。而且后期的主要項目方向并沒(méi)有把Flink平臺化提上日程,所以也是考慮到了部分未來(lái)情況的選擇。
所以當我最終決定技術(shù)選擇的時(shí)候,我并沒(méi)有選擇 Flink。
結束語(yǔ)
這篇文章文章比較理論,也是對這個(gè)場(chǎng)景的技術(shù)理論總結。如果文章中還有其他不清楚的操作,可以參考作者之前的文章詳細代碼級操作。
技術(shù)架構方案有很多種。我只是選擇了其中之一來(lái)實(shí)施。也希望大家有其他的技術(shù)方案或理論進(jìn)行交流。請糾正我。 查看全部
文章實(shí)時(shí)采集(一個(gè)個(gè)人總結性的原則采集中的問(wèn)題以及相應的含義)
前言
今天無(wú)意間刷新了技術(shù)公眾號,看到了這樣一篇文章的文章,是基于Flink關(guān)于Mysql Binlog數據的計劃采集。我看了實(shí)際方法和具體操作。有一些不充分的考慮。情況,缺少一些操作來(lái)處理實(shí)際情況。筆者之前也做過(guò)一些類(lèi)似的采集工具實(shí)踐文章,但是沒(méi)有做一個(gè)整體的系統總結,所以想知道是否可以做一個(gè)個(gè)人總結文章,總結Binlog采集中的問(wèn)題以及相應的解決方案?
可能很多人對 Binlog 還不夠了解。有些人可能會(huì )膚淺地想:“不是mysql生成的,它有固定結構的日志。把數據采集帶過(guò)來(lái),然后做成數據,登陸,有什么難的?”
的確,它本質(zhì)上確實(shí)是一個(gè)日志,但實(shí)際上,關(guān)于Binlog采集,從場(chǎng)景分析到技術(shù)選擇,整體里面還有很多不為人知的坑,所以不要小看它。
作者寫(xiě)這篇文章,目的是為了展示Binlog數據采集在實(shí)際工作中開(kāi)發(fā)過(guò)程的原理、注意事項以及可能出現的問(wèn)題。也會(huì )有作者的一些個(gè)人性格??偨Y一下數據采集中的原理,供大家參考,都是干貨。
讓我們開(kāi)始吧!
個(gè)人總結原則
首先拋開(kāi)技術(shù)框架的討論,個(gè)人總結一下Binlog日志數據采集的主要原理:
分別說(shuō)明這三個(gè)原則的具體含義
原則一
在數據采集中,數據登陸一般采用時(shí)間分區進(jìn)行登陸,所以我們需要確定一個(gè)固定的時(shí)間戳作為時(shí)間分區的基本時(shí)間序列。
在這種情況下,業(yè)務(wù)數據上的時(shí)間戳字段,無(wú)論是從實(shí)際開(kāi)發(fā)中獲取時(shí)間戳的角度,還是實(shí)際表中都會(huì )有這樣的時(shí)間戳,似乎都不可能所有表都完全滿(mǎn)足.
舉個(gè)反例:
表:業(yè)務(wù)時(shí)間戳
表 A:create_time、update_time
表 B:創(chuàng )建時(shí)間
表 C:create_at
表 D:無(wú)
像這樣的情況,理論上可以通過(guò)限制RD和DBA在設計表時(shí)對表結構的正則化來(lái)統一和限制時(shí)間戳和命名,但在實(shí)際工作中,這種情況基本不可能做到我相信很多讀者都會(huì )遇到這種情況。
可能很多做數據采集的同學(xué)會(huì )想,能不能請他們制定標準?
我個(gè)人的看法是,是的,但大數據的底層數據采集并不是完全依賴(lài)于這種相互開(kāi)發(fā)的標準。原因有以下三個(gè):
因此,如果要使用唯一的固定時(shí)間序列,必須與業(yè)務(wù)數據分離,并且我們想要的時(shí)間戳不受業(yè)務(wù)數據變化的影響。
原則二
在業(yè)務(wù)數據庫中,必然存在表結構變化的問(wèn)題。大多數情況下是添加列,但也有列重命名、列刪除等情況,字段變化的順序不可控。
這個(gè)原則想描述的是,導入數據倉庫的表必須適應數據庫表的各種操作,以保持其可用性和列數據的正確性。
原則三
這個(gè)數據可以追溯,包括兩個(gè)方面
第一個(gè)描述是在采集binlog采集端,可以再次按下位置采集binlog。
第二個(gè)描述是消費binlog登陸結束時(shí),可以通過(guò)重復消費來(lái)重新登陸數據。
這是作者的個(gè)人總結,無(wú)論選擇什么樣的技術(shù)選擇進(jìn)行組合施工,都需要具備這些原則。
實(shí)施方案及具體操作
技術(shù)架構:Debezium + Confluent + Kafka + OSS/S3 + Hive
基于原理一的解決方案
Debezium 提供了 New Record State Extraction 的配置選項,相當于提供了一個(gè)轉換算子來(lái)提取 binlog 中的元數據。
對于0.10版本的配置,可以提取表、版本、連接器、名稱(chēng)、ts_ms、db、server_id、file、pos、row等binlog元數據信息。
其中ts_ms是binlog日志的生成時(shí)間,這個(gè)是binlog元數據,可以應用到所有數據表,這個(gè)固定的時(shí)間戳可以在不完全了解數據表內部結構的情況下,完全實(shí)現我們的原理一。
關(guān)于Debezium,不同版本之前的配置參數可能不同。讀者如果需要練習,需要在官方文檔中確認對應版本的配置參數。
對于其他框架,比如市面上比較常用的Canal,或者讀者需要自己開(kāi)發(fā)數據采集程序,建議提取binlog元數據,在這個(gè)過(guò)程中可能會(huì )用到,后續流程。到達。
基于原理2的解決方案
對于Hive,目前主流的數據存儲格式有Parquet、ORC、Json、Avro。
暫且不談數據存儲效率的討論。
對于前兩種數據格式,是列存儲。也就是說(shuō),這兩種數據格式的數據讀取將嚴格依賴(lài)于我們數據表中數據的存儲順序。這種數據格式不能滿(mǎn)足數據列的靈活性。添加、刪除等操作。
Avro 格式是行存儲,但需要依賴(lài) Schema Register 服務(wù)??紤]到Hive的數據表讀取完全依賴(lài)于外部服務(wù),風(fēng)險太大。
最后決定使用Json格式進(jìn)行數據存儲。這種讀取和存儲效率雖然沒(méi)有其他格式高,但是可以保證業(yè)務(wù)數據的任何變化都可以在hive中讀取。
Debezium組件采集binlog的數據為json格式,符合預期的設計方案,可以解決原理2帶來(lái)的問(wèn)題。
對于其他框架,比如市面上比較常用的Canal,可以設置成Json數據格式進(jìn)行傳輸,或者讀者如果需要自己開(kāi)發(fā)數據采集程序,同樣的道理是真的。
基于原理三的解決方案
在采集binlog采集端,可以再次按下位置采集binlog。
官方 Debezium 網(wǎng)站 上也提供了該方案的實(shí)現。需要一般說(shuō)明。需要Kafkacat工具。
對于采集的每個(gè)mysql實(shí)例,在創(chuàng )建數據采集任務(wù)時(shí),Confluent都會(huì )創(chuàng )建連接器的采集元數據的主題(即采集程序) 因此,
對應的時(shí)間戳、文件位置和位置都會(huì )存儲在里面。您可以通過(guò)修改此數據來(lái)重置 采集binlog 日志的位置。
值得注意的是,這個(gè)操作的時(shí)間節點(diǎn)也是有限制的,這和mysql的binlog日志的存儲周期有關(guān),所以用這種方式回溯的時(shí)候,需要確認mysql日志還存在。
將數據放回地面以供重復使用。
因為這個(gè)方案是基于Kafka的,所以網(wǎng)上有很多Kafka重新設計消費抵消消費站點(diǎn)的方案,這里不再贅述。
供讀者自行實(shí)現,需要確認的選定MQ支持此功能。
#how_to_change_the_offsets_of_the_source_database
業(yè)務(wù)場(chǎng)景影響下的重要操作
本部分僅描述如何在作者的技術(shù)架構下實(shí)現以下操作。讀者可以根據他們選擇的技術(shù)組件探索不同的技術(shù)解決方案。
數據庫分庫分表情況
基于Debezium的架構,一個(gè)Source只能對應一個(gè)采集的mysql實(shí)例。對于同一個(gè)實(shí)例上的表拆分,您可以使用 Debezium Topic Routing 功能。
通過(guò)采集過(guò)濾binlog時(shí),將需要采集的表按照正則匹配寫(xiě)入指定topic。
在子庫的情況下,還需要在sink端添加RegexRouter變換算子,進(jìn)行topic之間的合并和寫(xiě)入操作。
數據增量采集和全量采集
對于采集組件,當前的配置是基于增量為默認的,所以無(wú)論選擇Debezium還是Canal,正常配置都可以。
但是,在某些情況下,會(huì )出現需要采集 的整個(gè)表的情況。作者還給出了全量數據的方案采集。
選項一
Debezium本身自帶這樣的功能,你需要
將snapshot.mode參數選擇設置為when_needed,這樣就可以做全表的采集操作。
在官方文檔中,這里的參數配置有更詳細的說(shuō)明。
#快照
選項二
同時(shí)使用sqoop和增量采集。
該方案適用于已經(jīng)有很多表數據,但當前binlog數據頻率不高的情況,使用該方案。
值得注意的是,有兩點(diǎn):
脫機重復數據刪除條件
數據落地后,通過(guò)json表映射出binlog原創(chuàng )數據,那么問(wèn)題來(lái)了,我們如何找到最新的那條數據呢?
或許我們可以簡(jiǎn)單的想,用剛才提取的ts_ms,然后再做反演,是不是就可以了?
在大多數情況下,這確實(shí)是可能的。
但是在實(shí)際開(kāi)發(fā)中,筆者發(fā)現這樣的情況并不能滿(mǎn)足所有的情況,因為在binlog中,可能有兩個(gè)數據和ts_ms和PK一樣,但是確實(shí)不同。
那么我們如何同時(shí)解析兩條數據呢?
答案就在上面,我們只是建議提取所有 binlog 元數據。
SELECT *
FROM
(
SELECT *,
row_number() over(partition BY t.id ORDER BY t.`__ts_ms` DESC,t.`__file` DESC,cast(t.`__pos` AS int) DESC) AS order_by
FROM test t
WHERE dt='{pt}'
AND hour='{now_hour}'
) t1
WHERE t1.order_by = 1
解釋一下這個(gè)sql中row_number的條件
__ts_ms:binlog中的ts_ms,即事件時(shí)間。
__file:是binlog數據的文件名。
__pos:是binlog中數據所在文件在文件中的位置,為數據類(lèi)型。
這樣組合條件取出的數據是最新的。
有讀者可能會(huì )問(wèn),如果這條數據被刪除了怎么辦?你這樣檢索出來(lái)的數據是不是錯了?
這個(gè)Debezium也有相應的操作,有相應的配置選項讓你選擇如何處理刪除行為的binlog數據。
作為給大家參考,作者選擇了rewrite的參數配置,這樣上面的sql最外層只需要判斷“delete='false'”是正確的數據即可。
架構總結
在技??術(shù)選擇和整體細節結構上,作者始終堅持一個(gè)原則——
過(guò)程應該盡可能簡(jiǎn)單,而不是越簡(jiǎn)單越好。數據鏈路越長(cháng),可能出現的問(wèn)題鏈路就越多。后期的鎖死問(wèn)題和運維也會(huì )很困難。
所以筆者在技術(shù)選型上考慮了Flink+Kafka的方式,但是基于當時(shí)的情況,筆者并沒(méi)有選擇這樣的技術(shù)選型,筆者也詳細闡述了原因。
綜上所述,我當時(shí)就想到了 Flink。如果Flink不是基于平臺的開(kāi)發(fā)和運維監控,可以作為臨時(shí)解決方案,但如果后期在這樣的開(kāi)發(fā)過(guò)程下縫補了,就要多人開(kāi)發(fā)。很容易出問(wèn)題,或者大家都在這樣的程序框架下造輪子,造的越多越慢。而且后期的主要項目方向并沒(méi)有把Flink平臺化提上日程,所以也是考慮到了部分未來(lái)情況的選擇。
所以當我最終決定技術(shù)選擇的時(shí)候,我并沒(méi)有選擇 Flink。
結束語(yǔ)
這篇文章文章比較理論,也是對這個(gè)場(chǎng)景的技術(shù)理論總結。如果文章中還有其他不清楚的操作,可以參考作者之前的文章詳細代碼級操作。
技術(shù)架構方案有很多種。我只是選擇了其中之一來(lái)實(shí)施。也希望大家有其他的技術(shù)方案或理論進(jìn)行交流。請糾正我。
文章實(shí)時(shí)采集(文章實(shí)時(shí)采集如何上架文章嗎?知道如何批量采集?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2021-11-29 09:05
文章實(shí)時(shí)采集現在在自媒體界,提起采集,已經(jīng)是老生常談的工作了,不管是標題黨,還是軟文廣告,無(wú)論是視頻,還是音頻,以及文字內容,都有許多公眾號發(fā)出來(lái)。包括頭條號,企鵝號,大魚(yú)號,網(wǎng)易號,都會(huì )發(fā)出來(lái),我們只要順手采集,發(fā)到自己的公眾號即可。于是有很多的文章標題黨都寫(xiě)采集標題軟文,聲稱(chēng)自己抓取熱點(diǎn),加引流到自己的號上。
有的直接是文章里的內容轉發(fā)上去,還有的采集教程或者采集資源,在某個(gè)微信群里分享,變成了教程。這些是極少數,還是得非常小心,看你采集的信息有沒(méi)有一些敏感性,你了解清楚對方是個(gè)什么目的不,你采集的內容有沒(méi)有違規的成分,是不是非法,是不是詐騙。今天就給大家分享,采集一些開(kāi)放平臺,如:今日頭條,微信公眾號,還有新浪博客上面的內容,可以進(jìn)行批量采集。
知道如何上架文章嗎?1,自己上架一個(gè)公眾號的內容,并且內容排版標題一致,在微信公眾號寫(xiě)好原創(chuàng ),然后在文章配圖點(diǎn)一下重點(diǎn)就ok了。2,找到可采集的信息,如:頭條,微博,等。并導入到你的公眾號和開(kāi)放平臺的文章中去。把配圖刪除掉,可以去除任何連接。3,把鏈接去掉。如果文章連接刪掉,這樣可以批量采集,批量改內容名稱(chēng),發(fā)布即可。
4,發(fā)布的時(shí)候如何不讓你的粉絲看到,因為這些內容是被不法分子注冊過(guò)的,可以發(fā)布的時(shí)候,編寫(xiě)一個(gè)聲明,該內容不允許任何人閱讀。這樣其他人就可以轉發(fā)。無(wú)非就是利用讀者信任問(wèn)題。你不能保證文章全部沒(méi)有問(wèn)題,因為已經(jīng)注冊過(guò)的內容,肯定有內容,本身已經(jīng)違規,一樣要看違規程度。你自己加工的文章,不能保證一定是對的,如果有,你可以提交給國家版權局去測試。
5,只要你是個(gè)好人,開(kāi)放平臺支持你的采集,如果你的文章質(zhì)量比較差,文章數量還比較多,甚至可以建群,每天批量采集,我們發(fā)布的文章是可以提供免費清洗服務(wù)的。如何進(jìn)行檢測呢?你可以注冊一個(gè)公眾號,然后新建賬號,你可以用自己的身份證賬號進(jìn)行驗證,驗證通過(guò)后,只需要輸入進(jìn)去,就可以注冊一個(gè)文章采集鏈接。也可以一個(gè)新號,進(jìn)去后臺,通過(guò)后臺的黃色按鈕,第一次登錄后臺,輸入你的身份證賬號和密碼,獲取個(gè)人信息,通過(guò)后可以給你正常檢測的鏈接。
然后是登錄你的賬號,這個(gè)時(shí)候才可以正常檢測的。我一般推薦用第一個(gè)方法,第二個(gè)不推薦。就是因為這個(gè),并不是每個(gè)人都可以注冊新號去驗證,可能會(huì )導致你的帳號注冊比較困難。所以如果你用開(kāi)放平臺已經(jīng)上傳你的資料后,注冊平臺會(huì )給你賬號,只要你用自己的賬號登錄,然后在你的資料里看有沒(méi)有聯(lián)系方式,如果有的話(huà),就說(shuō)明你。 查看全部
文章實(shí)時(shí)采集(文章實(shí)時(shí)采集如何上架文章嗎?知道如何批量采集?)
文章實(shí)時(shí)采集現在在自媒體界,提起采集,已經(jīng)是老生常談的工作了,不管是標題黨,還是軟文廣告,無(wú)論是視頻,還是音頻,以及文字內容,都有許多公眾號發(fā)出來(lái)。包括頭條號,企鵝號,大魚(yú)號,網(wǎng)易號,都會(huì )發(fā)出來(lái),我們只要順手采集,發(fā)到自己的公眾號即可。于是有很多的文章標題黨都寫(xiě)采集標題軟文,聲稱(chēng)自己抓取熱點(diǎn),加引流到自己的號上。
有的直接是文章里的內容轉發(fā)上去,還有的采集教程或者采集資源,在某個(gè)微信群里分享,變成了教程。這些是極少數,還是得非常小心,看你采集的信息有沒(méi)有一些敏感性,你了解清楚對方是個(gè)什么目的不,你采集的內容有沒(méi)有違規的成分,是不是非法,是不是詐騙。今天就給大家分享,采集一些開(kāi)放平臺,如:今日頭條,微信公眾號,還有新浪博客上面的內容,可以進(jìn)行批量采集。
知道如何上架文章嗎?1,自己上架一個(gè)公眾號的內容,并且內容排版標題一致,在微信公眾號寫(xiě)好原創(chuàng ),然后在文章配圖點(diǎn)一下重點(diǎn)就ok了。2,找到可采集的信息,如:頭條,微博,等。并導入到你的公眾號和開(kāi)放平臺的文章中去。把配圖刪除掉,可以去除任何連接。3,把鏈接去掉。如果文章連接刪掉,這樣可以批量采集,批量改內容名稱(chēng),發(fā)布即可。
4,發(fā)布的時(shí)候如何不讓你的粉絲看到,因為這些內容是被不法分子注冊過(guò)的,可以發(fā)布的時(shí)候,編寫(xiě)一個(gè)聲明,該內容不允許任何人閱讀。這樣其他人就可以轉發(fā)。無(wú)非就是利用讀者信任問(wèn)題。你不能保證文章全部沒(méi)有問(wèn)題,因為已經(jīng)注冊過(guò)的內容,肯定有內容,本身已經(jīng)違規,一樣要看違規程度。你自己加工的文章,不能保證一定是對的,如果有,你可以提交給國家版權局去測試。
5,只要你是個(gè)好人,開(kāi)放平臺支持你的采集,如果你的文章質(zhì)量比較差,文章數量還比較多,甚至可以建群,每天批量采集,我們發(fā)布的文章是可以提供免費清洗服務(wù)的。如何進(jìn)行檢測呢?你可以注冊一個(gè)公眾號,然后新建賬號,你可以用自己的身份證賬號進(jìn)行驗證,驗證通過(guò)后,只需要輸入進(jìn)去,就可以注冊一個(gè)文章采集鏈接。也可以一個(gè)新號,進(jìn)去后臺,通過(guò)后臺的黃色按鈕,第一次登錄后臺,輸入你的身份證賬號和密碼,獲取個(gè)人信息,通過(guò)后可以給你正常檢測的鏈接。
然后是登錄你的賬號,這個(gè)時(shí)候才可以正常檢測的。我一般推薦用第一個(gè)方法,第二個(gè)不推薦。就是因為這個(gè),并不是每個(gè)人都可以注冊新號去驗證,可能會(huì )導致你的帳號注冊比較困難。所以如果你用開(kāi)放平臺已經(jīng)上傳你的資料后,注冊平臺會(huì )給你賬號,只要你用自己的賬號登錄,然后在你的資料里看有沒(méi)有聯(lián)系方式,如果有的話(huà),就說(shuō)明你。
文章實(shí)時(shí)采集( 147SEO2021-11-25關(guān)于CMS采集插件,小編有話(huà)說(shuō)! )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 181 次瀏覽 ? 2021-11-26 11:00
147SEO2021-11-25關(guān)于CMS采集插件,小編有話(huà)說(shuō)!
)
關(guān)于采集插件,小編有話(huà)要說(shuō)!采集 文章的作用是什么
147SEO2021-11-25
<p>關(guān)于cms采集插件,小編有話(huà)要說(shuō)!很多采集插件都是為某個(gè)cms制作的,對于多個(gè)cms網(wǎng)站的SEO站長(cháng)來(lái)說(shuō)非常不方便。大多數SEO站長(cháng)使用市場(chǎng)上常見(jiàn)的cms來(lái)制作網(wǎng)站。我在網(wǎng)上看到了一些關(guān)于cms的采集插件。很多都是需要付費的,或者采集功能單一,不注重功能??赡苓€有很多站長(cháng)不知道采集插件是什么,采集插件的作用是什么。cms采集插件可以作為采集器到采集網(wǎng)站需要文章,可以節省制作 查看全部
文章實(shí)時(shí)采集(
147SEO2021-11-25關(guān)于CMS采集插件,小編有話(huà)說(shuō)!
)
關(guān)于采集插件,小編有話(huà)要說(shuō)!采集 文章的作用是什么

147SEO2021-11-25
<p>關(guān)于cms采集插件,小編有話(huà)要說(shuō)!很多采集插件都是為某個(gè)cms制作的,對于多個(gè)cms網(wǎng)站的SEO站長(cháng)來(lái)說(shuō)非常不方便。大多數SEO站長(cháng)使用市場(chǎng)上常見(jiàn)的cms來(lái)制作網(wǎng)站。我在網(wǎng)上看到了一些關(guān)于cms的采集插件。很多都是需要付費的,或者采集功能單一,不注重功能??赡苓€有很多站長(cháng)不知道采集插件是什么,采集插件的作用是什么。cms采集插件可以作為采集器到采集網(wǎng)站需要文章,可以節省制作
文章實(shí)時(shí)采集(就是數據更新日志的獲取,就是debezium插件模式詳解(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 299 次瀏覽 ? 2021-11-23 17:23
一、前言
隨著(zhù)業(yè)務(wù)的發(fā)展,之前的離線(xiàn)批量計算方式,延遲時(shí)間長(cháng),無(wú)法滿(mǎn)足需求。隨著(zhù)flink等實(shí)時(shí)計算工具的出現,實(shí)時(shí)采集也成為大數據工作中非常重要的一部分。.
如今企業(yè)的數據來(lái)源大致分為兩類(lèi):存儲在各種關(guān)系數據庫中的業(yè)務(wù)數據,網(wǎng)站或APP生成的用戶(hù)行為日志數據
日志數據已經(jīng)可以通過(guò)flume、kafka等工具實(shí)現實(shí)時(shí),但是關(guān)系型數據庫的同步還是基于批處理。
當關(guān)系型數據庫的表數據達到一定程度時(shí),批量同步時(shí)間過(guò)長(cháng),增量同步無(wú)法解決實(shí)時(shí)性要求
mysql可以通過(guò)binlog進(jìn)行實(shí)時(shí)同步,技術(shù)比較成熟,但是不能解決SQLserver、Oracle、postgresql等數據庫的問(wèn)題。
即使有kafka這樣的流數據分發(fā)訂閱平臺,flink這樣的實(shí)時(shí)計算平臺,redis這樣的高效讀寫(xiě)數據庫,如果實(shí)時(shí)采集問(wèn)題無(wú)法解決,那么就無(wú)法實(shí)現完整的實(shí)時(shí)鏈接。
好在國外有一個(gè)開(kāi)源工具,可以實(shí)現對市面上各種常用數據庫的數據更新日志的獲取。它是 debezium。
插件模式
二、簡(jiǎn)介
Debezium 是一組分布式服務(wù),用于捕獲數據庫中的更改,以便您的應用程序可以查看這些更改并對其做出響應。Debezium 在更改事件流中記錄每個(gè)數據庫表中的所有行級更改。應用程序只需要讀取這些流就可以按照更改事件發(fā)生的順序查看更改事件。
Debezium有兩種運行方式,一種在kafka connect中作為插件繼承,另一種作為獨立服務(wù)運行(孵化)
服務(wù)器模式
今天我們要介紹的是插件模式。
三、部署
插件模式首先要求集群上已經(jīng)安裝了zookeeper和kafka。Kafka 可以連接到上游數據庫。這里我使用flink消費kafka中的日志,并實(shí)時(shí)寫(xiě)入mysql。
所以還需要部署flink集群和mysql數據庫
以上都具備后,就可以開(kāi)始部署debezium了
1.下載安裝包
#以mysql為例,下載debezium-connector-mysql-1.4.2.Final-plugin.tar.gz
wget https://repo1.maven.org/maven2 ... ar.gz
在kafka安裝文件夾中創(chuàng )建connectors文件夾,將下載的debezium插件解壓到connectors
2.創(chuàng )建話(huà)題
創(chuàng )建 kafka connect 需要的三個(gè)主題:connect-offsets、connect-configs、connect-status
3.編寫(xiě)kafka連接配置文件
創(chuàng )建 connect-distributed.properties 并分發(fā)到所有節點(diǎn)
#kafka-connect配置文件
# kafka集群地址
bootstrap.servers=ip1:9092,ip2:9092,ip3:9092
# Connector集群的名稱(chēng),同一集群內的Connector需要保持此group.id一致
group.id=connect-cluster
# 存儲到kafka的數據格式
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false
value.converter.schemas.enable=false
# 內部轉換器的格式,針對offsets、config和status,一般不需要修改
internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false
# 用于保存offsets的topic,應該有多個(gè)partitions,并且擁有副本(replication)
# Kafka Connect會(huì )自動(dòng)創(chuàng )建這個(gè)topic,但是你可以根據需要自行創(chuàng )建
offset.storage.topic=connect-offsets
offset.storage.replication.factor=2
offset.storage.partitions=3
# 保存connector和task的配置,應該只有1個(gè)partition,并且有多個(gè)副本
config.storage.topic=connect-configs
config.storage.replication.factor=2
# 用于保存狀態(tài),可以擁有多個(gè)partition和replication
status.storage.topic=connect-status
status.storage.replication.factor=2
status.storage.partitions=3
# Flush much faster than normal, which is useful for testing/debugging
offset.flush.interval.ms=10000
# RESET主機名,默認為本機
#rest.host.name=
# REST端口號
rest.port=18083
# The Hostname & Port that will be given out to other workers to connect to i.e. URLs that are routable from other servers.
#rest.advertised.host.name=
#rest.advertised.port=
# 保存connectors的路徑
#plugin.path=/usr/local/share/java,/usr/local/share/kafka/plugins,/opt/connectors,
plugin.path=/opt/cloudera/parcels/CDH/lib/kafka/connectors
4.啟動(dòng)kafka-connect
注意:必須執行所有節點(diǎn)
cd /opt/cloudera/parcels/CDH/lib/kafka
bin/connect-distributed.sh -daemon config/connect-distributed.properties
###jps 可看到 ConnectDistributed 進(jìn)程
5.通過(guò)POST URL提交連接請求
多個(gè)表名用逗號分隔,格式為db.table,參數中指定的topic為元數據topic,真正的topic名由server_name.db_name.table_name組成
POST:http://ip:18083/connectors
Headers:Content-Type: application/json
Body:{
"name" : "debezium-mysql",
"config":{
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"database.hostname": "host",
"database.port": "3306",
"database.user": "username",
"database.password": "password",
"database.server.id" :"1739",
"database.server.name": "mysql",
"database.history.kafka.bootstrap.servers": "ip1:9092,ip2:9092,ip3:9092",
"database.history.kafka.topic": "mysql.test",
"database.whitelist": "test",
"table.whitelist":"test.test_table2",
"include.schema.changes" : "true" ,
"mode" : "incrementing",
"incrementing.column.name" : "id",
"database.history.skip.unparseable.ddl" : "true"
}
}
提交完成后,使用GET:18083/connectors獲取連接器信息
由于debezium沒(méi)有構建topic的邏輯,所以Kafka需要開(kāi)啟自動(dòng)生成topic的配置
檢查kafka是否生成了對應的topic,上位源表的內容,如果topic中有對應的change log記錄,則任務(wù)配置成功
有很多方法可以消費來(lái)自 Kafka 的數據。 查看全部
文章實(shí)時(shí)采集(就是數據更新日志的獲取,就是debezium插件模式詳解(組圖))
一、前言
隨著(zhù)業(yè)務(wù)的發(fā)展,之前的離線(xiàn)批量計算方式,延遲時(shí)間長(cháng),無(wú)法滿(mǎn)足需求。隨著(zhù)flink等實(shí)時(shí)計算工具的出現,實(shí)時(shí)采集也成為大數據工作中非常重要的一部分。.
如今企業(yè)的數據來(lái)源大致分為兩類(lèi):存儲在各種關(guān)系數據庫中的業(yè)務(wù)數據,網(wǎng)站或APP生成的用戶(hù)行為日志數據
日志數據已經(jīng)可以通過(guò)flume、kafka等工具實(shí)現實(shí)時(shí),但是關(guān)系型數據庫的同步還是基于批處理。
當關(guān)系型數據庫的表數據達到一定程度時(shí),批量同步時(shí)間過(guò)長(cháng),增量同步無(wú)法解決實(shí)時(shí)性要求
mysql可以通過(guò)binlog進(jìn)行實(shí)時(shí)同步,技術(shù)比較成熟,但是不能解決SQLserver、Oracle、postgresql等數據庫的問(wèn)題。
即使有kafka這樣的流數據分發(fā)訂閱平臺,flink這樣的實(shí)時(shí)計算平臺,redis這樣的高效讀寫(xiě)數據庫,如果實(shí)時(shí)采集問(wèn)題無(wú)法解決,那么就無(wú)法實(shí)現完整的實(shí)時(shí)鏈接。
好在國外有一個(gè)開(kāi)源工具,可以實(shí)現對市面上各種常用數據庫的數據更新日志的獲取。它是 debezium。

插件模式
二、簡(jiǎn)介
Debezium 是一組分布式服務(wù),用于捕獲數據庫中的更改,以便您的應用程序可以查看這些更改并對其做出響應。Debezium 在更改事件流中記錄每個(gè)數據庫表中的所有行級更改。應用程序只需要讀取這些流就可以按照更改事件發(fā)生的順序查看更改事件。
Debezium有兩種運行方式,一種在kafka connect中作為插件繼承,另一種作為獨立服務(wù)運行(孵化)

服務(wù)器模式
今天我們要介紹的是插件模式。
三、部署
插件模式首先要求集群上已經(jīng)安裝了zookeeper和kafka。Kafka 可以連接到上游數據庫。這里我使用flink消費kafka中的日志,并實(shí)時(shí)寫(xiě)入mysql。
所以還需要部署flink集群和mysql數據庫
以上都具備后,就可以開(kāi)始部署debezium了
1.下載安裝包
#以mysql為例,下載debezium-connector-mysql-1.4.2.Final-plugin.tar.gz
wget https://repo1.maven.org/maven2 ... ar.gz
在kafka安裝文件夾中創(chuàng )建connectors文件夾,將下載的debezium插件解壓到connectors
2.創(chuàng )建話(huà)題
創(chuàng )建 kafka connect 需要的三個(gè)主題:connect-offsets、connect-configs、connect-status
3.編寫(xiě)kafka連接配置文件
創(chuàng )建 connect-distributed.properties 并分發(fā)到所有節點(diǎn)
#kafka-connect配置文件
# kafka集群地址
bootstrap.servers=ip1:9092,ip2:9092,ip3:9092
# Connector集群的名稱(chēng),同一集群內的Connector需要保持此group.id一致
group.id=connect-cluster
# 存儲到kafka的數據格式
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false
value.converter.schemas.enable=false
# 內部轉換器的格式,針對offsets、config和status,一般不需要修改
internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false
# 用于保存offsets的topic,應該有多個(gè)partitions,并且擁有副本(replication)
# Kafka Connect會(huì )自動(dòng)創(chuàng )建這個(gè)topic,但是你可以根據需要自行創(chuàng )建
offset.storage.topic=connect-offsets
offset.storage.replication.factor=2
offset.storage.partitions=3
# 保存connector和task的配置,應該只有1個(gè)partition,并且有多個(gè)副本
config.storage.topic=connect-configs
config.storage.replication.factor=2
# 用于保存狀態(tài),可以擁有多個(gè)partition和replication
status.storage.topic=connect-status
status.storage.replication.factor=2
status.storage.partitions=3
# Flush much faster than normal, which is useful for testing/debugging
offset.flush.interval.ms=10000
# RESET主機名,默認為本機
#rest.host.name=
# REST端口號
rest.port=18083
# The Hostname & Port that will be given out to other workers to connect to i.e. URLs that are routable from other servers.
#rest.advertised.host.name=
#rest.advertised.port=
# 保存connectors的路徑
#plugin.path=/usr/local/share/java,/usr/local/share/kafka/plugins,/opt/connectors,
plugin.path=/opt/cloudera/parcels/CDH/lib/kafka/connectors
4.啟動(dòng)kafka-connect
注意:必須執行所有節點(diǎn)
cd /opt/cloudera/parcels/CDH/lib/kafka
bin/connect-distributed.sh -daemon config/connect-distributed.properties
###jps 可看到 ConnectDistributed 進(jìn)程
5.通過(guò)POST URL提交連接請求
多個(gè)表名用逗號分隔,格式為db.table,參數中指定的topic為元數據topic,真正的topic名由server_name.db_name.table_name組成
POST:http://ip:18083/connectors
Headers:Content-Type: application/json
Body:{
"name" : "debezium-mysql",
"config":{
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"database.hostname": "host",
"database.port": "3306",
"database.user": "username",
"database.password": "password",
"database.server.id" :"1739",
"database.server.name": "mysql",
"database.history.kafka.bootstrap.servers": "ip1:9092,ip2:9092,ip3:9092",
"database.history.kafka.topic": "mysql.test",
"database.whitelist": "test",
"table.whitelist":"test.test_table2",
"include.schema.changes" : "true" ,
"mode" : "incrementing",
"incrementing.column.name" : "id",
"database.history.skip.unparseable.ddl" : "true"
}
}
提交完成后,使用GET:18083/connectors獲取連接器信息
由于debezium沒(méi)有構建topic的邏輯,所以Kafka需要開(kāi)啟自動(dòng)生成topic的配置
檢查kafka是否生成了對應的topic,上位源表的內容,如果topic中有對應的change log記錄,則任務(wù)配置成功
有很多方法可以消費來(lái)自 Kafka 的數據。
文章實(shí)時(shí)采集(數據技術(shù)篇——實(shí)時(shí)技術(shù)5.1簡(jiǎn)介流計算(下))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 194 次瀏覽 ? 2021-11-21 07:08
五、數據技術(shù)篇-實(shí)時(shí)技術(shù)
5.1 簡(jiǎn)介
流計算,業(yè)務(wù)希望第一時(shí)間拿到處理后的數據,實(shí)時(shí)監控狀態(tài),做出運營(yíng)決策,引導業(yè)務(wù)往好的方向發(fā)展。
特征:
效率高,延遲可達到毫秒級常駐任務(wù)。流式任務(wù)數據屬于常駐進(jìn)程任務(wù),啟動(dòng)后會(huì )一直運行(數據源無(wú)界)。高性能要求,高吞吐低時(shí)延,性能有待優(yōu)化 應用限制,無(wú)法替代離線(xiàn)處理(計算成本高),數據是流式處理,在context上下文中,到達時(shí)間的不確定性導致一定的實(shí)時(shí)和離線(xiàn)處理結果的區別
根據數據的時(shí)延,有3種時(shí)效
5.2 流技術(shù)架構@
5.2.1 個(gè)數據采集
數據從日志服務(wù)器采集到數據中間件供下游實(shí)時(shí)訂閱使用
及時(shí)性和吞吐量是數據處理的矛盾
數據類(lèi)型采集:
如何對數據執行采集(按批次):
消息系統是數據庫變更節點(diǎn)的上游,特點(diǎn)是:低延遲和有限的吞吐量。有些業(yè)務(wù)不通過(guò)消息系統更新數據庫,所以從消息系統獲取的數據是不完整的,但是從數據庫變更日志中獲取的數據必須是完整的。
5.2.2 數據處理
提供流計算引擎,將其拉入流計算系統的任務(wù)中進(jìn)行處理。實(shí)時(shí)應用的拓撲結構是一個(gè)有向無(wú)環(huán)圖
任務(wù)計算往往是多線(xiàn)程的,會(huì )根據業(yè)務(wù)主鍵分桶處理,數據在內存中(需要定時(shí)處理,可以根據LRU清理)。封裝了一層SQL語(yǔ)義,降低了門(mén)檻。以下是一些經(jīng)典問(wèn)題:
1. 去重指標:
在計算重復數據刪除時(shí),必須保存重復數據刪除的詳細數據,這會(huì )導致內存消耗過(guò)多。這里有兩種情況:
精確去重,明細數據必須保存,可以通過(guò)數據傾斜來(lái)處理,一個(gè)節點(diǎn)的壓力分到多個(gè)節點(diǎn)上。
模糊去重,精度要求不高的情況,相關(guān)算法去重。
去重算法:
布隆過(guò)濾器。位數組算法的應用不保存實(shí)際的明細數據,只保存明細數據對應的哈希表的標記位。適用于:統計維度值較多的情況,如全網(wǎng)各種業(yè)務(wù)的UV數據統計??梢栽诟鱾€(gè)維度之間共享?;A估計。Hash 還用于根據數據分散程度估計現有數據集的邊界,從而獲得近似的總去重值。適用于:統計維度值很厚的情況,比如整個(gè)市場(chǎng)的UV數據。它不能在各個(gè)維度之間共享。
2. 數據傾斜:
當單個(gè)節點(diǎn)的數據量比較大時(shí),就會(huì )遇到性能瓶頸。數據需要分桶。
重復數據刪除指標分為桶。通過(guò)對bucket中的去重值進(jìn)行hash,將相同的值放到同一個(gè)bucket中進(jìn)行去重,然后將每個(gè)bucket中的值相加。利用 CPU 和內存資源按非重復數據刪除指標劃分桶。隨機分配到每個(gè)bucket,每個(gè)bucket匯總,使用每個(gè)bucket的CPU容量
3. 交易處理:
實(shí)時(shí)計算中的分布式處理,系統不穩定,如何實(shí)現精確的數據處理
5.2.3 數據存儲
數據實(shí)時(shí)處理(聚合、清洗)并寫(xiě)入在線(xiàn)存儲系統。寫(xiě)操作為增量操作,源源不斷
存儲的三種類(lèi)型的數據:
實(shí)時(shí)任務(wù)使用的數據庫特點(diǎn):
表名設計:匯總層標識+數據字段+主維度+時(shí)間維度(主維度相同的所有數據在一張物理表中)
rowkey設計:MD5+主維度+維度標識+子維度1+時(shí)間維度+子維度2(MD5對數據進(jìn)行hash,平衡服務(wù)器負載)
5.2.4 數據服務(wù)
設置統一的數據服務(wù)層獲取結果
優(yōu)勢:
5.3 流式數據模型5.3.1 數據分層
ODS層
屬于運營(yíng)數據層,業(yè)務(wù)系統直接返回的最原創(chuàng )數據采集,粒度最細。實(shí)時(shí)和離線(xiàn)在源頭統一(好處:同一條數據處理的指標口徑基本一致,便于比較)。如:原創(chuàng )訂單變更記錄數據,訂單強度變化過(guò)程,一個(gè)訂單有多條記錄。
DWD層
根據業(yè)務(wù)流程中建模的實(shí)時(shí)事實(shí)細節,將沒(méi)有上下文的記錄返回離線(xiàn)系統,最大程度保證ODS和DWD層實(shí)時(shí)離線(xiàn)的一致性。如:訂單的付款時(shí)間表,用戶(hù)訪(fǎng)問(wèn)日志時(shí)間表。訂單強度支付記錄,一個(gè)訂單只有一條記錄。
DWS層
計算各個(gè)維度的匯總指標。如果維度對所有垂直業(yè)務(wù)線(xiàn)通用,則將其放置在實(shí)時(shí)通用匯總層中。比如一個(gè)電商數據(賣(mài)家實(shí)力)幾個(gè)維度的匯總表。賣(mài)家的實(shí)時(shí)交易金額,每個(gè)賣(mài)家一個(gè)記錄。
ADS層
對于不同的統計維度值數據,我們的銷(xiāo)售人員會(huì )關(guān)注它。外賣(mài)區實(shí)時(shí)交易金額
DIM層
基本來(lái)源于離線(xiàn)維度表層(ODS離線(xiàn)處理),提取到實(shí)時(shí)應用。如產(chǎn)品維度表、賣(mài)家維度表等。 訂單項目類(lèi)別與行業(yè)對應表。
5.3.2 多碼流關(guān)聯(lián)
在流計算中,需要將兩個(gè)實(shí)時(shí)流與主鍵關(guān)聯(lián)起來(lái),才能得到對應的表。
關(guān)鍵點(diǎn):需要互相等待,雙方到達后才能成功關(guān)聯(lián)。
難點(diǎn):數據到達是一個(gè)增量過(guò)程,數據到達時(shí)間不確定、無(wú)序,需要涉及中間狀態(tài)的保存和恢復。
當A表和B表實(shí)時(shí)關(guān)聯(lián)ID時(shí),無(wú)法知道表的到達順序。因此,當兩個(gè)數據流中的每個(gè)新數據到達時(shí),都必須在另一個(gè)表中進(jìn)行搜索。如果匹配,則拼接成一條記錄輸出到下游;如果無(wú)法匹配,則需要將其存儲在內存或外部存儲器中,直到表 B 中的記錄也到達。每次都在對方表的當前全量數據中查找??梢愿鶕P(guān)聯(lián)的主鍵在bucket中進(jìn)行處理
5.3.3維表使用@
實(shí)時(shí)計算時(shí),相關(guān)維表會(huì )使用當前實(shí)時(shí)數據(T)關(guān)聯(lián)T-2的維表數據
你為什么這樣做?
數據無(wú)法及時(shí)準備。在零點(diǎn),實(shí)時(shí)數據必須與維表相關(guān)聯(lián),T-1的維表數據不能在零點(diǎn)立即準備好,無(wú)法準確獲取最新的全量數據。所有最新數據=T-1數據+當天變化。當天實(shí)時(shí)數據無(wú)序,時(shí)間不確定。數據的混亂。比如10點(diǎn)的業(yè)務(wù)數據與維表關(guān)聯(lián)成功,獲取維表的字段信息(只能說(shuō)是獲取到10點(diǎn)的最新?tīng)顟B(tài)數據,而不知道會(huì )不會(huì )變)
有兩種類(lèi)型的維度表
滿(mǎn)載。數據量小,每天上萬(wàn)條記錄,分類(lèi)維表增量加載。無(wú)法全部加載,增量搜索和LRU過(guò)期形式,熱點(diǎn)數據存儲在內存中5.4大推廣挑戰5.4.1大推廣特性毫秒延遲峰值明顯(高吞吐量)保證(需要多鏈路冗余、快速切換、對業(yè)務(wù)方透明)公關(guān)特性(主鍵過(guò)濾、精確去重、統一口徑一) 5.4.2大促保證@
實(shí)時(shí)任務(wù)優(yōu)化
獨占資源和共享資源的策略(一臺機器長(cháng)時(shí)間需要從共享資源池中抓取資源,考慮分配更多的獨占資源)合理選擇緩存機制,減少庫的讀寫(xiě)次數,合并計算單元,并降級拓撲級別。(每個(gè)節點(diǎn)的數據傳輸都必須進(jìn)行序列化和反序列化,在級別深度上性能較差) 內存對象共享,避免字符串復制 高吞吐量和低延遲平均
數據鏈路保證
多鏈路建設、多機房容災、異地容災、鏈路切換推送
壓力測試
數據壓力測量:將實(shí)時(shí)操作的訂閱數據點(diǎn)調整到幾小時(shí)或幾天前,以模擬蓄洪壓力測量。
產(chǎn)品壓測:自壓測試優(yōu)化服務(wù)器性能(所有手機讀取操作的URL,QPS:500次/秒壓測);前端頁(yè)面穩定性測試(8-24小時(shí),提高前端頁(yè)面穩定性) 查看全部
文章實(shí)時(shí)采集(數據技術(shù)篇——實(shí)時(shí)技術(shù)5.1簡(jiǎn)介流計算(下))
五、數據技術(shù)篇-實(shí)時(shí)技術(shù)
5.1 簡(jiǎn)介
流計算,業(yè)務(wù)希望第一時(shí)間拿到處理后的數據,實(shí)時(shí)監控狀態(tài),做出運營(yíng)決策,引導業(yè)務(wù)往好的方向發(fā)展。
特征:
效率高,延遲可達到毫秒級常駐任務(wù)。流式任務(wù)數據屬于常駐進(jìn)程任務(wù),啟動(dòng)后會(huì )一直運行(數據源無(wú)界)。高性能要求,高吞吐低時(shí)延,性能有待優(yōu)化 應用限制,無(wú)法替代離線(xiàn)處理(計算成本高),數據是流式處理,在context上下文中,到達時(shí)間的不確定性導致一定的實(shí)時(shí)和離線(xiàn)處理結果的區別
根據數據的時(shí)延,有3種時(shí)效
5.2 流技術(shù)架構@

5.2.1 個(gè)數據采集
數據從日志服務(wù)器采集到數據中間件供下游實(shí)時(shí)訂閱使用
及時(shí)性和吞吐量是數據處理的矛盾
數據類(lèi)型采集:
如何對數據執行采集(按批次):
消息系統是數據庫變更節點(diǎn)的上游,特點(diǎn)是:低延遲和有限的吞吐量。有些業(yè)務(wù)不通過(guò)消息系統更新數據庫,所以從消息系統獲取的數據是不完整的,但是從數據庫變更日志中獲取的數據必須是完整的。
5.2.2 數據處理
提供流計算引擎,將其拉入流計算系統的任務(wù)中進(jìn)行處理。實(shí)時(shí)應用的拓撲結構是一個(gè)有向無(wú)環(huán)圖
任務(wù)計算往往是多線(xiàn)程的,會(huì )根據業(yè)務(wù)主鍵分桶處理,數據在內存中(需要定時(shí)處理,可以根據LRU清理)。封裝了一層SQL語(yǔ)義,降低了門(mén)檻。以下是一些經(jīng)典問(wèn)題:
1. 去重指標:
在計算重復數據刪除時(shí),必須保存重復數據刪除的詳細數據,這會(huì )導致內存消耗過(guò)多。這里有兩種情況:
精確去重,明細數據必須保存,可以通過(guò)數據傾斜來(lái)處理,一個(gè)節點(diǎn)的壓力分到多個(gè)節點(diǎn)上。
模糊去重,精度要求不高的情況,相關(guān)算法去重。
去重算法:
布隆過(guò)濾器。位數組算法的應用不保存實(shí)際的明細數據,只保存明細數據對應的哈希表的標記位。適用于:統計維度值較多的情況,如全網(wǎng)各種業(yè)務(wù)的UV數據統計??梢栽诟鱾€(gè)維度之間共享?;A估計。Hash 還用于根據數據分散程度估計現有數據集的邊界,從而獲得近似的總去重值。適用于:統計維度值很厚的情況,比如整個(gè)市場(chǎng)的UV數據。它不能在各個(gè)維度之間共享。
2. 數據傾斜:
當單個(gè)節點(diǎn)的數據量比較大時(shí),就會(huì )遇到性能瓶頸。數據需要分桶。
重復數據刪除指標分為桶。通過(guò)對bucket中的去重值進(jìn)行hash,將相同的值放到同一個(gè)bucket中進(jìn)行去重,然后將每個(gè)bucket中的值相加。利用 CPU 和內存資源按非重復數據刪除指標劃分桶。隨機分配到每個(gè)bucket,每個(gè)bucket匯總,使用每個(gè)bucket的CPU容量
3. 交易處理:
實(shí)時(shí)計算中的分布式處理,系統不穩定,如何實(shí)現精確的數據處理
5.2.3 數據存儲
數據實(shí)時(shí)處理(聚合、清洗)并寫(xiě)入在線(xiàn)存儲系統。寫(xiě)操作為增量操作,源源不斷
存儲的三種類(lèi)型的數據:
實(shí)時(shí)任務(wù)使用的數據庫特點(diǎn):
表名設計:匯總層標識+數據字段+主維度+時(shí)間維度(主維度相同的所有數據在一張物理表中)
rowkey設計:MD5+主維度+維度標識+子維度1+時(shí)間維度+子維度2(MD5對數據進(jìn)行hash,平衡服務(wù)器負載)
5.2.4 數據服務(wù)
設置統一的數據服務(wù)層獲取結果
優(yōu)勢:
5.3 流式數據模型5.3.1 數據分層
ODS層
屬于運營(yíng)數據層,業(yè)務(wù)系統直接返回的最原創(chuàng )數據采集,粒度最細。實(shí)時(shí)和離線(xiàn)在源頭統一(好處:同一條數據處理的指標口徑基本一致,便于比較)。如:原創(chuàng )訂單變更記錄數據,訂單強度變化過(guò)程,一個(gè)訂單有多條記錄。
DWD層
根據業(yè)務(wù)流程中建模的實(shí)時(shí)事實(shí)細節,將沒(méi)有上下文的記錄返回離線(xiàn)系統,最大程度保證ODS和DWD層實(shí)時(shí)離線(xiàn)的一致性。如:訂單的付款時(shí)間表,用戶(hù)訪(fǎng)問(wèn)日志時(shí)間表。訂單強度支付記錄,一個(gè)訂單只有一條記錄。
DWS層
計算各個(gè)維度的匯總指標。如果維度對所有垂直業(yè)務(wù)線(xiàn)通用,則將其放置在實(shí)時(shí)通用匯總層中。比如一個(gè)電商數據(賣(mài)家實(shí)力)幾個(gè)維度的匯總表。賣(mài)家的實(shí)時(shí)交易金額,每個(gè)賣(mài)家一個(gè)記錄。
ADS層
對于不同的統計維度值數據,我們的銷(xiāo)售人員會(huì )關(guān)注它。外賣(mài)區實(shí)時(shí)交易金額
DIM層
基本來(lái)源于離線(xiàn)維度表層(ODS離線(xiàn)處理),提取到實(shí)時(shí)應用。如產(chǎn)品維度表、賣(mài)家維度表等。 訂單項目類(lèi)別與行業(yè)對應表。
5.3.2 多碼流關(guān)聯(lián)
在流計算中,需要將兩個(gè)實(shí)時(shí)流與主鍵關(guān)聯(lián)起來(lái),才能得到對應的表。
關(guān)鍵點(diǎn):需要互相等待,雙方到達后才能成功關(guān)聯(lián)。
難點(diǎn):數據到達是一個(gè)增量過(guò)程,數據到達時(shí)間不確定、無(wú)序,需要涉及中間狀態(tài)的保存和恢復。
當A表和B表實(shí)時(shí)關(guān)聯(lián)ID時(shí),無(wú)法知道表的到達順序。因此,當兩個(gè)數據流中的每個(gè)新數據到達時(shí),都必須在另一個(gè)表中進(jìn)行搜索。如果匹配,則拼接成一條記錄輸出到下游;如果無(wú)法匹配,則需要將其存儲在內存或外部存儲器中,直到表 B 中的記錄也到達。每次都在對方表的當前全量數據中查找??梢愿鶕P(guān)聯(lián)的主鍵在bucket中進(jìn)行處理
5.3.3維表使用@
實(shí)時(shí)計算時(shí),相關(guān)維表會(huì )使用當前實(shí)時(shí)數據(T)關(guān)聯(lián)T-2的維表數據
你為什么這樣做?
數據無(wú)法及時(shí)準備。在零點(diǎn),實(shí)時(shí)數據必須與維表相關(guān)聯(lián),T-1的維表數據不能在零點(diǎn)立即準備好,無(wú)法準確獲取最新的全量數據。所有最新數據=T-1數據+當天變化。當天實(shí)時(shí)數據無(wú)序,時(shí)間不確定。數據的混亂。比如10點(diǎn)的業(yè)務(wù)數據與維表關(guān)聯(lián)成功,獲取維表的字段信息(只能說(shuō)是獲取到10點(diǎn)的最新?tīng)顟B(tài)數據,而不知道會(huì )不會(huì )變)
有兩種類(lèi)型的維度表
滿(mǎn)載。數據量小,每天上萬(wàn)條記錄,分類(lèi)維表增量加載。無(wú)法全部加載,增量搜索和LRU過(guò)期形式,熱點(diǎn)數據存儲在內存中5.4大推廣挑戰5.4.1大推廣特性毫秒延遲峰值明顯(高吞吐量)保證(需要多鏈路冗余、快速切換、對業(yè)務(wù)方透明)公關(guān)特性(主鍵過(guò)濾、精確去重、統一口徑一) 5.4.2大促保證@
實(shí)時(shí)任務(wù)優(yōu)化
獨占資源和共享資源的策略(一臺機器長(cháng)時(shí)間需要從共享資源池中抓取資源,考慮分配更多的獨占資源)合理選擇緩存機制,減少庫的讀寫(xiě)次數,合并計算單元,并降級拓撲級別。(每個(gè)節點(diǎn)的數據傳輸都必須進(jìn)行序列化和反序列化,在級別深度上性能較差) 內存對象共享,避免字符串復制 高吞吐量和低延遲平均
數據鏈路保證
多鏈路建設、多機房容災、異地容災、鏈路切換推送
壓力測試
數據壓力測量:將實(shí)時(shí)操作的訂閱數據點(diǎn)調整到幾小時(shí)或幾天前,以模擬蓄洪壓力測量。
產(chǎn)品壓測:自壓測試優(yōu)化服務(wù)器性能(所有手機讀取操作的URL,QPS:500次/秒壓測);前端頁(yè)面穩定性測試(8-24小時(shí),提高前端頁(yè)面穩定性)
文章實(shí)時(shí)采集(文章實(shí)時(shí)采集和對采集點(diǎn)的編碼處理(圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2021-11-20 13:14
文章實(shí)時(shí)采集和對采集點(diǎn)的編碼處理我們通常先需要對采集的數據進(jìn)行預處理,比如說(shuō)提取“特征”,然后才能進(jìn)行文本識別。最常見(jiàn)的文本特征就是詞的embedding向量了,詞向量對訓練,特征取值可以是詞袋模型embedding向量,我們可以通過(guò)學(xué)習詞匯向量的一個(gè)新維度——詞維度(wordembeddingc維度),然后讓這個(gè)維度來(lái)決定詞代表詞匯的對應關(guān)系。
和英文不同,中文里面詞之間的關(guān)系并不是一一對應的,因此最常見(jiàn)的文本特征的方法就是基于多層神經(jīng)網(wǎng)絡(luò )的匹配,即詞代表的詞向量向量和該詞的詞語(yǔ)概率成正比,這樣可以在以詞對應為基礎的一個(gè)詞向量中獲得不重復的詞語(yǔ)。另外還有一些方法,就是我們大多數都知道的詞典關(guān)鍵詞,通過(guò)bagofwords(bow)模型來(lái)獲得詞對應的詞向量向量。
但是一些開(kāi)源工具當中并沒(méi)有詞典關(guān)鍵詞的內容,那怎么辦呢?現在也出現了詞粒度上的詞向量,說(shuō)明詞粒度上的詞向量也可以在某些情況下直接用詞袋模型提取對應關(guān)系。比如這里把“code”和“candidate”可以視為兩個(gè)單詞,詞粒度上可以直接提取對應關(guān)系。那怎么同時(shí)獲得詞粒度上和詞概率成正比的詞向量呢?這個(gè)很簡(jiǎn)單,即訓練詞粒度上的嵌入向量。
但有些情況下比如說(shuō)詞語(yǔ)已經(jīng)完整結束的情況下,再復雜的嵌入也不能彌補詞粒度上詞向量不足這個(gè)缺點(diǎn)。于是有人提出了詞嵌入(wordembedding)的概念。但是有些詞嵌入會(huì )帶有一些重疊字,比如說(shuō)“class”。實(shí)際上假設我們這里提取一個(gè)詞向量對應的這個(gè)詞的概率為一個(gè)分布,我們需要考慮兩個(gè)集合的距離是不是要越小越好,但是同時(shí)我們需要考慮兩個(gè)集合的詞向量向量加在一起是不是越小越好。
如果這兩個(gè)集合的距離太小了,就表示兩個(gè)集合的差距不是越大越好,這個(gè)時(shí)候可以加上隱層就像高斯分布那樣,使得這個(gè)兩個(gè)集合距離越小越好。其實(shí)這些距離方法理論上都可以找到對應的計算方法,但是我們也可以采用參數化的距離方法,即一個(gè)參數把詞向量好好計算一遍,然后記住,進(jìn)而規模擴大很多倍的時(shí)候就可以直接用正則項進(jìn)行約束,這樣可以降低模型的復雜度。
從高斯分布到詞粒度上的詞向量實(shí)際上能提取到的詞向量維度并不是最重要的,重要的是我們能提取到什么樣的詞向量。目前我們看到的詞向量大多是基于詞序的相似度計算,在詞序上做的詞向量會(huì )更符合我們的直覺(jué)。我們都知道詞袋模型embedding包含了向量維度與詞向量維度之間的倍數關(guān)系,如果能找到一個(gè)條件:1、這個(gè)詞向量的維度是維空間中每一維embedding向量的維度乘以n;2、詞向量的和也是維空間中詞的維度乘以n,這就實(shí)現了一個(gè)基于詞向量的。 查看全部
文章實(shí)時(shí)采集(文章實(shí)時(shí)采集和對采集點(diǎn)的編碼處理(圖))
文章實(shí)時(shí)采集和對采集點(diǎn)的編碼處理我們通常先需要對采集的數據進(jìn)行預處理,比如說(shuō)提取“特征”,然后才能進(jìn)行文本識別。最常見(jiàn)的文本特征就是詞的embedding向量了,詞向量對訓練,特征取值可以是詞袋模型embedding向量,我們可以通過(guò)學(xué)習詞匯向量的一個(gè)新維度——詞維度(wordembeddingc維度),然后讓這個(gè)維度來(lái)決定詞代表詞匯的對應關(guān)系。
和英文不同,中文里面詞之間的關(guān)系并不是一一對應的,因此最常見(jiàn)的文本特征的方法就是基于多層神經(jīng)網(wǎng)絡(luò )的匹配,即詞代表的詞向量向量和該詞的詞語(yǔ)概率成正比,這樣可以在以詞對應為基礎的一個(gè)詞向量中獲得不重復的詞語(yǔ)。另外還有一些方法,就是我們大多數都知道的詞典關(guān)鍵詞,通過(guò)bagofwords(bow)模型來(lái)獲得詞對應的詞向量向量。
但是一些開(kāi)源工具當中并沒(méi)有詞典關(guān)鍵詞的內容,那怎么辦呢?現在也出現了詞粒度上的詞向量,說(shuō)明詞粒度上的詞向量也可以在某些情況下直接用詞袋模型提取對應關(guān)系。比如這里把“code”和“candidate”可以視為兩個(gè)單詞,詞粒度上可以直接提取對應關(guān)系。那怎么同時(shí)獲得詞粒度上和詞概率成正比的詞向量呢?這個(gè)很簡(jiǎn)單,即訓練詞粒度上的嵌入向量。
但有些情況下比如說(shuō)詞語(yǔ)已經(jīng)完整結束的情況下,再復雜的嵌入也不能彌補詞粒度上詞向量不足這個(gè)缺點(diǎn)。于是有人提出了詞嵌入(wordembedding)的概念。但是有些詞嵌入會(huì )帶有一些重疊字,比如說(shuō)“class”。實(shí)際上假設我們這里提取一個(gè)詞向量對應的這個(gè)詞的概率為一個(gè)分布,我們需要考慮兩個(gè)集合的距離是不是要越小越好,但是同時(shí)我們需要考慮兩個(gè)集合的詞向量向量加在一起是不是越小越好。
如果這兩個(gè)集合的距離太小了,就表示兩個(gè)集合的差距不是越大越好,這個(gè)時(shí)候可以加上隱層就像高斯分布那樣,使得這個(gè)兩個(gè)集合距離越小越好。其實(shí)這些距離方法理論上都可以找到對應的計算方法,但是我們也可以采用參數化的距離方法,即一個(gè)參數把詞向量好好計算一遍,然后記住,進(jìn)而規模擴大很多倍的時(shí)候就可以直接用正則項進(jìn)行約束,這樣可以降低模型的復雜度。
從高斯分布到詞粒度上的詞向量實(shí)際上能提取到的詞向量維度并不是最重要的,重要的是我們能提取到什么樣的詞向量。目前我們看到的詞向量大多是基于詞序的相似度計算,在詞序上做的詞向量會(huì )更符合我們的直覺(jué)。我們都知道詞袋模型embedding包含了向量維度與詞向量維度之間的倍數關(guān)系,如果能找到一個(gè)條件:1、這個(gè)詞向量的維度是維空間中每一維embedding向量的維度乘以n;2、詞向量的和也是維空間中詞的維度乘以n,這就實(shí)現了一個(gè)基于詞向量的。
文章實(shí)時(shí)采集(具體內容如下新接到一個(gè)實(shí)時(shí)獲取攝像頭當前照片的詳細介紹)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2021-11-18 13:07
本文文章主要為大家介紹iOS中攝像頭的實(shí)時(shí)采集圖像。文章中的示例代碼很詳細,有一定的參考價(jià)值。有興趣的朋友可以參考一下。
本文示例分享了iOS中攝像頭實(shí)時(shí)采集圖像的具體代碼,供大家參考。具體內容如下
接收到新的實(shí)時(shí)獲取相機當前照片的請求,需要在設定的時(shí)間內使相機保持開(kāi)機狀態(tài),可以實(shí)時(shí)回調當前圖片數據信息;
這次結合了 AVCaptureDevice、AVCaptureSession、AVCaptureVideoPreviewLayer 和 UIView、UIImageView 和 UIImage;
GitHub
具體實(shí)現代碼如下:
#import #import #import #import NS_ASSUME_NONNULL_BEGIN @interface YHCameraView : UIView @property (nonatomic, weak) UIImageView *cameraImageView; @property (strong, nonatomic) AVCaptureDevice* device; @property (strong, nonatomic) AVCaptureSession* captureSession; @property (strong, nonatomic) AVCaptureVideoPreviewLayer* previewLayer; @property (strong, nonatomic) UIImage* cameraImage; @end NS_ASSUME_NONNULL_END
#import "YHCameraView.h" @implementation YHCameraView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor lightGrayColor]; [self createUI]; } return self; } /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ - (void)createUI { NSArray* devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; for(AVCaptureDevice *device in devices) { if([device position] == AVCaptureDevicePositionFront) // 前置攝像頭 self.device = device; } AVCaptureDeviceInput* input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; AVCaptureVideoDataOutput* output = [[AVCaptureVideoDataOutput alloc] init]; output.alwaysDiscardsLateVideoFrames = YES; dispatch_queue_t queue; queue = dispatch_queue_create("cameraQueue", NULL); [output setSampleBufferDelegate:self queue:queue]; NSString* key = (NSString *) kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; [output setVideoSettings:videoSettings]; self.captureSession = [[AVCaptureSession alloc] init]; [self.captureSession addInput:input]; [self.captureSession addOutput:output]; [self.captureSession setSessionPreset:AVCaptureSessionPresetPhoto]; self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession]; self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; // CHECK FOR YOUR APP NSInteger screenWidth = self.frame.size.width; NSInteger screenHeitht = self.frame.size.height; self.previewLayer.frame = self.bounds; self.previewLayer.orientation = AVCaptureVideoOrientationPortrait; // CHECK FOR YOUR APP // [self.layer insertSublayer:self.previewLayer atIndex:0]; // Comment-out to hide preview layer [self.captureSession startRunning]; } - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CVPixelBufferLockBaseAddress(imageBuffer, 0); uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer); size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); size_t width = CVPixelBufferGetWidth(imageBuffer); size_t height = CVPixelBufferGetHeight(imageBuffer); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); CGImageRef newImage = CGBitmapContextCreateImage(newContext); CGContextRelease(newContext); CGColorSpaceRelease(colorSpace); self.cameraImage = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored]; // UIImageOrientationDownMirrored self.cameraImageView.image = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored]; CGImageRelease(newImage); CVPixelBufferUnlockBaseAddress(imageBuffer, 0); } @end
實(shí)例化之后,可以在需要的時(shí)候直接獲取其cameraView的cameraImage;
#pragma mark - 快照采集 /// 快照采集 - (YHCameraView *)cameraView { if (!_cameraView) { YHCameraView *view = [[YHCameraView alloc] init]; view.frame = CGRectMake(1, 1, 1, 1); view.cameraImageView.image = view.cameraImage; _cameraView = view; } return _cameraView; } NSString *strImg = [YHCameraManager imageBase64EncodedWithImage:self.cameraView.cameraImage AndImageType:@"JPEG"]; // 獲取照片信息
/** 圖片轉 Base64 @param img 原圖片 @param type 圖片類(lèi)型(PNG 或 JPEG) @return 處理結果 */ + (NSString *)imageBase64EncodedWithImage:(UIImage *)img AndImageType:(NSString *)type { NSString *callBack = nil; if ([img isKindOfClass:[UIImage class]]) { NSData *data = [NSData data]; if ([type isEqualToString:@"PNG"]) { data = UIImagePNGRepresentation(img); } else { data = UIImageJPEGRepresentation(img, 1.0f); } NSString *encodedImgStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSLog(@"YHCameraManager\nencodedImgStr: %@", encodedImgStr); return encodedImgStr; } else { return callBack; } }
以上就是iOS實(shí)現的攝像頭實(shí)時(shí)采集圖像的詳細內容。更多詳情請關(guān)注html中文網(wǎng)站其他相關(guān)文章! 查看全部
文章實(shí)時(shí)采集(具體內容如下新接到一個(gè)實(shí)時(shí)獲取攝像頭當前照片的詳細介紹)
本文文章主要為大家介紹iOS中攝像頭的實(shí)時(shí)采集圖像。文章中的示例代碼很詳細,有一定的參考價(jià)值。有興趣的朋友可以參考一下。
本文示例分享了iOS中攝像頭實(shí)時(shí)采集圖像的具體代碼,供大家參考。具體內容如下
接收到新的實(shí)時(shí)獲取相機當前照片的請求,需要在設定的時(shí)間內使相機保持開(kāi)機狀態(tài),可以實(shí)時(shí)回調當前圖片數據信息;
這次結合了 AVCaptureDevice、AVCaptureSession、AVCaptureVideoPreviewLayer 和 UIView、UIImageView 和 UIImage;
GitHub
具體實(shí)現代碼如下:
#import #import #import #import NS_ASSUME_NONNULL_BEGIN @interface YHCameraView : UIView @property (nonatomic, weak) UIImageView *cameraImageView; @property (strong, nonatomic) AVCaptureDevice* device; @property (strong, nonatomic) AVCaptureSession* captureSession; @property (strong, nonatomic) AVCaptureVideoPreviewLayer* previewLayer; @property (strong, nonatomic) UIImage* cameraImage; @end NS_ASSUME_NONNULL_END
#import "YHCameraView.h" @implementation YHCameraView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor lightGrayColor]; [self createUI]; } return self; } /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ - (void)createUI { NSArray* devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; for(AVCaptureDevice *device in devices) { if([device position] == AVCaptureDevicePositionFront) // 前置攝像頭 self.device = device; } AVCaptureDeviceInput* input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; AVCaptureVideoDataOutput* output = [[AVCaptureVideoDataOutput alloc] init]; output.alwaysDiscardsLateVideoFrames = YES; dispatch_queue_t queue; queue = dispatch_queue_create("cameraQueue", NULL); [output setSampleBufferDelegate:self queue:queue]; NSString* key = (NSString *) kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; [output setVideoSettings:videoSettings]; self.captureSession = [[AVCaptureSession alloc] init]; [self.captureSession addInput:input]; [self.captureSession addOutput:output]; [self.captureSession setSessionPreset:AVCaptureSessionPresetPhoto]; self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession]; self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; // CHECK FOR YOUR APP NSInteger screenWidth = self.frame.size.width; NSInteger screenHeitht = self.frame.size.height; self.previewLayer.frame = self.bounds; self.previewLayer.orientation = AVCaptureVideoOrientationPortrait; // CHECK FOR YOUR APP // [self.layer insertSublayer:self.previewLayer atIndex:0]; // Comment-out to hide preview layer [self.captureSession startRunning]; } - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CVPixelBufferLockBaseAddress(imageBuffer, 0); uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer); size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); size_t width = CVPixelBufferGetWidth(imageBuffer); size_t height = CVPixelBufferGetHeight(imageBuffer); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); CGImageRef newImage = CGBitmapContextCreateImage(newContext); CGContextRelease(newContext); CGColorSpaceRelease(colorSpace); self.cameraImage = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored]; // UIImageOrientationDownMirrored self.cameraImageView.image = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored]; CGImageRelease(newImage); CVPixelBufferUnlockBaseAddress(imageBuffer, 0); } @end
實(shí)例化之后,可以在需要的時(shí)候直接獲取其cameraView的cameraImage;
#pragma mark - 快照采集 /// 快照采集 - (YHCameraView *)cameraView { if (!_cameraView) { YHCameraView *view = [[YHCameraView alloc] init]; view.frame = CGRectMake(1, 1, 1, 1); view.cameraImageView.image = view.cameraImage; _cameraView = view; } return _cameraView; } NSString *strImg = [YHCameraManager imageBase64EncodedWithImage:self.cameraView.cameraImage AndImageType:@"JPEG"]; // 獲取照片信息
/** 圖片轉 Base64 @param img 原圖片 @param type 圖片類(lèi)型(PNG 或 JPEG) @return 處理結果 */ + (NSString *)imageBase64EncodedWithImage:(UIImage *)img AndImageType:(NSString *)type { NSString *callBack = nil; if ([img isKindOfClass:[UIImage class]]) { NSData *data = [NSData data]; if ([type isEqualToString:@"PNG"]) { data = UIImagePNGRepresentation(img); } else { data = UIImageJPEGRepresentation(img, 1.0f); } NSString *encodedImgStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSLog(@"YHCameraManager\nencodedImgStr: %@", encodedImgStr); return encodedImgStr; } else { return callBack; } }
以上就是iOS實(shí)現的攝像頭實(shí)時(shí)采集圖像的詳細內容。更多詳情請關(guān)注html中文網(wǎng)站其他相關(guān)文章!
文章實(shí)時(shí)采集(基于半成品渲染模型的shader試別的例子(圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2021-11-11 22:03
文章實(shí)時(shí)采集,并上傳至forbuzzrender上,作者作品:qq秀效果。后來(lái)我們接手了方案的改善,方案完善了render函數。與原項目有相同的地方就是少了shader變量。接下來(lái)我們開(kāi)始重構,在老版本基礎上我們重寫(xiě)了方案中的shader,后續再試試別的例子。
這個(gè)東西叫做半成品渲染模型,就是建模過(guò)程在base+cb上面。能實(shí)現base+cb的渲染器也就是能調包,調好了也就是給方案提供樣式而已。不然的話(huà)方案根本就沒(méi)法作為一個(gè)項目開(kāi)源。
opengl如果沒(méi)有考慮游戲應用場(chǎng)景的話(huà),
調了顏色改了紋理總有個(gè)方案接受唄,做完這個(gè)項目,可以抽機會(huì )試試。
實(shí)際上是否使用這個(gè)中心貼圖是反應模型是否使用這個(gè)模型設計思想,可以在源碼中結合光照質(zhì)量和熱敏的參數來(lái)驗證這個(gè)模型使用是否合理。一旦設計思想支持到硬件上,肯定得使用。
我覺(jué)得你說(shuō)的是最后計算法則是的,這個(gè)是alias的過(guò)程,已知一個(gè)頂點(diǎn)位置和所有顏色,
具體方案應該寫(xiě)成serialization,當一個(gè)頂點(diǎn)位置發(fā)生改變時(shí),在其不同的bin的頂點(diǎn)對應所對應的頂點(diǎn)是可以被替換的。比如控制頂點(diǎn)位置需要用serialization取self相似值(int64),serialization取與另一個(gè)頂點(diǎn)bin中相鄰的頂點(diǎn)位置即可,這樣就避免了顏色相同的pass統一存放模型文件,然后和原來(lái)的模型文件合并。 查看全部
文章實(shí)時(shí)采集(基于半成品渲染模型的shader試別的例子(圖))
文章實(shí)時(shí)采集,并上傳至forbuzzrender上,作者作品:qq秀效果。后來(lái)我們接手了方案的改善,方案完善了render函數。與原項目有相同的地方就是少了shader變量。接下來(lái)我們開(kāi)始重構,在老版本基礎上我們重寫(xiě)了方案中的shader,后續再試試別的例子。
這個(gè)東西叫做半成品渲染模型,就是建模過(guò)程在base+cb上面。能實(shí)現base+cb的渲染器也就是能調包,調好了也就是給方案提供樣式而已。不然的話(huà)方案根本就沒(méi)法作為一個(gè)項目開(kāi)源。
opengl如果沒(méi)有考慮游戲應用場(chǎng)景的話(huà),
調了顏色改了紋理總有個(gè)方案接受唄,做完這個(gè)項目,可以抽機會(huì )試試。
實(shí)際上是否使用這個(gè)中心貼圖是反應模型是否使用這個(gè)模型設計思想,可以在源碼中結合光照質(zhì)量和熱敏的參數來(lái)驗證這個(gè)模型使用是否合理。一旦設計思想支持到硬件上,肯定得使用。
我覺(jué)得你說(shuō)的是最后計算法則是的,這個(gè)是alias的過(guò)程,已知一個(gè)頂點(diǎn)位置和所有顏色,
具體方案應該寫(xiě)成serialization,當一個(gè)頂點(diǎn)位置發(fā)生改變時(shí),在其不同的bin的頂點(diǎn)對應所對應的頂點(diǎn)是可以被替換的。比如控制頂點(diǎn)位置需要用serialization取self相似值(int64),serialization取與另一個(gè)頂點(diǎn)bin中相鄰的頂點(diǎn)位置即可,這樣就避免了顏色相同的pass統一存放模型文件,然后和原來(lái)的模型文件合并。
文章實(shí)時(shí)采集(如何利用機器學(xué)習等算法進(jìn)行車(chē)輛檢索?-樂(lè )題庫)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 159 次瀏覽 ? 2021-11-09 12:00
文章實(shí)時(shí)采集地理位置,對車(chē)輛牌照或行駛證號進(jìn)行標注,然后利用機器學(xué)習等算法進(jìn)行車(chē)輛辨識。產(chǎn)品相關(guān)功能的實(shí)現基于地理位置交互,在車(chē)輛信息采集基礎上實(shí)現用戶(hù)在周邊范圍內的車(chē)輛檢索。具體技術(shù)難點(diǎn)如下:地理位置引擎結構:1)點(diǎn)云和直接柵格建立圖12)點(diǎn)云變換為柵格后對車(chē)牌進(jìn)行分類(lèi)進(jìn)行采集:采集車(chē)牌區域邊界圖以及選取車(chē)牌所在柵格進(jìn)行搜索確定周邊車(chē)輛牌照數量。
搜索固定列和非固定列數據,以此保證數據采集的準確性。查詢(xún)方法的設計(機器學(xué)習):根據車(chē)牌來(lái)檢索的特征進(jìn)行內容特征抽取,在柵格上采用排序方式進(jìn)行檢索,詳細參考別人的代碼。車(chē)牌檢索過(guò)程:車(chē)牌檢索過(guò)程比較耗時(shí),根據搜索到的牌照數量控制采集個(gè)數。具體代碼如下:。
http://
快兩個(gè)月了。
看圖說(shuō)話(huà)了解一下。
硬說(shuō)本地的話(huà),加密狗+p2p+長(cháng)連接+fiddler+github上的各種依賴(lài),比如collection/alienbase/collection/trusted-atkins/javahub·github。相當麻煩不建議自己實(shí)現?,F在有好些免費的地圖數據源,走p2p。但是數據準度相對不高而且數據需要自己采集。
地圖數據商,定制化生產(chǎn),
不建議自己寫(xiě)。各個(gè)數據源難用。
第一回答給川普了 查看全部
文章實(shí)時(shí)采集(如何利用機器學(xué)習等算法進(jìn)行車(chē)輛檢索?-樂(lè )題庫)
文章實(shí)時(shí)采集地理位置,對車(chē)輛牌照或行駛證號進(jìn)行標注,然后利用機器學(xué)習等算法進(jìn)行車(chē)輛辨識。產(chǎn)品相關(guān)功能的實(shí)現基于地理位置交互,在車(chē)輛信息采集基礎上實(shí)現用戶(hù)在周邊范圍內的車(chē)輛檢索。具體技術(shù)難點(diǎn)如下:地理位置引擎結構:1)點(diǎn)云和直接柵格建立圖12)點(diǎn)云變換為柵格后對車(chē)牌進(jìn)行分類(lèi)進(jìn)行采集:采集車(chē)牌區域邊界圖以及選取車(chē)牌所在柵格進(jìn)行搜索確定周邊車(chē)輛牌照數量。
搜索固定列和非固定列數據,以此保證數據采集的準確性。查詢(xún)方法的設計(機器學(xué)習):根據車(chē)牌來(lái)檢索的特征進(jìn)行內容特征抽取,在柵格上采用排序方式進(jìn)行檢索,詳細參考別人的代碼。車(chē)牌檢索過(guò)程:車(chē)牌檢索過(guò)程比較耗時(shí),根據搜索到的牌照數量控制采集個(gè)數。具體代碼如下:。
http://
快兩個(gè)月了。
看圖說(shuō)話(huà)了解一下。
硬說(shuō)本地的話(huà),加密狗+p2p+長(cháng)連接+fiddler+github上的各種依賴(lài),比如collection/alienbase/collection/trusted-atkins/javahub·github。相當麻煩不建議自己實(shí)現?,F在有好些免費的地圖數據源,走p2p。但是數據準度相對不高而且數據需要自己采集。
地圖數據商,定制化生產(chǎn),
不建議自己寫(xiě)。各個(gè)數據源難用。
第一回答給川普了
文章實(shí)時(shí)采集(如何使用騰訊云大數據組件來(lái)完成實(shí)時(shí)監控系統的設計)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 132 次瀏覽 ? 2021-11-07 14:10
本文介紹如何使用騰訊云大數據組件完成實(shí)時(shí)監控系統的設計與實(shí)現。通過(guò)實(shí)時(shí)采集,分析云服務(wù)器(CVM)及其App應用的CPU、內存等資源消耗數據,通過(guò)短信、電話(huà)、微信等方式實(shí)時(shí)反饋監控報警信息等,有效保證系統的穩定運行。使用基于云的Kafka、Flink、ES等組件,大大減少了開(kāi)發(fā)運維人員的投入。
一、解決方案描述(一)概述
本方案結合騰訊云CKafka、流計算Oceanus(Flink)、Elasticsearch、Prometheus等,通過(guò)Filebeat實(shí)時(shí)采集系統和應用監控數據,傳輸到CKafka,再連接CKafka數據流計算 Oceanus (Flink) ,經(jīng)過(guò)簡(jiǎn)單的業(yè)務(wù)邏輯處理,輸出到 Elasticsearch,最后通過(guò) Kibana 頁(yè)面查詢(xún)結果。方案中使用Promethus監控流計算Oceanus作業(yè)運行狀態(tài)等系統指標,使用云Grafana監控CVM或業(yè)務(wù)應用指標。
(二)方案結構二、前期準備
在實(shí)施本方案前,請確保已創(chuàng )建并配置好相應的大數據組件。
(一)創(chuàng )建私網(wǎng)VPC
私有網(wǎng)絡(luò )(VPC)是您在騰訊云上自定義的邏輯隔離的網(wǎng)絡(luò )空間。搭建CKafka、流計算Oceanus、Elasticsearch集群等服務(wù)時(shí),選擇同一個(gè)VPC。具體創(chuàng )建步驟請參考幫助文檔()。
(二)創(chuàng )建CKafka實(shí)例
Kafka建議選擇最新的2.4.1版本,與Filebeat 采集工具有更好的兼容性。
購買(mǎi)完成后,創(chuàng )建一個(gè)Kafka主題:topic-app-info
(三)創(chuàng )建流計算Oceanus集群
流計算 Oceanus 是大數據產(chǎn)品生態(tài)系統的實(shí)時(shí)分析工具。它是基于A(yíng)pache Flink構建的企業(yè)級實(shí)時(shí)大數據分析平臺,具有一站式開(kāi)發(fā)、無(wú)縫連接、亞秒級延遲、低成本、安全穩定等特點(diǎn)。流計算Oceanus旨在實(shí)現企業(yè)數據價(jià)值最大化,加速企業(yè)實(shí)時(shí)數字化建設。
在Streaming Oceanus控制臺的【集群管理】->【新建集群】頁(yè)面創(chuàng )建集群。具體步驟請參考幫助文檔()。
(四)創(chuàng )建 Elasticsearch 實(shí)例
在 Elasticsearch 控制臺中,點(diǎn)擊左上角的【新建】,創(chuàng )建集群。具體步驟請參考幫助文檔()。
(五)創(chuàng )建云監控Prometheus實(shí)例
為了顯示自定義的系統指標,需要購買(mǎi) Promethus 服務(wù)。只需要自定義業(yè)務(wù)指標的同學(xué)可以省略這一步。
進(jìn)入云監控控制臺,點(diǎn)擊左側的【Prometheus監控】,新建一個(gè)Prometheus實(shí)例。具體步驟請參考幫助文檔()。
(六)創(chuàng )建獨立的 Grafana 資源
單機Grafana需要在灰度發(fā)布的Grafana管理頁(yè)面()單獨購買(mǎi),實(shí)現業(yè)務(wù)監控指標的展示。
(七)安裝和配置 Filebeat
Filebeat是一個(gè)輕量級的日志數據采集工具,通過(guò)監控指定位置的文件來(lái)采集信息。在需要監控該VPC下的主機信息和應用信息的云服務(wù)器上安裝Filebeat。安裝方法一:下載Filebeat并安裝。下載地址(); 方法二:使用【Elasticsearch管理頁(yè)面】-->【beats管理】中提供的Filebeat。本例使用方法一。下載到CVM并配置Filebeat,在filebeat.yml文件中添加如下配置項:
# 監控日志文件配置- type: logenabled: truepaths: - /tmp/test.log #- c:\programdata\elasticsearch\logs\*
# 監控數據輸出項配置output.kafka:version: 2.0.0 # kafka版本號hosts: ["xx.xx.xx.xx:xxxx"] # 請填寫(xiě)實(shí)際的IP地址+端口topic: 'topic-app-info' # 請填寫(xiě)實(shí)際的topic
請根據實(shí)際業(yè)務(wù)需求配置相應的Filebeat.yml文件,參考Filebeat官方文檔()。
注:示例中使用的是2.4.1的CKafka版本,此處配置版本:2.0.0。不兼容的版本可能會(huì )出現“ERROR [kafka] kafka/client.go:341 Kafka (topic=topic-app-info): drop invalid message”錯誤
三、項目實(shí)現
接下來(lái)通過(guò)一個(gè)案例來(lái)介紹如何通過(guò)流計算Oceanus實(shí)現個(gè)性化監控。
(一)Filebeat 采集 數據
1、進(jìn)入Filebeat根目錄,啟動(dòng)Filebeat獲取數據采集。在示例中,采集 顯示了 top 命令中顯示的 CPU、內存等信息。還可以采集jar應用日志、JVM使用情況、監聽(tīng)端口等,詳情請參考Filebeat官網(wǎng)
()。
# filebeat啟動(dòng)
./filebeat -e -c filebeat.yml
# 監控系統信息寫(xiě)入test.log文件
top -d 10 >>/tmp/test.log
2、 進(jìn)入CKafka頁(yè)面,點(diǎn)擊左側【消息查詢(xún)】,查詢(xún)對應的主題消息,驗證數據是否為采集。
Filebeat采集中Kafka的數據格式:
{ "@timestamp": "2021-08-30T10:22:52.888Z", "@metadata": { "beat": "filebeat", "type": "_doc", "version": "7.14.0" }, "input": { "type": "log" }, "host": { "ip": ["xx.xx.xx.xx", "xx::xx:xx:xx:xx"], "mac": ["xx:xx:xx:xx:xx:xx"], "hostname": "xx.xx.xx.xx", "architecture": "x86_64", "os": { "type": "linux", "platform": "centos", "version": "7(Core)", "family": "redhat", "name": "CentOSLinux", "kernel": "3.10.0-1062.9.1.el7.x86_64", "codename": "Core" }, "id": "0ea734564f9a4e2881b866b82d679dfc", "name": "xx.xx.xx.xx", "containerized": false }, "agent": { "name": "xx.xx.xx.xx", "type": "filebeat", "version": "7.14.0", "hostname": "xx.xx.xx.xx", "ephemeral_id": "6c0922a6-17af-4474-9e88-1fc3b1c3b1a9", "id": "6b23463c-0654-4f8b-83a9-84ec75721311" }, "ecs": { "version": "1.10.0" }, "log": { "offset": 2449931, "file": { "path": "/tmp/test.log" } }, "message": "(B[m16root0-20000S0.00.00:00.00kworker/1:0H(B[m[39;49m[K"}
(二)創(chuàng )建 Flink SQL 作業(yè)
使用流計算 Oceanus 處理 CKafka 訪(fǎng)問(wèn)的數據并存儲在 Elasticsearch 中。
1、定義源
根據 Filebeat 中的 json 消息格式構建 Flink Table Source。
CREATE TABLE DataInput ( `@timestamp` VARCHAR, `host` ROW, `log` ROW, `message` VARCHAR) WITH ( 'connector' = 'kafka', -- 可選 'kafka','kafka-0.11'. 注意選擇對應的內置 Connector 'topic' = 'topic-app-info', -- 替換為您要消費的 Topic 'scan.startup.mode' = 'earliest-offset', 'properties.bootstrap.servers' = '10.0.0.29:9092', 'properties.group.id' = 'oceanus_group2', -- 必選參數, 一定要指定 Group ID 'format' = 'json', 'json.ignore-parse-errors' = 'true', -- 忽略 JSON 結構解析異常 'json.fail-on-missing-field' = 'false' -- 如果設置為 true, 則遇到缺失字段會(huì )報錯 設置為 false 則缺失字段設置為 null);
2、定義接收器
CREATE TABLE es_output ( `id` VARCHAR, `ip` ARRAY, `path` VARCHAR, `num` INTEGER, `message` VARCHAR, `createTime` VARCHAR) WITH ( 'connector.type' = 'elasticsearch', 'connector.version' = '6', 'connector.hosts' = 'http://10.0.0.175:9200', 'connector.index' = 'oceanus_test2', 'connector.document-type' = '_doc', 'connector.username' = 'elastic', 'connector.password' = 'yourpassword', 'update-mode' = 'upsert', -- 可選無(wú)主鍵的 'append' 模式,或有主鍵的 'upsert' 模式 'connector.key-null-literal' = 'n/a', -- 主鍵為 null 時(shí)的替代字符串,默認是 'null' 'format.type' = 'json' -- 輸出數據格式, 目前只支持 'json');
3、處理業(yè)務(wù)數據
INSERT INTO es_outputSELECT host.id as `id`, host.ip as `ip`, log.file.path as `path`, log.`offset` as `num`, message, `@timestamp` as `createTime`from DataInput;
4、配置作業(yè)參數
【內置連接器】選擇flink-connector-elasticsearch6和flink-connector-kafka
注:根據實(shí)際版本選擇
5、查詢(xún)ES數據
在ES控制臺的Kibana頁(yè)面查詢(xún)數據,或者輸入同一子網(wǎng)的CVM,使用如下命令查詢(xún):
# 查詢(xún)索引 username:password請替換為實(shí)際賬號密碼curl -XGET -u username:password http://xx.xx.xx.xx:xxxx/oceanus_test2/_search -H 'Content-Type: application/json' -d'{ "query": { "match_all": {}}, "size": 10}'
更多訪(fǎng)問(wèn)方式請參考訪(fǎng)問(wèn)ES集群()。
(三)系統指示燈監控
本章主要實(shí)現系統信息監控,對Flink作業(yè)的運行狀態(tài)進(jìn)行監控和告警。
Prometheus 是一個(gè)非常靈活的時(shí)間序列數據庫,通常用于監控數據的存儲、計算和報警。流計算 Oceanus 建議用戶(hù)使用騰訊云監控提供的 Prometheus 服務(wù),避免部署和運維成本。同時(shí)還支持騰訊云通知模板,可以輕松通過(guò)短信、電話(huà)、郵件、企業(yè)微信機器人等方式將報警信息發(fā)送到不同的收件人。
監控配置
流計算 Oceanus 作業(yè)監控
除了流計算Oceanus控制臺自帶的監控信息外,還可以配置目前支持任務(wù)級細粒度監控、作業(yè)級監控、集群Flink作業(yè)列表監控。
1、 流計算Oceanus作業(yè)詳情頁(yè)面,點(diǎn)擊【作業(yè)參數】,在【高級參數】中添加如下配置:
pipeline.max-parallelism: 2048metrics.reporters: promgatewaymetrics.reporter.promgateway.host: xx.xx.xx.xx # Prometheus實(shí)例地址metrics.reporter.promgateway.port: 9090 # Prometheus實(shí)例端口metrics.reporter.promgateway.needBasicAuth: truemetrics.reporter.promgateway.password: xxxxxxxxxxx # Prometheus實(shí)例密碼metrics.reporter.promgateway.interval: 10 SECONDS
2、 在任意一個(gè)流計算Oceanus作業(yè)中,點(diǎn)擊【云監控】進(jìn)入云Prometheus實(shí)例,點(diǎn)擊鏈接進(jìn)入Grafana(這里不能輸入灰度的Grafana),并導入json文件。有關(guān)詳細信息,請參閱訪(fǎng)問(wèn) Prometheus 自定義監視器
()。
3、3、顯示的Flink任務(wù)監控效果如下,用戶(hù)也可以點(diǎn)擊【Edit】設置不同的Panels來(lái)優(yōu)化顯示效果。
報警配置
1、 進(jìn)入騰訊云監控界面,點(diǎn)擊左側【Prometheus監控】,點(diǎn)擊購買(mǎi)的實(shí)例進(jìn)入服務(wù)管理頁(yè)面,點(diǎn)擊左側【告警策略】,點(diǎn)擊【新建】,配置相關(guān)信息. 具體操作參考訪(fǎng)問(wèn)Prometheus自定義監控
()。
2、設置報警通知。選擇[選擇模板]或[新建]設置通知模板。
3、短信通知信息
(四)業(yè)務(wù)指標監控
使用Filebeat采集應用業(yè)務(wù)數據,通過(guò)流計算的Oceanus服務(wù)處理數據存儲在ES中,使用ES+Grafana監控業(yè)務(wù)數據。
1、Grafana 配置 ES 數據源。在灰度發(fā)布中進(jìn)入 Grafana 控制臺
(),進(jìn)入剛剛創(chuàng )建的Grafana服務(wù),找到網(wǎng)址打開(kāi)登錄,Grafana賬號為admin,登錄后點(diǎn)擊【配置】,點(diǎn)擊【添加源】,搜索elasticsearch,填寫(xiě)相關(guān)ES實(shí)例信息,并添加數據源。
2、 點(diǎn)擊左側【Dashboards】,點(diǎn)擊【Manage】,點(diǎn)擊右上角的【New Dashboard】,新建面板,編輯面板。
3、 顯示效果如下:
注:本辦公室僅為示例,無(wú)實(shí)際業(yè)務(wù)
四、總結
本方案同時(shí)嘗試了系統監控指標和業(yè)務(wù)監控指標兩種監控方案。如果只需要監控業(yè)務(wù)指標,可以省略Prometus相關(guān)操作。
此外,需要注意的是: 查看全部
文章實(shí)時(shí)采集(如何使用騰訊云大數據組件來(lái)完成實(shí)時(shí)監控系統的設計)
本文介紹如何使用騰訊云大數據組件完成實(shí)時(shí)監控系統的設計與實(shí)現。通過(guò)實(shí)時(shí)采集,分析云服務(wù)器(CVM)及其App應用的CPU、內存等資源消耗數據,通過(guò)短信、電話(huà)、微信等方式實(shí)時(shí)反饋監控報警信息等,有效保證系統的穩定運行。使用基于云的Kafka、Flink、ES等組件,大大減少了開(kāi)發(fā)運維人員的投入。
一、解決方案描述(一)概述
本方案結合騰訊云CKafka、流計算Oceanus(Flink)、Elasticsearch、Prometheus等,通過(guò)Filebeat實(shí)時(shí)采集系統和應用監控數據,傳輸到CKafka,再連接CKafka數據流計算 Oceanus (Flink) ,經(jīng)過(guò)簡(jiǎn)單的業(yè)務(wù)邏輯處理,輸出到 Elasticsearch,最后通過(guò) Kibana 頁(yè)面查詢(xún)結果。方案中使用Promethus監控流計算Oceanus作業(yè)運行狀態(tài)等系統指標,使用云Grafana監控CVM或業(yè)務(wù)應用指標。
(二)方案結構二、前期準備
在實(shí)施本方案前,請確保已創(chuàng )建并配置好相應的大數據組件。
(一)創(chuàng )建私網(wǎng)VPC
私有網(wǎng)絡(luò )(VPC)是您在騰訊云上自定義的邏輯隔離的網(wǎng)絡(luò )空間。搭建CKafka、流計算Oceanus、Elasticsearch集群等服務(wù)時(shí),選擇同一個(gè)VPC。具體創(chuàng )建步驟請參考幫助文檔()。
(二)創(chuàng )建CKafka實(shí)例
Kafka建議選擇最新的2.4.1版本,與Filebeat 采集工具有更好的兼容性。
購買(mǎi)完成后,創(chuàng )建一個(gè)Kafka主題:topic-app-info
(三)創(chuàng )建流計算Oceanus集群
流計算 Oceanus 是大數據產(chǎn)品生態(tài)系統的實(shí)時(shí)分析工具。它是基于A(yíng)pache Flink構建的企業(yè)級實(shí)時(shí)大數據分析平臺,具有一站式開(kāi)發(fā)、無(wú)縫連接、亞秒級延遲、低成本、安全穩定等特點(diǎn)。流計算Oceanus旨在實(shí)現企業(yè)數據價(jià)值最大化,加速企業(yè)實(shí)時(shí)數字化建設。
在Streaming Oceanus控制臺的【集群管理】->【新建集群】頁(yè)面創(chuàng )建集群。具體步驟請參考幫助文檔()。
(四)創(chuàng )建 Elasticsearch 實(shí)例
在 Elasticsearch 控制臺中,點(diǎn)擊左上角的【新建】,創(chuàng )建集群。具體步驟請參考幫助文檔()。
(五)創(chuàng )建云監控Prometheus實(shí)例
為了顯示自定義的系統指標,需要購買(mǎi) Promethus 服務(wù)。只需要自定義業(yè)務(wù)指標的同學(xué)可以省略這一步。
進(jìn)入云監控控制臺,點(diǎn)擊左側的【Prometheus監控】,新建一個(gè)Prometheus實(shí)例。具體步驟請參考幫助文檔()。
(六)創(chuàng )建獨立的 Grafana 資源
單機Grafana需要在灰度發(fā)布的Grafana管理頁(yè)面()單獨購買(mǎi),實(shí)現業(yè)務(wù)監控指標的展示。
(七)安裝和配置 Filebeat
Filebeat是一個(gè)輕量級的日志數據采集工具,通過(guò)監控指定位置的文件來(lái)采集信息。在需要監控該VPC下的主機信息和應用信息的云服務(wù)器上安裝Filebeat。安裝方法一:下載Filebeat并安裝。下載地址(); 方法二:使用【Elasticsearch管理頁(yè)面】-->【beats管理】中提供的Filebeat。本例使用方法一。下載到CVM并配置Filebeat,在filebeat.yml文件中添加如下配置項:
# 監控日志文件配置- type: logenabled: truepaths: - /tmp/test.log #- c:\programdata\elasticsearch\logs\*
# 監控數據輸出項配置output.kafka:version: 2.0.0 # kafka版本號hosts: ["xx.xx.xx.xx:xxxx"] # 請填寫(xiě)實(shí)際的IP地址+端口topic: 'topic-app-info' # 請填寫(xiě)實(shí)際的topic
請根據實(shí)際業(yè)務(wù)需求配置相應的Filebeat.yml文件,參考Filebeat官方文檔()。
注:示例中使用的是2.4.1的CKafka版本,此處配置版本:2.0.0。不兼容的版本可能會(huì )出現“ERROR [kafka] kafka/client.go:341 Kafka (topic=topic-app-info): drop invalid message”錯誤
三、項目實(shí)現
接下來(lái)通過(guò)一個(gè)案例來(lái)介紹如何通過(guò)流計算Oceanus實(shí)現個(gè)性化監控。
(一)Filebeat 采集 數據
1、進(jìn)入Filebeat根目錄,啟動(dòng)Filebeat獲取數據采集。在示例中,采集 顯示了 top 命令中顯示的 CPU、內存等信息。還可以采集jar應用日志、JVM使用情況、監聽(tīng)端口等,詳情請參考Filebeat官網(wǎng)
()。
# filebeat啟動(dòng)
./filebeat -e -c filebeat.yml
# 監控系統信息寫(xiě)入test.log文件
top -d 10 >>/tmp/test.log
2、 進(jìn)入CKafka頁(yè)面,點(diǎn)擊左側【消息查詢(xún)】,查詢(xún)對應的主題消息,驗證數據是否為采集。
Filebeat采集中Kafka的數據格式:
{ "@timestamp": "2021-08-30T10:22:52.888Z", "@metadata": { "beat": "filebeat", "type": "_doc", "version": "7.14.0" }, "input": { "type": "log" }, "host": { "ip": ["xx.xx.xx.xx", "xx::xx:xx:xx:xx"], "mac": ["xx:xx:xx:xx:xx:xx"], "hostname": "xx.xx.xx.xx", "architecture": "x86_64", "os": { "type": "linux", "platform": "centos", "version": "7(Core)", "family": "redhat", "name": "CentOSLinux", "kernel": "3.10.0-1062.9.1.el7.x86_64", "codename": "Core" }, "id": "0ea734564f9a4e2881b866b82d679dfc", "name": "xx.xx.xx.xx", "containerized": false }, "agent": { "name": "xx.xx.xx.xx", "type": "filebeat", "version": "7.14.0", "hostname": "xx.xx.xx.xx", "ephemeral_id": "6c0922a6-17af-4474-9e88-1fc3b1c3b1a9", "id": "6b23463c-0654-4f8b-83a9-84ec75721311" }, "ecs": { "version": "1.10.0" }, "log": { "offset": 2449931, "file": { "path": "/tmp/test.log" } }, "message": "(B[m16root0-20000S0.00.00:00.00kworker/1:0H(B[m[39;49m[K"}
(二)創(chuàng )建 Flink SQL 作業(yè)
使用流計算 Oceanus 處理 CKafka 訪(fǎng)問(wèn)的數據并存儲在 Elasticsearch 中。
1、定義源
根據 Filebeat 中的 json 消息格式構建 Flink Table Source。
CREATE TABLE DataInput ( `@timestamp` VARCHAR, `host` ROW, `log` ROW, `message` VARCHAR) WITH ( 'connector' = 'kafka', -- 可選 'kafka','kafka-0.11'. 注意選擇對應的內置 Connector 'topic' = 'topic-app-info', -- 替換為您要消費的 Topic 'scan.startup.mode' = 'earliest-offset', 'properties.bootstrap.servers' = '10.0.0.29:9092', 'properties.group.id' = 'oceanus_group2', -- 必選參數, 一定要指定 Group ID 'format' = 'json', 'json.ignore-parse-errors' = 'true', -- 忽略 JSON 結構解析異常 'json.fail-on-missing-field' = 'false' -- 如果設置為 true, 則遇到缺失字段會(huì )報錯 設置為 false 則缺失字段設置為 null);
2、定義接收器
CREATE TABLE es_output ( `id` VARCHAR, `ip` ARRAY, `path` VARCHAR, `num` INTEGER, `message` VARCHAR, `createTime` VARCHAR) WITH ( 'connector.type' = 'elasticsearch', 'connector.version' = '6', 'connector.hosts' = 'http://10.0.0.175:9200', 'connector.index' = 'oceanus_test2', 'connector.document-type' = '_doc', 'connector.username' = 'elastic', 'connector.password' = 'yourpassword', 'update-mode' = 'upsert', -- 可選無(wú)主鍵的 'append' 模式,或有主鍵的 'upsert' 模式 'connector.key-null-literal' = 'n/a', -- 主鍵為 null 時(shí)的替代字符串,默認是 'null' 'format.type' = 'json' -- 輸出數據格式, 目前只支持 'json');
3、處理業(yè)務(wù)數據
INSERT INTO es_outputSELECT host.id as `id`, host.ip as `ip`, log.file.path as `path`, log.`offset` as `num`, message, `@timestamp` as `createTime`from DataInput;
4、配置作業(yè)參數
【內置連接器】選擇flink-connector-elasticsearch6和flink-connector-kafka
注:根據實(shí)際版本選擇
5、查詢(xún)ES數據
在ES控制臺的Kibana頁(yè)面查詢(xún)數據,或者輸入同一子網(wǎng)的CVM,使用如下命令查詢(xún):
# 查詢(xún)索引 username:password請替換為實(shí)際賬號密碼curl -XGET -u username:password http://xx.xx.xx.xx:xxxx/oceanus_test2/_search -H 'Content-Type: application/json' -d'{ "query": { "match_all": {}}, "size": 10}'
更多訪(fǎng)問(wèn)方式請參考訪(fǎng)問(wèn)ES集群()。
(三)系統指示燈監控
本章主要實(shí)現系統信息監控,對Flink作業(yè)的運行狀態(tài)進(jìn)行監控和告警。
Prometheus 是一個(gè)非常靈活的時(shí)間序列數據庫,通常用于監控數據的存儲、計算和報警。流計算 Oceanus 建議用戶(hù)使用騰訊云監控提供的 Prometheus 服務(wù),避免部署和運維成本。同時(shí)還支持騰訊云通知模板,可以輕松通過(guò)短信、電話(huà)、郵件、企業(yè)微信機器人等方式將報警信息發(fā)送到不同的收件人。
監控配置
流計算 Oceanus 作業(yè)監控
除了流計算Oceanus控制臺自帶的監控信息外,還可以配置目前支持任務(wù)級細粒度監控、作業(yè)級監控、集群Flink作業(yè)列表監控。
1、 流計算Oceanus作業(yè)詳情頁(yè)面,點(diǎn)擊【作業(yè)參數】,在【高級參數】中添加如下配置:
pipeline.max-parallelism: 2048metrics.reporters: promgatewaymetrics.reporter.promgateway.host: xx.xx.xx.xx # Prometheus實(shí)例地址metrics.reporter.promgateway.port: 9090 # Prometheus實(shí)例端口metrics.reporter.promgateway.needBasicAuth: truemetrics.reporter.promgateway.password: xxxxxxxxxxx # Prometheus實(shí)例密碼metrics.reporter.promgateway.interval: 10 SECONDS
2、 在任意一個(gè)流計算Oceanus作業(yè)中,點(diǎn)擊【云監控】進(jìn)入云Prometheus實(shí)例,點(diǎn)擊鏈接進(jìn)入Grafana(這里不能輸入灰度的Grafana),并導入json文件。有關(guān)詳細信息,請參閱訪(fǎng)問(wèn) Prometheus 自定義監視器
()。
3、3、顯示的Flink任務(wù)監控效果如下,用戶(hù)也可以點(diǎn)擊【Edit】設置不同的Panels來(lái)優(yōu)化顯示效果。
報警配置
1、 進(jìn)入騰訊云監控界面,點(diǎn)擊左側【Prometheus監控】,點(diǎn)擊購買(mǎi)的實(shí)例進(jìn)入服務(wù)管理頁(yè)面,點(diǎn)擊左側【告警策略】,點(diǎn)擊【新建】,配置相關(guān)信息. 具體操作參考訪(fǎng)問(wèn)Prometheus自定義監控
()。
2、設置報警通知。選擇[選擇模板]或[新建]設置通知模板。
3、短信通知信息
(四)業(yè)務(wù)指標監控
使用Filebeat采集應用業(yè)務(wù)數據,通過(guò)流計算的Oceanus服務(wù)處理數據存儲在ES中,使用ES+Grafana監控業(yè)務(wù)數據。
1、Grafana 配置 ES 數據源。在灰度發(fā)布中進(jìn)入 Grafana 控制臺
(),進(jìn)入剛剛創(chuàng )建的Grafana服務(wù),找到網(wǎng)址打開(kāi)登錄,Grafana賬號為admin,登錄后點(diǎn)擊【配置】,點(diǎn)擊【添加源】,搜索elasticsearch,填寫(xiě)相關(guān)ES實(shí)例信息,并添加數據源。
2、 點(diǎn)擊左側【Dashboards】,點(diǎn)擊【Manage】,點(diǎn)擊右上角的【New Dashboard】,新建面板,編輯面板。
3、 顯示效果如下:
注:本辦公室僅為示例,無(wú)實(shí)際業(yè)務(wù)
四、總結
本方案同時(shí)嘗試了系統監控指標和業(yè)務(wù)監控指標兩種監控方案。如果只需要監控業(yè)務(wù)指標,可以省略Prometus相關(guān)操作。
此外,需要注意的是:
文章實(shí)時(shí)采集(忙數據庫數據同步到數據倉庫的事情,不涉及具體細節)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2021-11-07 14:08
上個(gè)月一直在忙著(zhù)把數據庫數據同步到數據倉庫。我現在應該可以簡(jiǎn)單說(shuō)一下,不涉及具體細節,純粹是記錄我們團隊的所作所為。
背景
數據倉庫的分層建模理論中有一層數據叫做ODS(Operational Data Store),它往往存儲原創(chuàng )業(yè)務(wù)層數據,不做任何處理。這一層的數據來(lái)源很多,但大部分都會(huì )有來(lái)自業(yè)務(wù)數據庫的數據。來(lái)自業(yè)務(wù)數據庫采集的數據,然后導入HDFS,現在是數據倉庫的重要組成部分。
來(lái)自業(yè)務(wù)數據庫采集的數據分為兩種形式:
通過(guò)JDBC協(xié)議,使用select *方式從數據庫中提取所有數據并同步到HDFS。數據格式可以轉成文本然后以L(fǎng)oad的形式導入,也可以直接通過(guò)DataX、Sqoop等數據傳輸工具登陸HDFS。數據庫將數據更改消息發(fā)送到某個(gè)消息中間件,然后使用某個(gè)流處理工具將數據更改消息一一重現。
第一種方法的實(shí)現簡(jiǎn)單,但缺點(diǎn)也很明顯:
如果選擇第二種方式,實(shí)現比較復雜,目前HDFS上層計算引擎大多不支持數據更新、刪除等SQL原語(yǔ),導致需要分布式數據庫(參考文章:) 或者使用CDC(Change Data Capture)+merge方法(參考文章:)。
遇到的困難
在我們的團隊中,一些數據是直接從外部系統訪(fǎng)問(wèn)的。它只提供某種形式的數據更新消息,類(lèi)似于MySQL的binlog,但是使用的協(xié)議完全不同,細節不詳。消息收錄四種不同的數據更新操作:插入(插入一條新數據)、非主鍵更新(根據主鍵更新一條數據的非主鍵字段)、主鍵更新(更新一條數據的主鍵字段基于主鍵))和delete(刪除一條數據)。
之前我們使用 Kudu 來(lái)接受這部分數據:使用 Spark Streaming 從 Kafka 中一一讀取數據,對 Kudu 中的數據進(jìn)行插入、非主鍵更新、刪除、主鍵更新等操作。數據更新操作。主鍵更新操作比較復雜,分為四個(gè)步驟:將舊主鍵數據讀入內存,更新內存中舊主鍵數據,刪除舊主鍵數據,插入新主鍵數據。
當數據量很小的時(shí)候,所有的問(wèn)題都不是問(wèn)題。當數據量很大的時(shí)候,尤其是主鍵更新的消息很多的時(shí)候,上面描述的過(guò)程就有問(wèn)題了。例如,每次主鍵更新都需要與 Kudu 交互四次。
所以我們參考美團的文章實(shí)現CDC(Change Data Capture)+merge來(lái)處理數據。
同步
目前網(wǎng)上所有的文章都只提到了插入、非主鍵更新和刪除的操作,但是對于主鍵和非主鍵的一些字段的更新并沒(méi)有很好的答案。而這也是本月工作的核心。讀者可以思考如何處理主鍵更新操作,以及如何更新一些不是主鍵的字段。
經(jīng)驗
經(jīng)過(guò)一個(gè)多月的努力,這項工作即將結束,為此增加了很多課程。目前我們注意到,主流分布式數據庫在遇到數百億表的實(shí)時(shí)更新操作時(shí),仍然存在很多問(wèn)題,尤其是消息中大量的主鍵更新操作。與流處理相比,成熟的批量計算引擎和HDFS存儲在遇到大規模數據處理時(shí)更加可靠。 查看全部
文章實(shí)時(shí)采集(忙數據庫數據同步到數據倉庫的事情,不涉及具體細節)
上個(gè)月一直在忙著(zhù)把數據庫數據同步到數據倉庫。我現在應該可以簡(jiǎn)單說(shuō)一下,不涉及具體細節,純粹是記錄我們團隊的所作所為。
背景
數據倉庫的分層建模理論中有一層數據叫做ODS(Operational Data Store),它往往存儲原創(chuàng )業(yè)務(wù)層數據,不做任何處理。這一層的數據來(lái)源很多,但大部分都會(huì )有來(lái)自業(yè)務(wù)數據庫的數據。來(lái)自業(yè)務(wù)數據庫采集的數據,然后導入HDFS,現在是數據倉庫的重要組成部分。
來(lái)自業(yè)務(wù)數據庫采集的數據分為兩種形式:
通過(guò)JDBC協(xié)議,使用select *方式從數據庫中提取所有數據并同步到HDFS。數據格式可以轉成文本然后以L(fǎng)oad的形式導入,也可以直接通過(guò)DataX、Sqoop等數據傳輸工具登陸HDFS。數據庫將數據更改消息發(fā)送到某個(gè)消息中間件,然后使用某個(gè)流處理工具將數據更改消息一一重現。
第一種方法的實(shí)現簡(jiǎn)單,但缺點(diǎn)也很明顯:
如果選擇第二種方式,實(shí)現比較復雜,目前HDFS上層計算引擎大多不支持數據更新、刪除等SQL原語(yǔ),導致需要分布式數據庫(參考文章:) 或者使用CDC(Change Data Capture)+merge方法(參考文章:)。
遇到的困難
在我們的團隊中,一些數據是直接從外部系統訪(fǎng)問(wèn)的。它只提供某種形式的數據更新消息,類(lèi)似于MySQL的binlog,但是使用的協(xié)議完全不同,細節不詳。消息收錄四種不同的數據更新操作:插入(插入一條新數據)、非主鍵更新(根據主鍵更新一條數據的非主鍵字段)、主鍵更新(更新一條數據的主鍵字段基于主鍵))和delete(刪除一條數據)。
之前我們使用 Kudu 來(lái)接受這部分數據:使用 Spark Streaming 從 Kafka 中一一讀取數據,對 Kudu 中的數據進(jìn)行插入、非主鍵更新、刪除、主鍵更新等操作。數據更新操作。主鍵更新操作比較復雜,分為四個(gè)步驟:將舊主鍵數據讀入內存,更新內存中舊主鍵數據,刪除舊主鍵數據,插入新主鍵數據。
當數據量很小的時(shí)候,所有的問(wèn)題都不是問(wèn)題。當數據量很大的時(shí)候,尤其是主鍵更新的消息很多的時(shí)候,上面描述的過(guò)程就有問(wèn)題了。例如,每次主鍵更新都需要與 Kudu 交互四次。
所以我們參考美團的文章實(shí)現CDC(Change Data Capture)+merge來(lái)處理數據。
同步
目前網(wǎng)上所有的文章都只提到了插入、非主鍵更新和刪除的操作,但是對于主鍵和非主鍵的一些字段的更新并沒(méi)有很好的答案。而這也是本月工作的核心。讀者可以思考如何處理主鍵更新操作,以及如何更新一些不是主鍵的字段。
經(jīng)驗
經(jīng)過(guò)一個(gè)多月的努力,這項工作即將結束,為此增加了很多課程。目前我們注意到,主流分布式數據庫在遇到數百億表的實(shí)時(shí)更新操作時(shí),仍然存在很多問(wèn)題,尤其是消息中大量的主鍵更新操作。與流處理相比,成熟的批量計算引擎和HDFS存儲在遇到大規模數據處理時(shí)更加可靠。
文章實(shí)時(shí)采集(如何利用文章采集器讓蜘蛛瘋狂收錄排名?(圖) )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2022-01-10 09:15
)
如何使用文章采集器讓蜘蛛瘋狂收錄等級?每個(gè)搜索引擎都有自己的蜘蛛程序。蜘蛛程序通過(guò)網(wǎng)頁(yè)的鏈接地址搜索該網(wǎng)頁(yè),直到爬取到這個(gè)網(wǎng)站的所有網(wǎng)頁(yè),然后通過(guò)搜索引擎算法對網(wǎng)站進(jìn)行評價(jià),得到評價(jià)。如果把互聯(lián)網(wǎng)比作蜘蛛網(wǎng),那么蜘蛛程序對每張網(wǎng)站圖像的爬行活動(dòng)就稱(chēng)為蜘蛛爬行。
如何吸引蜘蛛爬取頁(yè)面
1、一個(gè) 網(wǎng)站 和頁(yè)面權重。算是質(zhì)量上乘,老的網(wǎng)站的權重比較高。這個(gè)網(wǎng)站的網(wǎng)絡(luò )爬取深度會(huì )比較高,也收錄很多。
2、網(wǎng)站 的更新頻率。蜘蛛抓取的每個(gè)頁(yè)面的數據存儲。如果爬蟲(chóng)第二次發(fā)現第一個(gè)收錄完全相同的頁(yè)面,則該頁(yè)面不會(huì )更新,并且蜘蛛不需要經(jīng)常捕獲它。網(wǎng)站的頁(yè)面內容更新頻繁,蜘蛛會(huì )更頻繁地訪(fǎng)問(wèn)該頁(yè)面,頁(yè)面上會(huì )出現一個(gè)新的鏈接,這將更快地跟蹤和抓取蜘蛛。
3、網(wǎng)站 的原創(chuàng ) 內容。百度蜘蛛的誘惑很大原創(chuàng )內容,原創(chuàng )內容的主食,搜索引擎蜘蛛每天都需要。
4、網(wǎng)站的整體結構。包括:頁(yè)面更新?tīng)顟B(tài)、標題、關(guān)鍵詞、標題、關(guān)鍵詞、meta中嵌入的描述標簽、導航欄等。
5、建筑工地地圖。網(wǎng)站地圖就像一個(gè)燈塔,唯一一個(gè)清晰的燈塔可以指引蜘蛛的下落。引誘更多蜘蛛的便捷方式。
6、內部鏈接優(yōu)化。蜘蛛來(lái)到你的網(wǎng)站,自然是通過(guò)你的網(wǎng)站的結構,通過(guò)你的網(wǎng)站,你幾乎可以運行任何網(wǎng)站鏈接,這些鏈接中的任何一個(gè)死鏈接都可以輕松導致蜘蛛爬出來(lái)。更多的時(shí)候,百度自然會(huì )來(lái)你的網(wǎng)站沒(méi)有好感。
7、外部網(wǎng)站 鏈接。要成為蜘蛛爬蟲(chóng),頁(yè)面必須有一個(gè)傳入鏈接,否則蜘蛛沒(méi)有機會(huì )知道該頁(yè)面的存在。
8、監控蜘蛛爬行??梢允褂镁W(wǎng)絡(luò )日志蜘蛛知道哪些頁(yè)面被爬取,可以使用SEO工具查看蜘蛛頻率,合理分配資源,實(shí)現更高的速度和更多的蜘蛛爬取。
提高網(wǎng)站的收錄的排名是通過(guò)網(wǎng)站優(yōu)化SEO,可以參考SEO的優(yōu)化方法。簡(jiǎn)單來(lái)說(shuō),可以從以下幾個(gè)方面進(jìn)行改進(jìn):
1、改進(jìn)網(wǎng)站結構的布局,使其結構合理清晰;
2、保證網(wǎng)頁(yè)內容的原創(chuàng )質(zhì)量并定期更新;
3、增加網(wǎng)頁(yè)的反向鏈接,網(wǎng)站在搜索引擎中排名不錯的做友情鏈接;
4、優(yōu)化URL鏈接,可以在URL中適當添加一些關(guān)鍵詞,使用中文拼音;
5、始終將用戶(hù)體驗放在首位。
通過(guò)以上信息,我們了解了網(wǎng)站內容更新的重要性。網(wǎng)站 更新頻率越快,蜘蛛爬行的頻率就越高。數量會(huì )減少,減少網(wǎng)站的權重。由于個(gè)人精力有限原創(chuàng ),難以保證大量長(cháng)期更新。如果邀請編輯,投入產(chǎn)出比可能為負。但是只要方法得當,采集的效果并不比原創(chuàng )差多少,甚至比那些沒(méi)有掌握方法的原創(chuàng )好很多。
如何選擇好的文章采集器?
1.直接訪(fǎng)問(wèn)大量關(guān)鍵詞,這些關(guān)鍵詞都是百度統計的網(wǎng)民需求詞(有百度索引),或者這些的長(cháng)尾詞詞,從百度下拉框或相關(guān)搜索。
2.直接按關(guān)鍵詞采集智能分析網(wǎng)頁(yè)正文進(jìn)行爬取,無(wú)需編寫(xiě)采集規則。
3. 捕獲的文本已經(jīng)用標準化的標簽進(jìn)行了清理,所有段落都以
4. 標簽顯示,亂碼會(huì )被移除。
5. 根據采集收到的內容,自動(dòng)匹配圖片,圖片必須與內容相關(guān)度很高。以這種方式替換 偽原創(chuàng ) 不會(huì )影響可讀性,但也允許 文章 比 原創(chuàng ) 提供的信息更豐富。
6.整合百度站長(cháng)平臺,積極推送提速收錄。
7.可以直接使用關(guān)鍵詞及其相關(guān)詞作為標題,或者抓取登陸頁(yè)面的標題
如果我們處理好文章采集的內容,采集站點(diǎn)也可以很快收錄。由于本文章采集器永久免費并得到廣大站長(cháng)朋友的支持,是SEO圈子里的良心軟件,為眾多站長(cháng)朋友帶來(lái)了實(shí)實(shí)在在的流量和經(jīng)濟效益。的收益。
查看全部
文章實(shí)時(shí)采集(如何利用文章采集器讓蜘蛛瘋狂收錄排名?(圖)
)
如何使用文章采集器讓蜘蛛瘋狂收錄等級?每個(gè)搜索引擎都有自己的蜘蛛程序。蜘蛛程序通過(guò)網(wǎng)頁(yè)的鏈接地址搜索該網(wǎng)頁(yè),直到爬取到這個(gè)網(wǎng)站的所有網(wǎng)頁(yè),然后通過(guò)搜索引擎算法對網(wǎng)站進(jìn)行評價(jià),得到評價(jià)。如果把互聯(lián)網(wǎng)比作蜘蛛網(wǎng),那么蜘蛛程序對每張網(wǎng)站圖像的爬行活動(dòng)就稱(chēng)為蜘蛛爬行。
如何吸引蜘蛛爬取頁(yè)面
1、一個(gè) 網(wǎng)站 和頁(yè)面權重。算是質(zhì)量上乘,老的網(wǎng)站的權重比較高。這個(gè)網(wǎng)站的網(wǎng)絡(luò )爬取深度會(huì )比較高,也收錄很多。
2、網(wǎng)站 的更新頻率。蜘蛛抓取的每個(gè)頁(yè)面的數據存儲。如果爬蟲(chóng)第二次發(fā)現第一個(gè)收錄完全相同的頁(yè)面,則該頁(yè)面不會(huì )更新,并且蜘蛛不需要經(jīng)常捕獲它。網(wǎng)站的頁(yè)面內容更新頻繁,蜘蛛會(huì )更頻繁地訪(fǎng)問(wèn)該頁(yè)面,頁(yè)面上會(huì )出現一個(gè)新的鏈接,這將更快地跟蹤和抓取蜘蛛。
3、網(wǎng)站 的原創(chuàng ) 內容。百度蜘蛛的誘惑很大原創(chuàng )內容,原創(chuàng )內容的主食,搜索引擎蜘蛛每天都需要。
4、網(wǎng)站的整體結構。包括:頁(yè)面更新?tīng)顟B(tài)、標題、關(guān)鍵詞、標題、關(guān)鍵詞、meta中嵌入的描述標簽、導航欄等。
5、建筑工地地圖。網(wǎng)站地圖就像一個(gè)燈塔,唯一一個(gè)清晰的燈塔可以指引蜘蛛的下落。引誘更多蜘蛛的便捷方式。
6、內部鏈接優(yōu)化。蜘蛛來(lái)到你的網(wǎng)站,自然是通過(guò)你的網(wǎng)站的結構,通過(guò)你的網(wǎng)站,你幾乎可以運行任何網(wǎng)站鏈接,這些鏈接中的任何一個(gè)死鏈接都可以輕松導致蜘蛛爬出來(lái)。更多的時(shí)候,百度自然會(huì )來(lái)你的網(wǎng)站沒(méi)有好感。
7、外部網(wǎng)站 鏈接。要成為蜘蛛爬蟲(chóng),頁(yè)面必須有一個(gè)傳入鏈接,否則蜘蛛沒(méi)有機會(huì )知道該頁(yè)面的存在。
8、監控蜘蛛爬行??梢允褂镁W(wǎng)絡(luò )日志蜘蛛知道哪些頁(yè)面被爬取,可以使用SEO工具查看蜘蛛頻率,合理分配資源,實(shí)現更高的速度和更多的蜘蛛爬取。
提高網(wǎng)站的收錄的排名是通過(guò)網(wǎng)站優(yōu)化SEO,可以參考SEO的優(yōu)化方法。簡(jiǎn)單來(lái)說(shuō),可以從以下幾個(gè)方面進(jìn)行改進(jìn):
1、改進(jìn)網(wǎng)站結構的布局,使其結構合理清晰;
2、保證網(wǎng)頁(yè)內容的原創(chuàng )質(zhì)量并定期更新;
3、增加網(wǎng)頁(yè)的反向鏈接,網(wǎng)站在搜索引擎中排名不錯的做友情鏈接;
4、優(yōu)化URL鏈接,可以在URL中適當添加一些關(guān)鍵詞,使用中文拼音;
5、始終將用戶(hù)體驗放在首位。
通過(guò)以上信息,我們了解了網(wǎng)站內容更新的重要性。網(wǎng)站 更新頻率越快,蜘蛛爬行的頻率就越高。數量會(huì )減少,減少網(wǎng)站的權重。由于個(gè)人精力有限原創(chuàng ),難以保證大量長(cháng)期更新。如果邀請編輯,投入產(chǎn)出比可能為負。但是只要方法得當,采集的效果并不比原創(chuàng )差多少,甚至比那些沒(méi)有掌握方法的原創(chuàng )好很多。
如何選擇好的文章采集器?
1.直接訪(fǎng)問(wèn)大量關(guān)鍵詞,這些關(guān)鍵詞都是百度統計的網(wǎng)民需求詞(有百度索引),或者這些的長(cháng)尾詞詞,從百度下拉框或相關(guān)搜索。
2.直接按關(guān)鍵詞采集智能分析網(wǎng)頁(yè)正文進(jìn)行爬取,無(wú)需編寫(xiě)采集規則。
3. 捕獲的文本已經(jīng)用標準化的標簽進(jìn)行了清理,所有段落都以
4. 標簽顯示,亂碼會(huì )被移除。
5. 根據采集收到的內容,自動(dòng)匹配圖片,圖片必須與內容相關(guān)度很高。以這種方式替換 偽原創(chuàng ) 不會(huì )影響可讀性,但也允許 文章 比 原創(chuàng ) 提供的信息更豐富。
6.整合百度站長(cháng)平臺,積極推送提速收錄。
7.可以直接使用關(guān)鍵詞及其相關(guān)詞作為標題,或者抓取登陸頁(yè)面的標題
如果我們處理好文章采集的內容,采集站點(diǎn)也可以很快收錄。由于本文章采集器永久免費并得到廣大站長(cháng)朋友的支持,是SEO圈子里的良心軟件,為眾多站長(cháng)朋友帶來(lái)了實(shí)實(shí)在在的流量和經(jīng)濟效益。的收益。
文章實(shí)時(shí)采集(用c語(yǔ)言抓數據包,提取數據但是好捉迷藏一樣)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 186 次瀏覽 ? 2022-01-01 05:02
文章實(shí)時(shí)采集。首先的首先,我們得有能收集到我們需要的數據的設備。我只推薦一款,yogac5-a10其實(shí)還可以考慮macbookair或者windows的thinkpads系列,小巧輕薄。觸摸手感優(yōu)秀的觸摸屏就是神器。接著(zhù)說(shuō),我們就要把自己需要采集的數據編碼到數據庫里。我們用udp方式采集就行了。最后對文本數據處理。說(shuō)起來(lái)簡(jiǎn)單,實(shí)踐起來(lái)很難。需要用到的工具,應該是zepth自帶的那個(gè)snake。
我會(huì )做,
用c語(yǔ)言寫(xiě)一個(gè)小程序在固定幾個(gè)時(shí)刻分別發(fā)送幾百億幀過(guò)去,看看能不能抓到別人的數據就得了。
如果不考慮硬件的話(huà),就需要懂點(diǎn)編程了。抓取數據主要是做udp的處理。如果你懂點(diǎn)編程就可以用最基本的方法,用base64編碼。在udp網(wǎng)絡(luò )中保存數據需要主動(dòng)發(fā)起一次握手,即發(fā)送一個(gè)名字過(guò)去給服務(wù)器,服務(wù)器發(fā)送對應的名字過(guò)去給你。
要抓包才能看到吧
上,搜索一下c51,多數機器都有賣(mài),價(jià)格很便宜,
nas,現在都是無(wú)盤(pán)的了,帶密碼的文件傳輸不了。抓包,好捉迷藏,懸疑的節目就是用到這個(gè)功能。
用c語(yǔ)言抓數據包,然后反過(guò)來(lái)就知道名字了。tcp協(xié)議可以讀寫(xiě)文件,提取數據但是好捉迷藏一樣的。
我覺(jué)得qpython很好用, 查看全部
文章實(shí)時(shí)采集(用c語(yǔ)言抓數據包,提取數據但是好捉迷藏一樣)
文章實(shí)時(shí)采集。首先的首先,我們得有能收集到我們需要的數據的設備。我只推薦一款,yogac5-a10其實(shí)還可以考慮macbookair或者windows的thinkpads系列,小巧輕薄。觸摸手感優(yōu)秀的觸摸屏就是神器。接著(zhù)說(shuō),我們就要把自己需要采集的數據編碼到數據庫里。我們用udp方式采集就行了。最后對文本數據處理。說(shuō)起來(lái)簡(jiǎn)單,實(shí)踐起來(lái)很難。需要用到的工具,應該是zepth自帶的那個(gè)snake。
我會(huì )做,
用c語(yǔ)言寫(xiě)一個(gè)小程序在固定幾個(gè)時(shí)刻分別發(fā)送幾百億幀過(guò)去,看看能不能抓到別人的數據就得了。
如果不考慮硬件的話(huà),就需要懂點(diǎn)編程了。抓取數據主要是做udp的處理。如果你懂點(diǎn)編程就可以用最基本的方法,用base64編碼。在udp網(wǎng)絡(luò )中保存數據需要主動(dòng)發(fā)起一次握手,即發(fā)送一個(gè)名字過(guò)去給服務(wù)器,服務(wù)器發(fā)送對應的名字過(guò)去給你。
要抓包才能看到吧
上,搜索一下c51,多數機器都有賣(mài),價(jià)格很便宜,
nas,現在都是無(wú)盤(pán)的了,帶密碼的文件傳輸不了。抓包,好捉迷藏,懸疑的節目就是用到這個(gè)功能。
用c語(yǔ)言抓數據包,然后反過(guò)來(lái)就知道名字了。tcp協(xié)議可以讀寫(xiě)文件,提取數據但是好捉迷藏一樣的。
我覺(jué)得qpython很好用,
文章實(shí)時(shí)采集(Tapdata重點(diǎn)闡述Tapdata在數據庫實(shí)時(shí)同步方面的技術(shù)要點(diǎn)(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 145 次瀏覽 ? 2021-12-30 04:07
Tapdata是深圳市鈦數據有限公司開(kāi)發(fā)的實(shí)時(shí)數據處理與服務(wù)平臺產(chǎn)品,企業(yè)可以使用Tapdata快速搭建數據中心和實(shí)時(shí)數據倉庫。Tapdata提供一站式解決方案,包括實(shí)時(shí)數據采集、數據融合和數據發(fā)布等功能和能力。
Tapdata 專(zhuān)注于實(shí)時(shí)數據處理技術(shù)。在數據庫遷移和同步方面,Tapdata的性能非常好,實(shí)時(shí)性、多樣性、異構性,尤其是關(guān)系型數據庫和非關(guān)系型數據庫的雙向同步,無(wú)論是操作上,效率上,均體現了行業(yè)領(lǐng)先水平。
本文重點(diǎn)介紹Tapdata在實(shí)時(shí)數據庫同步方面的技術(shù)要點(diǎn)。
基于數據庫日志的實(shí)時(shí)遷移或同步
在數據庫同步場(chǎng)景下,Tapdata支持批量和增量數據遷移同步。Tapdata專(zhuān)注于實(shí)時(shí)場(chǎng)景,是數據庫增量同步的關(guān)鍵能力。目前Tapdata支持的數據源基本支持增量同步。大多數場(chǎng)景下,Tapdata通過(guò)解析數據庫日志獲取源數據庫的增刪改查操作,然后將這些操作轉化為標準的數據庫事件推送到內部處理隊列中。
數據同步流程 那么,Tapdata是如何進(jìn)行數據同步的呢?
第一層數據同步是基于CDC機制的,也就是說(shuō)它不使用Select語(yǔ)句定期掃描最近有什么類(lèi)型的數據,或者全量取,而是基于數據庫,比如對于Oracle,就是Redo log。對于 SQL Server,就是它的 CDC 機制。MongoDB 有它的 Oplog,而 MySQL 使用它的 Binlog。為了監控這些日志日志,Tapdata 中的每一條數據都有一個(gè)日志解析器。取出后,當監聽(tīng)到變化時(shí),會(huì )轉換成update語(yǔ)句或者insret語(yǔ)句或者delete語(yǔ)句。在目標庫中,Tapdata 還創(chuàng )建了 FDM,即基礎層和主數據層。把它寫(xiě)入目標庫,然后這樣,就相當于在目標平臺上建立了一個(gè)邏輯鏡像,可以與源庫保持高度同步。這種CDC事件的延遲一般在幾百毫秒,往往在1到2秒內,我們就可以將數據同步到目標平臺,所以同步延遲很短,亞秒級的概率很高。
下面是每個(gè)數據庫采集
增量數據的方式
啟動(dòng)同步任務(wù)時(shí),用戶(hù)可以使用以下模式之一:
基于流水線(xiàn)的流數據處理模式
Tapdata 底層使用基于 Hazelcast Jet 的 DAG 流處理引擎。引擎支持基于DAG(有向無(wú)環(huán)圖)的任務(wù)鏈流計算能力。用戶(hù)可以通過(guò)Pipeline API構建任務(wù)鏈處理流程,包括數據源讀取、數據處理、過(guò)濾、聚合,最后輸出到目標sink。管道將被系統轉換為Core DAG,并在流數據處理引擎中執行。如下所示:
這些 DAG 中的計算節點(diǎn)都是基于記錄(原創(chuàng )
流)而不是基于批處理的。每次有新記錄(在源端產(chǎn)生R1)),都會(huì )立即被數據庫采集
節點(diǎn)處理,然后交給DAG的下一個(gè)節點(diǎn)。通過(guò)結合JSDK,用戶(hù)可以根據DAG的規則構建一個(gè)非常復雜的數據庫處理環(huán)節,交給系統的流數據引擎完成數據處理。
流處理引擎的計算框架采用協(xié)程機制。與傳統線(xiàn)程不同,DFS 不會(huì )為每個(gè)數據處理任務(wù)啟動(dòng)一個(gè)單獨的線(xiàn)程(線(xiàn)程資源有限),而是使用類(lèi)似于 Coroutines 的方法。處理任務(wù)的執行由Java端啟動(dòng)和停止。要做。底層線(xiàn)程會(huì )繼續執行,不斷將控制權交給框架管理程序,協(xié)調不同任務(wù)之間的計算工作。由于避免了昂貴的線(xiàn)程上下文切換,協(xié)程在很多情況下可以顯著(zhù)提高處理速度。
Tapdata 流數據處理引擎支持以下 Transformation 能力(算子):
在實(shí)時(shí)流數據統計方面,tapdata可以支持以下與時(shí)間窗口相關(guān)的功能:
NoSQL 支持
大多數常見(jiàn)的 ETL 工具都是針對關(guān)系型數據庫的,例如 Oracle 和 MySQL。Tapdata在提供關(guān)系型數據庫支持的基礎上,還提供了完整的NoSQL支持,如MongoDB、Elastic Search、Redis等。目前企業(yè)的數據同步需求很大一部分是從關(guān)系型數據庫的實(shí)時(shí)同步到分布式NoSQL,用于解決關(guān)系型數據庫的查詢(xún)性能瓶頸和業(yè)務(wù)創(chuàng )新。
Tapdata 的研發(fā)團隊在處理 NoSQL 方面有著(zhù)天然的優(yōu)勢,這與團隊成員大部分來(lái)自 MongoDB 原廠(chǎng)和社區代碼貢獻者有關(guān)。
NoSQL數據庫的特點(diǎn)是文檔結構往往基于JSON,一個(gè)文檔收錄
一對多和多對一的關(guān)系。同步時(shí),需要從多個(gè)表按照對應關(guān)系寫(xiě)入目標JSON,并且還需要在源表子表更新時(shí)同步目標JSON子文檔的更新,如下圖數字。
Tapdata 支持以下高級 JSON 同步功能:
數據驗證、增量驗證
數據驗證是任何數據同步或遷移工具的必要功能。完善的驗證能力可以讓用戶(hù)有足夠的信心使用數據同步工具。
Tapdata 的驗證數據類(lèi)型包括:
Tapdata驗證通過(guò)Merge Sort實(shí)現,可以快速完成大數據表的遷移和同步驗證。測試表明,對于5000萬(wàn)行的表,只需不到2分鐘即可完成一次完整的校準。驗證結果的分析包括一致率、錯誤數據比較等。
此外,Tapdata 支持獨創(chuàng )的增量驗證功能。用戶(hù)為指定的數據同步任務(wù)啟動(dòng)增量驗證功能后,Tapdata會(huì )將需要驗證的表的CDC事件分別記錄到緩沖區中,并啟動(dòng)后臺線(xiàn)程,根據用戶(hù)指定的驗證策略,緩沖區 新添加的用于分析的 CDC 事件。解析時(shí)會(huì )根據源表的DDL得到主鍵信息,然后查詢(xún)目標表和源表的數據進(jìn)行比較。
容錯機制
Tapdata 提供了部署的高可用機制和數據寫(xiě)入的冪等操作,以確保任務(wù)可以繼續運行,數據在錯誤狀態(tài)下可以最終保持一致。
每個(gè)數據處理任務(wù)在運行時(shí),會(huì )頻繁地向管理終端報告健康狀態(tài)(每5秒一次)。如果管理端在一分鐘內沒(méi)有收到報告,則認為處理節點(diǎn)離線(xiàn)。這時(shí)候,另一個(gè)幸存的節點(diǎn)會(huì )在沒(méi)有心跳的情況下檢查這個(gè)任務(wù)并接管它。
每個(gè)數據處理任務(wù)在運行時(shí)都會(huì )頻繁記錄當前的處理流程位置。當任務(wù)重新啟動(dòng)時(shí),它會(huì )自動(dòng)從該位置重新啟動(dòng)。
為了實(shí)現上述容錯機制,Tapdata要求源端和目標端滿(mǎn)足以下條件:
帶性能參數
Tapdata是企業(yè)級商業(yè)產(chǎn)品。實(shí)時(shí)數據同步和遷移只是部分功能。如果您想了解更多關(guān)于產(chǎn)品的信息,您可以訪(fǎng)問(wèn)官方網(wǎng)站并提交測試應用程序以獲得運行演示。
官網(wǎng)地址:
此外,Tapdata還推出了異構數據實(shí)時(shí)同步的云服務(wù)。登錄云服務(wù)平臺僅需簡(jiǎn)單三步,即可實(shí)現數據實(shí)時(shí)同步。更令人興奮的是,這個(gè)功能是免費使用的。 查看全部
文章實(shí)時(shí)采集(Tapdata重點(diǎn)闡述Tapdata在數據庫實(shí)時(shí)同步方面的技術(shù)要點(diǎn)(組圖))
Tapdata是深圳市鈦數據有限公司開(kāi)發(fā)的實(shí)時(shí)數據處理與服務(wù)平臺產(chǎn)品,企業(yè)可以使用Tapdata快速搭建數據中心和實(shí)時(shí)數據倉庫。Tapdata提供一站式解決方案,包括實(shí)時(shí)數據采集、數據融合和數據發(fā)布等功能和能力。
Tapdata 專(zhuān)注于實(shí)時(shí)數據處理技術(shù)。在數據庫遷移和同步方面,Tapdata的性能非常好,實(shí)時(shí)性、多樣性、異構性,尤其是關(guān)系型數據庫和非關(guān)系型數據庫的雙向同步,無(wú)論是操作上,效率上,均體現了行業(yè)領(lǐng)先水平。
本文重點(diǎn)介紹Tapdata在實(shí)時(shí)數據庫同步方面的技術(shù)要點(diǎn)。
基于數據庫日志的實(shí)時(shí)遷移或同步
在數據庫同步場(chǎng)景下,Tapdata支持批量和增量數據遷移同步。Tapdata專(zhuān)注于實(shí)時(shí)場(chǎng)景,是數據庫增量同步的關(guān)鍵能力。目前Tapdata支持的數據源基本支持增量同步。大多數場(chǎng)景下,Tapdata通過(guò)解析數據庫日志獲取源數據庫的增刪改查操作,然后將這些操作轉化為標準的數據庫事件推送到內部處理隊列中。

數據同步流程 那么,Tapdata是如何進(jìn)行數據同步的呢?
第一層數據同步是基于CDC機制的,也就是說(shuō)它不使用Select語(yǔ)句定期掃描最近有什么類(lèi)型的數據,或者全量取,而是基于數據庫,比如對于Oracle,就是Redo log。對于 SQL Server,就是它的 CDC 機制。MongoDB 有它的 Oplog,而 MySQL 使用它的 Binlog。為了監控這些日志日志,Tapdata 中的每一條數據都有一個(gè)日志解析器。取出后,當監聽(tīng)到變化時(shí),會(huì )轉換成update語(yǔ)句或者insret語(yǔ)句或者delete語(yǔ)句。在目標庫中,Tapdata 還創(chuàng )建了 FDM,即基礎層和主數據層。把它寫(xiě)入目標庫,然后這樣,就相當于在目標平臺上建立了一個(gè)邏輯鏡像,可以與源庫保持高度同步。這種CDC事件的延遲一般在幾百毫秒,往往在1到2秒內,我們就可以將數據同步到目標平臺,所以同步延遲很短,亞秒級的概率很高。
下面是每個(gè)數據庫采集
增量數據的方式
啟動(dòng)同步任務(wù)時(shí),用戶(hù)可以使用以下模式之一:
基于流水線(xiàn)的流數據處理模式
Tapdata 底層使用基于 Hazelcast Jet 的 DAG 流處理引擎。引擎支持基于DAG(有向無(wú)環(huán)圖)的任務(wù)鏈流計算能力。用戶(hù)可以通過(guò)Pipeline API構建任務(wù)鏈處理流程,包括數據源讀取、數據處理、過(guò)濾、聚合,最后輸出到目標sink。管道將被系統轉換為Core DAG,并在流數據處理引擎中執行。如下所示:

這些 DAG 中的計算節點(diǎn)都是基于記錄(原創(chuàng )
流)而不是基于批處理的。每次有新記錄(在源端產(chǎn)生R1)),都會(huì )立即被數據庫采集
節點(diǎn)處理,然后交給DAG的下一個(gè)節點(diǎn)。通過(guò)結合JSDK,用戶(hù)可以根據DAG的規則構建一個(gè)非常復雜的數據庫處理環(huán)節,交給系統的流數據引擎完成數據處理。
流處理引擎的計算框架采用協(xié)程機制。與傳統線(xiàn)程不同,DFS 不會(huì )為每個(gè)數據處理任務(wù)啟動(dòng)一個(gè)單獨的線(xiàn)程(線(xiàn)程資源有限),而是使用類(lèi)似于 Coroutines 的方法。處理任務(wù)的執行由Java端啟動(dòng)和停止。要做。底層線(xiàn)程會(huì )繼續執行,不斷將控制權交給框架管理程序,協(xié)調不同任務(wù)之間的計算工作。由于避免了昂貴的線(xiàn)程上下文切換,協(xié)程在很多情況下可以顯著(zhù)提高處理速度。
Tapdata 流數據處理引擎支持以下 Transformation 能力(算子):
在實(shí)時(shí)流數據統計方面,tapdata可以支持以下與時(shí)間窗口相關(guān)的功能:
NoSQL 支持
大多數常見(jiàn)的 ETL 工具都是針對關(guān)系型數據庫的,例如 Oracle 和 MySQL。Tapdata在提供關(guān)系型數據庫支持的基礎上,還提供了完整的NoSQL支持,如MongoDB、Elastic Search、Redis等。目前企業(yè)的數據同步需求很大一部分是從關(guān)系型數據庫的實(shí)時(shí)同步到分布式NoSQL,用于解決關(guān)系型數據庫的查詢(xún)性能瓶頸和業(yè)務(wù)創(chuàng )新。
Tapdata 的研發(fā)團隊在處理 NoSQL 方面有著(zhù)天然的優(yōu)勢,這與團隊成員大部分來(lái)自 MongoDB 原廠(chǎng)和社區代碼貢獻者有關(guān)。
NoSQL數據庫的特點(diǎn)是文檔結構往往基于JSON,一個(gè)文檔收錄
一對多和多對一的關(guān)系。同步時(shí),需要從多個(gè)表按照對應關(guān)系寫(xiě)入目標JSON,并且還需要在源表子表更新時(shí)同步目標JSON子文檔的更新,如下圖數字。

Tapdata 支持以下高級 JSON 同步功能:
數據驗證、增量驗證
數據驗證是任何數據同步或遷移工具的必要功能。完善的驗證能力可以讓用戶(hù)有足夠的信心使用數據同步工具。
Tapdata 的驗證數據類(lèi)型包括:
Tapdata驗證通過(guò)Merge Sort實(shí)現,可以快速完成大數據表的遷移和同步驗證。測試表明,對于5000萬(wàn)行的表,只需不到2分鐘即可完成一次完整的校準。驗證結果的分析包括一致率、錯誤數據比較等。

此外,Tapdata 支持獨創(chuàng )的增量驗證功能。用戶(hù)為指定的數據同步任務(wù)啟動(dòng)增量驗證功能后,Tapdata會(huì )將需要驗證的表的CDC事件分別記錄到緩沖區中,并啟動(dòng)后臺線(xiàn)程,根據用戶(hù)指定的驗證策略,緩沖區 新添加的用于分析的 CDC 事件。解析時(shí)會(huì )根據源表的DDL得到主鍵信息,然后查詢(xún)目標表和源表的數據進(jìn)行比較。
容錯機制
Tapdata 提供了部署的高可用機制和數據寫(xiě)入的冪等操作,以確保任務(wù)可以繼續運行,數據在錯誤狀態(tài)下可以最終保持一致。
每個(gè)數據處理任務(wù)在運行時(shí),會(huì )頻繁地向管理終端報告健康狀態(tài)(每5秒一次)。如果管理端在一分鐘內沒(méi)有收到報告,則認為處理節點(diǎn)離線(xiàn)。這時(shí)候,另一個(gè)幸存的節點(diǎn)會(huì )在沒(méi)有心跳的情況下檢查這個(gè)任務(wù)并接管它。
每個(gè)數據處理任務(wù)在運行時(shí)都會(huì )頻繁記錄當前的處理流程位置。當任務(wù)重新啟動(dòng)時(shí),它會(huì )自動(dòng)從該位置重新啟動(dòng)。
為了實(shí)現上述容錯機制,Tapdata要求源端和目標端滿(mǎn)足以下條件:
帶性能參數

Tapdata是企業(yè)級商業(yè)產(chǎn)品。實(shí)時(shí)數據同步和遷移只是部分功能。如果您想了解更多關(guān)于產(chǎn)品的信息,您可以訪(fǎng)問(wèn)官方網(wǎng)站并提交測試應用程序以獲得運行演示。
官網(wǎng)地址:
此外,Tapdata還推出了異構數據實(shí)時(shí)同步的云服務(wù)。登錄云服務(wù)平臺僅需簡(jiǎn)單三步,即可實(shí)現數據實(shí)時(shí)同步。更令人興奮的是,這個(gè)功能是免費使用的。
文章實(shí)時(shí)采集(如何下載公眾號文章的方法,再也不用擔心找不到)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 179 次瀏覽 ? 2021-12-25 08:18
微信公眾號里有很多文章,很正面??赐炅?,讓人覺(jué)得舒服,但是好的文章太多了,每一篇文章都津津有味的看完,有時(shí)候想下載下來(lái)以后記住。, 那么公眾號文章怎么下載呢?
微信公眾號可以算是一個(gè)非常非常大的素材庫。但是,微信在管理上非常嚴格。和之前的Misty一樣,有些文章寫(xiě)的還不錯,但是突然就看不到了。
但是直接下載肯定不行。你可以把所有的東西復制粘貼到你自己公眾號的后臺,然后再編輯。如果是對方,原創(chuàng )還沒(méi)有發(fā)布,需要稍微處理一下。
所以把公眾號的文章導出成word或pdf格式保存在電腦上,隨時(shí)隨地,想看就看。
對于導出文章,可以在瀏覽器中打開(kāi)鏈接,然后按Ctrl+P,可以看到另存為pdf,可以保持原格式,導入效果還是不錯的,但是需要一個(gè)一個(gè)的導出,稍微有點(diǎn)麻煩,如果能批量導出就更好了
讓我與您分享我正在使用的導出小工具。微信公眾號文章搜索下載拖圖數據??梢酝ㄟ^(guò)關(guān)鍵詞搜索公眾號平臺上的所有文章,也可以采集發(fā)送一個(gè)公眾號文章中的所有歷史記錄,然后導出批量轉word、pdf、html等格式,非常好用。
“拓圖數據”是公眾號運營(yíng)的工具。主要提供優(yōu)質(zhì)公眾號查詢(xún)功能和公眾號相關(guān)報表下載功能。它還可以讓您快速判斷公眾號的好壞。目前越來(lái)越多的人開(kāi)始青睞公眾號的推廣,但是如何找到一個(gè)合適的公眾號進(jìn)行推廣就成了一個(gè)難題?!巴貓D數據”旨在為關(guān)注新媒體領(lǐng)域的機構、個(gè)人和研究機構提供從數據到價(jià)值的服務(wù)。服務(wù)支持。
以上就是小編為大家總結的公眾號文章的下載方法。再也不用擔心找不到好的文章。你學(xué)會(huì )如何閱讀了嗎? 查看全部
文章實(shí)時(shí)采集(如何下載公眾號文章的方法,再也不用擔心找不到)
微信公眾號里有很多文章,很正面??赐炅?,讓人覺(jué)得舒服,但是好的文章太多了,每一篇文章都津津有味的看完,有時(shí)候想下載下來(lái)以后記住。, 那么公眾號文章怎么下載呢?
微信公眾號可以算是一個(gè)非常非常大的素材庫。但是,微信在管理上非常嚴格。和之前的Misty一樣,有些文章寫(xiě)的還不錯,但是突然就看不到了。
但是直接下載肯定不行。你可以把所有的東西復制粘貼到你自己公眾號的后臺,然后再編輯。如果是對方,原創(chuàng )還沒(méi)有發(fā)布,需要稍微處理一下。
所以把公眾號的文章導出成word或pdf格式保存在電腦上,隨時(shí)隨地,想看就看。
對于導出文章,可以在瀏覽器中打開(kāi)鏈接,然后按Ctrl+P,可以看到另存為pdf,可以保持原格式,導入效果還是不錯的,但是需要一個(gè)一個(gè)的導出,稍微有點(diǎn)麻煩,如果能批量導出就更好了
讓我與您分享我正在使用的導出小工具。微信公眾號文章搜索下載拖圖數據??梢酝ㄟ^(guò)關(guān)鍵詞搜索公眾號平臺上的所有文章,也可以采集發(fā)送一個(gè)公眾號文章中的所有歷史記錄,然后導出批量轉word、pdf、html等格式,非常好用。
“拓圖數據”是公眾號運營(yíng)的工具。主要提供優(yōu)質(zhì)公眾號查詢(xún)功能和公眾號相關(guān)報表下載功能。它還可以讓您快速判斷公眾號的好壞。目前越來(lái)越多的人開(kāi)始青睞公眾號的推廣,但是如何找到一個(gè)合適的公眾號進(jìn)行推廣就成了一個(gè)難題?!巴貓D數據”旨在為關(guān)注新媒體領(lǐng)域的機構、個(gè)人和研究機構提供從數據到價(jià)值的服務(wù)。服務(wù)支持。

以上就是小編為大家總結的公眾號文章的下載方法。再也不用擔心找不到好的文章。你學(xué)會(huì )如何閱讀了嗎?
文章實(shí)時(shí)采集(易撰自媒體采集平臺官網(wǎng)版顛覆傳統模式,高配置數據服務(wù)器)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 370 次瀏覽 ? 2021-12-20 22:17
易寫(xiě)自媒體采集平臺官網(wǎng)版下載,非常優(yōu)質(zhì)的自媒體新聞資訊賺錢(qián)平臺。這里采集開(kāi)手、美拍、妙拍、土豆、火山視頻等短視頻,實(shí)時(shí)捕捉全網(wǎng)熱點(diǎn)和熱詞,更新推送最新網(wǎng)絡(luò )熱搜文章和視頻資訊、看視頻、閱讀轉發(fā)文章即可兌換現金紅包,邊了解熱點(diǎn)邊賺零花錢(qián)!有興趣的朋友快來(lái)下載吧!
易傳自媒體采集平臺官網(wǎng)版介紹
易傳爆文系統是服務(wù)自媒體用戶(hù)的新媒體運營(yíng)助手。新手用戶(hù)可以使用本程序自動(dòng)推送文章給讀者,獲取更多閱讀訪(fǎng)問(wèn)數據!實(shí)時(shí)推送最新的網(wǎng)絡(luò )熱搜文章和視頻信息,也可以關(guān)注感興趣的自媒體作者。
易傳自媒體采集平臺官網(wǎng)版顛覆傳統模式,打造最實(shí)用的自媒體推廣應用!分鐘級實(shí)時(shí)監測各類(lèi)行業(yè)樣本網(wǎng)站數據和傳統媒體信息,生成最新熱點(diǎn)數據!您可以關(guān)注感興趣的作者。當以下作者有新的文章發(fā)布時(shí),智能提醒。
易傳自媒體采集平臺官網(wǎng)版本亮點(diǎn)
5年數據服務(wù):保證數據完整穩定
系統模塊化開(kāi)發(fā):按需配置,降低成本
擁有核心算法:成熟的算法技術(shù)改進(jìn)
完善的售后服務(wù):24小時(shí)
多重支持計劃:零代理費,零風(fēng)險
易傳自媒體采集平臺官網(wǎng)版本特點(diǎn)
分布式實(shí)時(shí)爬取
采用分布式爬蟲(chóng)架構,N+1組服務(wù)器,智能增加任務(wù)進(jìn)程,快速響應爬蟲(chóng)任務(wù)。請求實(shí)時(shí)響應,http代理毫秒級智能切換,24小時(shí)人工值守,確保數據正確分析,按照約定規則存儲,數據真實(shí)、有效、實(shí)時(shí)。
大數據存儲優(yōu)化
分布式數據庫,高配置數據服務(wù)器。高并發(fā)數據查詢(xún)優(yōu)化、索引優(yōu)化等大數據優(yōu)化,滿(mǎn)足用戶(hù)良好體驗。多數據、大容量服務(wù)器,保證數據安全,多備份,快速計算。
數據分析和存儲
根據規則抓取數據,根據數據樣本的需要對數據進(jìn)行清洗,根據不同的數據進(jìn)行聚類(lèi)、提示、打標簽等,然后存儲到數據庫中。根據不同應用場(chǎng)景對數據進(jìn)行二次篩選,確保數據真實(shí)有效。
易傳自媒體采集平臺官網(wǎng)版功能
1.爆文標題助理
該機器在分析大量爆文 標題后形成高級算法。用戶(hù)可以通過(guò)添加關(guān)鍵詞,自動(dòng)智能生成爆文標題。
2.文章,圖片風(fēng)險監控
7大指標項檢測,全面檢測標題和內容重復,檢測和提示文章內容中的非法詞、敏感、涉政、廣告等信息。
3.視頻庫
采集 快手、美拍、喵拍、土豆、火山視頻等短視頻平臺實(shí)時(shí)數據(鏈接、封面圖、播放量、發(fā)布時(shí)間、點(diǎn)贊數)。
4.實(shí)時(shí)新聞,全網(wǎng)熱點(diǎn)
采集國內外主流權威媒體新聞源,覆蓋30多個(gè)行業(yè),分鐘級監控,數據實(shí)時(shí)、海量、精準。
根據采集的海量數據,采用獨特的算法捕捉全網(wǎng)熱點(diǎn)和熱詞。
5. 一鍵發(fā)布,多平臺賬號管理
同時(shí)管理多個(gè)自媒體平臺賬號,一次編輯,同時(shí)發(fā)布到多個(gè)平臺,大大提高發(fā)布效率。
6.自媒體爆文
采集今日頭條、大魚(yú)、企鵝、百家等主流自媒體平臺實(shí)時(shí)數據,對具有爆文潛力的自媒體數據進(jìn)行分鐘級監控,保證數據準確性,實(shí)時(shí),實(shí)時(shí)發(fā)現爆文。
對《易傳》官網(wǎng)版自媒體采集的評論:
1、更專(zhuān)業(yè)的全能軟件,可以幫助自媒體平臺更好的編輯和操作!
2、 數據更精確、更廣泛,用于成熟的算法和穩定的安全數據。 查看全部
文章實(shí)時(shí)采集(易撰自媒體采集平臺官網(wǎng)版顛覆傳統模式,高配置數據服務(wù)器)
易寫(xiě)自媒體采集平臺官網(wǎng)版下載,非常優(yōu)質(zhì)的自媒體新聞資訊賺錢(qián)平臺。這里采集開(kāi)手、美拍、妙拍、土豆、火山視頻等短視頻,實(shí)時(shí)捕捉全網(wǎng)熱點(diǎn)和熱詞,更新推送最新網(wǎng)絡(luò )熱搜文章和視頻資訊、看視頻、閱讀轉發(fā)文章即可兌換現金紅包,邊了解熱點(diǎn)邊賺零花錢(qián)!有興趣的朋友快來(lái)下載吧!
易傳自媒體采集平臺官網(wǎng)版介紹
易傳爆文系統是服務(wù)自媒體用戶(hù)的新媒體運營(yíng)助手。新手用戶(hù)可以使用本程序自動(dòng)推送文章給讀者,獲取更多閱讀訪(fǎng)問(wèn)數據!實(shí)時(shí)推送最新的網(wǎng)絡(luò )熱搜文章和視頻信息,也可以關(guān)注感興趣的自媒體作者。
易傳自媒體采集平臺官網(wǎng)版顛覆傳統模式,打造最實(shí)用的自媒體推廣應用!分鐘級實(shí)時(shí)監測各類(lèi)行業(yè)樣本網(wǎng)站數據和傳統媒體信息,生成最新熱點(diǎn)數據!您可以關(guān)注感興趣的作者。當以下作者有新的文章發(fā)布時(shí),智能提醒。

易傳自媒體采集平臺官網(wǎng)版本亮點(diǎn)
5年數據服務(wù):保證數據完整穩定
系統模塊化開(kāi)發(fā):按需配置,降低成本
擁有核心算法:成熟的算法技術(shù)改進(jìn)
完善的售后服務(wù):24小時(shí)
多重支持計劃:零代理費,零風(fēng)險

易傳自媒體采集平臺官網(wǎng)版本特點(diǎn)
分布式實(shí)時(shí)爬取
采用分布式爬蟲(chóng)架構,N+1組服務(wù)器,智能增加任務(wù)進(jìn)程,快速響應爬蟲(chóng)任務(wù)。請求實(shí)時(shí)響應,http代理毫秒級智能切換,24小時(shí)人工值守,確保數據正確分析,按照約定規則存儲,數據真實(shí)、有效、實(shí)時(shí)。
大數據存儲優(yōu)化
分布式數據庫,高配置數據服務(wù)器。高并發(fā)數據查詢(xún)優(yōu)化、索引優(yōu)化等大數據優(yōu)化,滿(mǎn)足用戶(hù)良好體驗。多數據、大容量服務(wù)器,保證數據安全,多備份,快速計算。
數據分析和存儲
根據規則抓取數據,根據數據樣本的需要對數據進(jìn)行清洗,根據不同的數據進(jìn)行聚類(lèi)、提示、打標簽等,然后存儲到數據庫中。根據不同應用場(chǎng)景對數據進(jìn)行二次篩選,確保數據真實(shí)有效。
易傳自媒體采集平臺官網(wǎng)版功能
1.爆文標題助理
該機器在分析大量爆文 標題后形成高級算法。用戶(hù)可以通過(guò)添加關(guān)鍵詞,自動(dòng)智能生成爆文標題。
2.文章,圖片風(fēng)險監控
7大指標項檢測,全面檢測標題和內容重復,檢測和提示文章內容中的非法詞、敏感、涉政、廣告等信息。
3.視頻庫
采集 快手、美拍、喵拍、土豆、火山視頻等短視頻平臺實(shí)時(shí)數據(鏈接、封面圖、播放量、發(fā)布時(shí)間、點(diǎn)贊數)。
4.實(shí)時(shí)新聞,全網(wǎng)熱點(diǎn)
采集國內外主流權威媒體新聞源,覆蓋30多個(gè)行業(yè),分鐘級監控,數據實(shí)時(shí)、海量、精準。
根據采集的海量數據,采用獨特的算法捕捉全網(wǎng)熱點(diǎn)和熱詞。
5. 一鍵發(fā)布,多平臺賬號管理
同時(shí)管理多個(gè)自媒體平臺賬號,一次編輯,同時(shí)發(fā)布到多個(gè)平臺,大大提高發(fā)布效率。
6.自媒體爆文
采集今日頭條、大魚(yú)、企鵝、百家等主流自媒體平臺實(shí)時(shí)數據,對具有爆文潛力的自媒體數據進(jìn)行分鐘級監控,保證數據準確性,實(shí)時(shí),實(shí)時(shí)發(fā)現爆文。
對《易傳》官網(wǎng)版自媒體采集的評論:
1、更專(zhuān)業(yè)的全能軟件,可以幫助自媒體平臺更好的編輯和操作!
2、 數據更精確、更廣泛,用于成熟的算法和穩定的安全數據。
文章實(shí)時(shí)采集( 實(shí)時(shí)數據流的python產(chǎn)生器選型?選型選型?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 157 次瀏覽 ? 2021-12-18 20:19
實(shí)時(shí)數據流的python產(chǎn)生器選型?選型選型?)
Flume和Kafka完成實(shí)時(shí)數據采集
寫(xiě)在前面
Flume和Kafka一般在生產(chǎn)環(huán)境中結合使用??梢詫烧呓Y合使用來(lái)采集實(shí)時(shí)日志信息,這一點(diǎn)非常重要。如果你不知道flume和kafka,可以先查一下我寫(xiě)的關(guān)于這兩部分的知識。再學(xué)習一下,這部分操作也是可以的。
采集 的實(shí)時(shí)數據面臨一個(gè)問(wèn)題。我們如何生成我們的實(shí)時(shí)數據源?因為我們可能想直接獲取實(shí)時(shí)數據流不是那么方便。在文章之前寫(xiě)過(guò)一篇關(guān)于實(shí)時(shí)數據流的python生成器的文章,文章地址:
大家可以先看看,如何生成實(shí)時(shí)數據...
主意?? 如何開(kāi)始??
分析:我們可以從數據的流向開(kāi)始。數據一開(kāi)始就在網(wǎng)絡(luò )服務(wù)器上。我們的訪(fǎng)問(wèn)日志是nginx服務(wù)器實(shí)時(shí)采集到指定文件的。我們從這個(gè)文件中采集日志數據,即:webserver=>flume=>kafka
網(wǎng)絡(luò )服務(wù)器日志存儲文件位置
這個(gè)文件的位置一般是我們自己設置的
我們的網(wǎng)絡(luò )日志存儲的目錄是:
/home/hadoop/data/project/logs/access.log
[hadoop@hadoop000 logs]$ pwd
/home/hadoop/data/project/logs
[hadoop@hadoop000 logs]$ ls
access.log
[hadoop@hadoop000 logs]$
水槽
做flume其實(shí)就是寫(xiě)一個(gè)conf文件,所以面臨選擇的問(wèn)題
來(lái)源選擇?頻道選擇?水槽選擇?
這里我們選擇exec source memory channel kafka sink
怎么寫(xiě)?
按照前面提到的步驟 1234
從官方網(wǎng)站上,我們可以找到我們的選擇應該怎么寫(xiě):
1) 配置源
執行源
# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.log
a1.sources.r1.shell = /bin/sh -c
2) 配置通道
記憶通道
a1.channels.c1.type = memory
3) 配置接收器
卡夫卡水槽
水槽1.6 版本可以參考
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.brokerList = hadoop000:9092
a1.sinks.k1.topic = flume_kafka
a1.sinks.k1.batchSize = 5
a1.sinks.k1.requiredAcks =1
4) 將以上三個(gè)組件串在一起
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
**我們的新文件叫做 test3.conf
粘貼我們分析的代碼:**
[hadoop@hadoop000 conf]$ vim test3.conf
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.log
a1.sources.r1.shell = /bin/sh -c
a1.channels.c1.type = memory
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.brokerList = hadoop000:9092
a1.sinks.k1.topic = flume_kafka
a1.sinks.k1.batchSize = 5
a1.sinks.k1.requiredAcks =1
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
這里不展開(kāi)了,因為涉及kafka的東西,首先要部署kafka,
Kafka部署
Kafka是如何部署的??
按照官網(wǎng)的說(shuō)法,我們先啟動(dòng)一個(gè)zookeeper進(jìn)程,然后就可以啟動(dòng)kafka服務(wù)器了
第一步:?jiǎn)?dòng)zookeeper
[hadoop@hadoop000 ~]$
[hadoop@hadoop000 ~]$ jps
29147 Jps
[hadoop@hadoop000 ~]$ zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop000 ~]$ jps
29172 QuorumPeerMain
29189 Jps
[hadoop@hadoop000 ~]$
第二步:?jiǎn)?dòng)服務(wù)器
[hadoop@hadoop000 ~]$ kafka-server-start.sh $KAFKA_HOME/config/server.properties
#外開(kāi)一個(gè)窗口,查看jps
[hadoop@hadoop000 ~]$ jps
29330 Jps
29172 QuorumPeerMain
29229 Kafka
[hadoop@hadoop000 ~]$
如果這部分不是很熟悉,可以參考
第 3 步:創(chuàng )建主題
[hadoop@hadoop000 ~]$ kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic flume_kafka
WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.
Created topic "flume_kafka".
[hadoop@hadoop000 ~]$
第四步:?jiǎn)?dòng)之前的代理
[hadoop@hadoop000 conf]$ flume-ng agent --name a1 --conf . --conf-file ./test3.conf -Dflume.root.logger=INFO,console
第 5 步:?jiǎn)?dòng)消費者
kafka-console-consumer.sh --zookeeper hadoop000:2181 –topic flume-kafka
執行完上面的第五步,就會(huì )收到刷新屏幕的結果了,哈哈哈??!
上面的消費者會(huì )不斷刷新屏幕,還是很有意思的?。?!
這里的消費者就是把接收到的數據放到屏幕上
后面我們會(huì )介紹使用SparkStreaming作為消費者實(shí)時(shí)接收數據,接收的數據是為了簡(jiǎn)單的數據清洗而開(kāi)發(fā)的,從隨機生成的日志中過(guò)濾掉我們需要的數據…… 查看全部
文章實(shí)時(shí)采集(
實(shí)時(shí)數據流的python產(chǎn)生器選型?選型選型?)
Flume和Kafka完成實(shí)時(shí)數據采集
寫(xiě)在前面
Flume和Kafka一般在生產(chǎn)環(huán)境中結合使用??梢詫烧呓Y合使用來(lái)采集實(shí)時(shí)日志信息,這一點(diǎn)非常重要。如果你不知道flume和kafka,可以先查一下我寫(xiě)的關(guān)于這兩部分的知識。再學(xué)習一下,這部分操作也是可以的。
采集 的實(shí)時(shí)數據面臨一個(gè)問(wèn)題。我們如何生成我們的實(shí)時(shí)數據源?因為我們可能想直接獲取實(shí)時(shí)數據流不是那么方便。在文章之前寫(xiě)過(guò)一篇關(guān)于實(shí)時(shí)數據流的python生成器的文章,文章地址:
大家可以先看看,如何生成實(shí)時(shí)數據...
主意?? 如何開(kāi)始??
分析:我們可以從數據的流向開(kāi)始。數據一開(kāi)始就在網(wǎng)絡(luò )服務(wù)器上。我們的訪(fǎng)問(wèn)日志是nginx服務(wù)器實(shí)時(shí)采集到指定文件的。我們從這個(gè)文件中采集日志數據,即:webserver=>flume=>kafka
網(wǎng)絡(luò )服務(wù)器日志存儲文件位置
這個(gè)文件的位置一般是我們自己設置的
我們的網(wǎng)絡(luò )日志存儲的目錄是:
/home/hadoop/data/project/logs/access.log
[hadoop@hadoop000 logs]$ pwd
/home/hadoop/data/project/logs
[hadoop@hadoop000 logs]$ ls
access.log
[hadoop@hadoop000 logs]$
水槽
做flume其實(shí)就是寫(xiě)一個(gè)conf文件,所以面臨選擇的問(wèn)題
來(lái)源選擇?頻道選擇?水槽選擇?
這里我們選擇exec source memory channel kafka sink
怎么寫(xiě)?
按照前面提到的步驟 1234
從官方網(wǎng)站上,我們可以找到我們的選擇應該怎么寫(xiě):
1) 配置源
執行源
# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.log
a1.sources.r1.shell = /bin/sh -c
2) 配置通道
記憶通道
a1.channels.c1.type = memory
3) 配置接收器
卡夫卡水槽
水槽1.6 版本可以參考
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.brokerList = hadoop000:9092
a1.sinks.k1.topic = flume_kafka
a1.sinks.k1.batchSize = 5
a1.sinks.k1.requiredAcks =1
4) 將以上三個(gè)組件串在一起
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
**我們的新文件叫做 test3.conf
粘貼我們分析的代碼:**
[hadoop@hadoop000 conf]$ vim test3.conf
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.log
a1.sources.r1.shell = /bin/sh -c
a1.channels.c1.type = memory
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.brokerList = hadoop000:9092
a1.sinks.k1.topic = flume_kafka
a1.sinks.k1.batchSize = 5
a1.sinks.k1.requiredAcks =1
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
這里不展開(kāi)了,因為涉及kafka的東西,首先要部署kafka,
Kafka部署
Kafka是如何部署的??
按照官網(wǎng)的說(shuō)法,我們先啟動(dòng)一個(gè)zookeeper進(jìn)程,然后就可以啟動(dòng)kafka服務(wù)器了
第一步:?jiǎn)?dòng)zookeeper
[hadoop@hadoop000 ~]$
[hadoop@hadoop000 ~]$ jps
29147 Jps
[hadoop@hadoop000 ~]$ zkServer.sh start
JMX enabled by default
Using config: /home/hadoop/app/zk/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[hadoop@hadoop000 ~]$ jps
29172 QuorumPeerMain
29189 Jps
[hadoop@hadoop000 ~]$
第二步:?jiǎn)?dòng)服務(wù)器
[hadoop@hadoop000 ~]$ kafka-server-start.sh $KAFKA_HOME/config/server.properties
#外開(kāi)一個(gè)窗口,查看jps
[hadoop@hadoop000 ~]$ jps
29330 Jps
29172 QuorumPeerMain
29229 Kafka
[hadoop@hadoop000 ~]$
如果這部分不是很熟悉,可以參考
第 3 步:創(chuàng )建主題
[hadoop@hadoop000 ~]$ kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic flume_kafka
WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.
Created topic "flume_kafka".
[hadoop@hadoop000 ~]$
第四步:?jiǎn)?dòng)之前的代理
[hadoop@hadoop000 conf]$ flume-ng agent --name a1 --conf . --conf-file ./test3.conf -Dflume.root.logger=INFO,console
第 5 步:?jiǎn)?dòng)消費者
kafka-console-consumer.sh --zookeeper hadoop000:2181 –topic flume-kafka
執行完上面的第五步,就會(huì )收到刷新屏幕的結果了,哈哈哈??!
上面的消費者會(huì )不斷刷新屏幕,還是很有意思的?。?!
這里的消費者就是把接收到的數據放到屏幕上
后面我們會(huì )介紹使用SparkStreaming作為消費者實(shí)時(shí)接收數據,接收的數據是為了簡(jiǎn)單的數據清洗而開(kāi)發(fā)的,從隨機生成的日志中過(guò)濾掉我們需要的數據……
文章實(shí)時(shí)采集(引流方法最常用的就是寫(xiě)文章、做互推這三個(gè)主要方法)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 205 次瀏覽 ? 2021-12-14 16:21
很多人到處學(xué)習招攬粉絲的方法和技巧,卻不知道“一招鮮,吃遍天際”。仔細觀(guān)察,你會(huì )發(fā)現很多大咖往往只用兩種技巧來(lái)做流量。很多人經(jīng)常問(wèn)我經(jīng)常用什么方法引流。最常用的引流方式就是寫(xiě)文章、制作視頻、互推三種方式!縱觀(guān)整個(gè)互聯(lián)網(wǎng),目前的流量類(lèi)型準確率最高。是搜索流量,也是轉化率最高的流量。為什么?
搜索流量是轉化率最高的流量
用戶(hù)搜索的關(guān)鍵詞收錄隱藏的需求。例如,如果有人搜索“短視頻是如何流行起來(lái)的?”,他們想了解短視頻的底層邏輯和方法技巧。如果你在做短視頻培訓,那么抓住搜索這些詞的人就等于抓住了他們。潛在客戶(hù)!
搜索流量在互聯(lián)網(wǎng)上無(wú)處不在,因為互聯(lián)網(wǎng)的特點(diǎn)之一就是數據量大。如果數據很大,則需要檢索。如果需要檢索,可以做SEO優(yōu)化,搶搜索流量!許多人對搜索流量的看法很狹窄。理解為搜索引擎流量。其實(shí)電商平臺也有搜索流量,這也需要關(guān)鍵詞搜索排名優(yōu)化。以抖音為代表的去中心化,基于標簽定位的流量池分布的流量模式也有搜索流量。
據官方報道:抖音目前日活躍用戶(hù)搜索量超過(guò)4億,未來(lái)肯定還會(huì )更多。
其實(shí)只要大家掌握了搜索的原理和核心,很多平臺上的搜索做法都是大同小異的。以百度為例。2015年以來(lái),百度90%的搜索流量都集中在手機上。近年來(lái),隨著(zhù)短視頻和直播的興起,百度搜索結果也出現在視頻聚合排名、小視頻聚合排名,甚至直播排名中!
比如我們搜索關(guān)鍵詞這樣的視頻制作,除了競價(jià)廣告,排名第一的是視頻聚合。然后下拉,還有小視頻聚合排名和直播聚合排名:
運營(yíng)視頻聚合排名搶占搜索流量
也就是說(shuō),如果我們發(fā)布視頻(橫豎屏)或者開(kāi)直播相關(guān)關(guān)鍵詞,我們就會(huì )被百度收錄,有機會(huì )參與百度搜索結果的排名!經(jīng)過(guò)大量的測試和研究,我們發(fā)現視頻聚合排名特別適合競爭激烈的關(guān)鍵詞排名,基本可以進(jìn)入前幾名。通過(guò)操作好多個(gè)詞,它們可以在自然搜索結果中排名第一。
目前,操作視頻聚合排名搶占搜索流量也很簡(jiǎn)單。主要有以下幾個(gè)步驟:
第一步:用戶(hù)需求數據分析+關(guān)鍵詞挖掘
通過(guò)需求分析,弄清楚你的潛在客戶(hù)類(lèi)型,進(jìn)而深入挖掘用戶(hù)需求甚至痛點(diǎn)。然后從需求的角度,深入挖掘相關(guān)的關(guān)鍵詞和長(cháng)尾關(guān)鍵詞,構建自己的關(guān)鍵詞庫;常用工具有:站長(cháng)工具、愛(ài)站網(wǎng)、5118網(wǎng)、百度指數、百度關(guān)鍵詞規劃師、搜索引擎下拉關(guān)鍵詞、微信索引、抖音海量索引(查詢(xún)抖音關(guān)鍵詞搜索數量)等。
例如,要采集各種搜索框下拉關(guān)鍵詞 和相關(guān)搜索關(guān)鍵詞,我們使用:
當然,目前比較好用的工具有站長(cháng)工具大數據平臺、愛(ài)站net大數據、5118大數據工具。這三個(gè)工具都是收費的。如果你做一個(gè)單一的數據挖掘,你可以去某個(gè)寶藏。電商平臺可以租用賬號,也可以讓他們代為挖礦!
第 2 步:構建您自己的 關(guān)鍵詞 庫!
第三步:注冊視頻平臺賬號并維護賬號
可以參與視頻聚合的常見(jiàn)平臺有:好看視頻、愛(ài)奇藝、優(yōu)酷、騰訊視頻、獨小視(全民小視頻)、微視、小紅書(shū)、B站、搜狐視頻等,其中百度旗下值得關(guān)注:Goodview Video、獨小視等,特別推薦百度投資愛(ài)奇藝。愛(ài)奇藝的另一個(gè)優(yōu)勢是對廣告的審核不是很?chē)栏瘛?br /> 支持賬號:很多平臺前期還是不帶廣告的,甚至軟廣告也是不允許的。帳上來(lái)后,又軟又寬。此外,很多平臺的級別也越高,單日發(fā)布的數量也越高。比如愛(ài)奇藝開(kāi)設了愛(ài)奇藝的自媒體賬戶(hù),單日最多可以募集100個(gè)賬戶(hù),愛(ài)奇藝賬戶(hù)也有三五個(gè)。足夠的!總之,要想做好,首先要磨礪自己的工具。
第四步:視頻的批量制作
要做這個(gè)視頻聚合排名,必須有大量的視頻。日產(chǎn) 300+ 視頻怎么樣?以下是三種方法:
方法一:制作一個(gè)長(cháng)視頻,然后用視頻分割工具分割成20-40秒左右!
常用的叫視頻編輯專(zhuān)家,而且是免費的!比如我們把一個(gè)準備好的視頻分成240多個(gè):
方法二:使用Silhouette(Byte公司)和妙劍(騰訊公司)。兩款免費工具都有一鍵拍攝和圖文拍攝功能!
方法三:采集下載或制作大量圖片,然后使用會(huì )聲會(huì )影等工具制作帶有圖片的視頻,然后進(jìn)行分割。
其實(shí)上面的方法就夠了,還有一個(gè)很好的辦法就是用一張圖片或者幾張圖片生成無(wú)限視頻上傳。不過(guò)這個(gè)方法僅限于愛(ài)奇藝,這里就不介紹了!總之,第三步的目的就是制作大量的視頻。當然,如果能制作出有針對性的高質(zhì)量視頻就更好了。如果做不到,就制作一些垃圾視頻進(jìn)行宣傳(以上方法)
第五步:將關(guān)鍵詞庫與視頻內容進(jìn)行匹配
為了方便發(fā)布,我們需要提前制作視頻標題。比如每天要發(fā)布300個(gè)視頻,就需要準備300個(gè)標題!準備將視頻批量重命名為準備好的標題:
批量重命名工具一
批量重命名工具二
上述兩個(gè)工具中的第二個(gè)很簡(jiǎn)單,第一個(gè)復雜而強大。一般小白可以用第二個(gè)!
第 6 步:發(fā)布視頻
這一步比較簡(jiǎn)單。大家仔細研究各個(gè)平臺的規則。然后,除了標題中的關(guān)鍵詞意外,其他可以填寫(xiě)關(guān)鍵詞的地方,比如視頻介紹,標簽等!
補充:
1、如果搜索結果中沒(méi)有視頻聚合怎么辦?
大量相關(guān)關(guān)鍵詞視頻發(fā)布后,視頻聚合肯定會(huì )出現。而且操作越多,視頻聚合排名就越好,很多時(shí)候可以搶到第一。
2、視頻聚合排名還能做什么?
其實(shí)操作起來(lái)你會(huì )發(fā)現,視頻聚合可以搶到競技關(guān)鍵詞的流量,單條視頻也可以搶到長(cháng)尾關(guān)鍵詞的流量。所以單個(gè)視頻的相關(guān)關(guān)鍵詞排版也是必須要做的!
3、視頻排名晚了又掉線(xiàn)怎么辦?
一般優(yōu)質(zhì)視頻的數據好的話(huà),可以繼續排名,但垃圾視頻的排名是基于時(shí)效性的。如果有很多競爭對手,他們就會(huì )下降。這個(gè)時(shí)候,繼續補充!金額大的話(huà),對方根本看不到影子!
最后,奉勸各位做流量的人,有方法一定要大力實(shí)施。吸引粉絲和引流沒(méi)有困難。關(guān)鍵詞 就看你的執行力和放大力了!
無(wú)情的執行和大規模擴張是成功的核心。我們很多學(xué)員都達到了3000+的月粉絲數,厲害的人一個(gè)月就可以填滿(mǎn)一個(gè)VX。目前微信好友在線(xiàn)已改為10000,但被動(dòng)家庭成員數量也有限。我們可以多準備幾個(gè)VX號進(jìn)行操作。也可以先轉移到QQ或群甚至公眾號。這種方法也可以用于品牌曝光、負面信息壓制、服務(wù)信息推廣。 查看全部
文章實(shí)時(shí)采集(引流方法最常用的就是寫(xiě)文章、做互推這三個(gè)主要方法)
很多人到處學(xué)習招攬粉絲的方法和技巧,卻不知道“一招鮮,吃遍天際”。仔細觀(guān)察,你會(huì )發(fā)現很多大咖往往只用兩種技巧來(lái)做流量。很多人經(jīng)常問(wèn)我經(jīng)常用什么方法引流。最常用的引流方式就是寫(xiě)文章、制作視頻、互推三種方式!縱觀(guān)整個(gè)互聯(lián)網(wǎng),目前的流量類(lèi)型準確率最高。是搜索流量,也是轉化率最高的流量。為什么?
搜索流量是轉化率最高的流量
用戶(hù)搜索的關(guān)鍵詞收錄隱藏的需求。例如,如果有人搜索“短視頻是如何流行起來(lái)的?”,他們想了解短視頻的底層邏輯和方法技巧。如果你在做短視頻培訓,那么抓住搜索這些詞的人就等于抓住了他們。潛在客戶(hù)!
搜索流量在互聯(lián)網(wǎng)上無(wú)處不在,因為互聯(lián)網(wǎng)的特點(diǎn)之一就是數據量大。如果數據很大,則需要檢索。如果需要檢索,可以做SEO優(yōu)化,搶搜索流量!許多人對搜索流量的看法很狹窄。理解為搜索引擎流量。其實(shí)電商平臺也有搜索流量,這也需要關(guān)鍵詞搜索排名優(yōu)化。以抖音為代表的去中心化,基于標簽定位的流量池分布的流量模式也有搜索流量。
據官方報道:抖音目前日活躍用戶(hù)搜索量超過(guò)4億,未來(lái)肯定還會(huì )更多。
其實(shí)只要大家掌握了搜索的原理和核心,很多平臺上的搜索做法都是大同小異的。以百度為例。2015年以來(lái),百度90%的搜索流量都集中在手機上。近年來(lái),隨著(zhù)短視頻和直播的興起,百度搜索結果也出現在視頻聚合排名、小視頻聚合排名,甚至直播排名中!

比如我們搜索關(guān)鍵詞這樣的視頻制作,除了競價(jià)廣告,排名第一的是視頻聚合。然后下拉,還有小視頻聚合排名和直播聚合排名:


運營(yíng)視頻聚合排名搶占搜索流量
也就是說(shuō),如果我們發(fā)布視頻(橫豎屏)或者開(kāi)直播相關(guān)關(guān)鍵詞,我們就會(huì )被百度收錄,有機會(huì )參與百度搜索結果的排名!經(jīng)過(guò)大量的測試和研究,我們發(fā)現視頻聚合排名特別適合競爭激烈的關(guān)鍵詞排名,基本可以進(jìn)入前幾名。通過(guò)操作好多個(gè)詞,它們可以在自然搜索結果中排名第一。
目前,操作視頻聚合排名搶占搜索流量也很簡(jiǎn)單。主要有以下幾個(gè)步驟:
第一步:用戶(hù)需求數據分析+關(guān)鍵詞挖掘
通過(guò)需求分析,弄清楚你的潛在客戶(hù)類(lèi)型,進(jìn)而深入挖掘用戶(hù)需求甚至痛點(diǎn)。然后從需求的角度,深入挖掘相關(guān)的關(guān)鍵詞和長(cháng)尾關(guān)鍵詞,構建自己的關(guān)鍵詞庫;常用工具有:站長(cháng)工具、愛(ài)站網(wǎng)、5118網(wǎng)、百度指數、百度關(guān)鍵詞規劃師、搜索引擎下拉關(guān)鍵詞、微信索引、抖音海量索引(查詢(xún)抖音關(guān)鍵詞搜索數量)等。
例如,要采集各種搜索框下拉關(guān)鍵詞 和相關(guān)搜索關(guān)鍵詞,我們使用:

當然,目前比較好用的工具有站長(cháng)工具大數據平臺、愛(ài)站net大數據、5118大數據工具。這三個(gè)工具都是收費的。如果你做一個(gè)單一的數據挖掘,你可以去某個(gè)寶藏。電商平臺可以租用賬號,也可以讓他們代為挖礦!
第 2 步:構建您自己的 關(guān)鍵詞 庫!
第三步:注冊視頻平臺賬號并維護賬號
可以參與視頻聚合的常見(jiàn)平臺有:好看視頻、愛(ài)奇藝、優(yōu)酷、騰訊視頻、獨小視(全民小視頻)、微視、小紅書(shū)、B站、搜狐視頻等,其中百度旗下值得關(guān)注:Goodview Video、獨小視等,特別推薦百度投資愛(ài)奇藝。愛(ài)奇藝的另一個(gè)優(yōu)勢是對廣告的審核不是很?chē)栏瘛?br /> 支持賬號:很多平臺前期還是不帶廣告的,甚至軟廣告也是不允許的。帳上來(lái)后,又軟又寬。此外,很多平臺的級別也越高,單日發(fā)布的數量也越高。比如愛(ài)奇藝開(kāi)設了愛(ài)奇藝的自媒體賬戶(hù),單日最多可以募集100個(gè)賬戶(hù),愛(ài)奇藝賬戶(hù)也有三五個(gè)。足夠的!總之,要想做好,首先要磨礪自己的工具。
第四步:視頻的批量制作
要做這個(gè)視頻聚合排名,必須有大量的視頻。日產(chǎn) 300+ 視頻怎么樣?以下是三種方法:
方法一:制作一個(gè)長(cháng)視頻,然后用視頻分割工具分割成20-40秒左右!

常用的叫視頻編輯專(zhuān)家,而且是免費的!比如我們把一個(gè)準備好的視頻分成240多個(gè):

方法二:使用Silhouette(Byte公司)和妙劍(騰訊公司)。兩款免費工具都有一鍵拍攝和圖文拍攝功能!
方法三:采集下載或制作大量圖片,然后使用會(huì )聲會(huì )影等工具制作帶有圖片的視頻,然后進(jìn)行分割。

其實(shí)上面的方法就夠了,還有一個(gè)很好的辦法就是用一張圖片或者幾張圖片生成無(wú)限視頻上傳。不過(guò)這個(gè)方法僅限于愛(ài)奇藝,這里就不介紹了!總之,第三步的目的就是制作大量的視頻。當然,如果能制作出有針對性的高質(zhì)量視頻就更好了。如果做不到,就制作一些垃圾視頻進(jìn)行宣傳(以上方法)
第五步:將關(guān)鍵詞庫與視頻內容進(jìn)行匹配
為了方便發(fā)布,我們需要提前制作視頻標題。比如每天要發(fā)布300個(gè)視頻,就需要準備300個(gè)標題!準備將視頻批量重命名為準備好的標題:


批量重命名工具一

批量重命名工具二
上述兩個(gè)工具中的第二個(gè)很簡(jiǎn)單,第一個(gè)復雜而強大。一般小白可以用第二個(gè)!
第 6 步:發(fā)布視頻
這一步比較簡(jiǎn)單。大家仔細研究各個(gè)平臺的規則。然后,除了標題中的關(guān)鍵詞意外,其他可以填寫(xiě)關(guān)鍵詞的地方,比如視頻介紹,標簽等!
補充:
1、如果搜索結果中沒(méi)有視頻聚合怎么辦?
大量相關(guān)關(guān)鍵詞視頻發(fā)布后,視頻聚合肯定會(huì )出現。而且操作越多,視頻聚合排名就越好,很多時(shí)候可以搶到第一。
2、視頻聚合排名還能做什么?
其實(shí)操作起來(lái)你會(huì )發(fā)現,視頻聚合可以搶到競技關(guān)鍵詞的流量,單條視頻也可以搶到長(cháng)尾關(guān)鍵詞的流量。所以單個(gè)視頻的相關(guān)關(guān)鍵詞排版也是必須要做的!
3、視頻排名晚了又掉線(xiàn)怎么辦?
一般優(yōu)質(zhì)視頻的數據好的話(huà),可以繼續排名,但垃圾視頻的排名是基于時(shí)效性的。如果有很多競爭對手,他們就會(huì )下降。這個(gè)時(shí)候,繼續補充!金額大的話(huà),對方根本看不到影子!
最后,奉勸各位做流量的人,有方法一定要大力實(shí)施。吸引粉絲和引流沒(méi)有困難。關(guān)鍵詞 就看你的執行力和放大力了!
無(wú)情的執行和大規模擴張是成功的核心。我們很多學(xué)員都達到了3000+的月粉絲數,厲害的人一個(gè)月就可以填滿(mǎn)一個(gè)VX。目前微信好友在線(xiàn)已改為10000,但被動(dòng)家庭成員數量也有限。我們可以多準備幾個(gè)VX號進(jìn)行操作。也可以先轉移到QQ或群甚至公眾號。這種方法也可以用于品牌曝光、負面信息壓制、服務(wù)信息推廣。
文章實(shí)時(shí)采集(再看看被搬的時(shí)間,還好搬文章的人用是博客園)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 135 次瀏覽 ? 2021-12-09 15:01
看看它被移動(dòng)的時(shí)間。還好搬家文章的人用的是博客園而不是自己的程序,不然可以隨意修改文章的發(fā)布時(shí)間:
先說(shuō)一下那個(gè)文章的背景吧,那個(gè)文章就是剛出來(lái)工作(實(shí)習)的博主,實(shí)習結束前,他所見(jiàn)所聞所見(jiàn)所聞。寫(xiě)一點(diǎn)Laravel admin的小知識。
沒(méi)想到,就這樣被搬走了。其實(shí)博主并不反對搬文章,而是應該放個(gè)原文鏈接。這是對原作者的尊重。
其實(shí)采集這樣背著(zhù)文章的人還有很多。比如一個(gè)博主所在的QQ群是這樣的:
由于某些搜索引擎的算法,采集文章的一些博客的權重會(huì )更高,而真正努力寫(xiě)好每篇博文的博客的權重都比收錄高。但。
所以這會(huì )導致很多博客致力于采集文章。
就像現在的博主,百度搜索到Laravel-admin到第三頁(yè),我沒(méi)有看到博主的原創(chuàng )文章,但是我可以看到去掉的文章,因為權重博客園比博主強很多,一個(gè)只有少量流量的博客。
不過(guò)百度不應該因為網(wǎng)站的權重太高而忽略了一些動(dòng)人的文章的存在。
網(wǎng)上很大,其實(shí)很可能不止這個(gè)文章被搬走了,很多博客也被搬走了文章。
如果不注意,可能會(huì )導致一些原創(chuàng )博主不公開(kāi)自己的文章。
雖然博主經(jīng)常寫(xiě)一些關(guān)于如何自動(dòng)采集的文章,但是博主并沒(méi)有在任何系統中使用采集。
自動(dòng)采集可以學(xué)習,也可以用于一些數據的統計。但是這種直接刪除文章還是很煩的。并且沒(méi)有原創(chuàng )地址的鏈接。
最后說(shuō)一下通過(guò)技術(shù)手段避免被文章傳輸的方法。
如果是手動(dòng)復制,然后貼在自己的博客上,基本就停不下來(lái)了。
如果使用自動(dòng)采集(爬蟲(chóng)),可以限制訪(fǎng)問(wèn)頻率等。當然,如果對方只是爬了一篇文章的文章,也是必然的,必然的。
最重要的是給每張圖片加水印。推薦使用對象存儲(好像現在市面上的云服務(wù)商都有這個(gè),騰訊和阿里都有,七牛應該也有)。
它不會(huì )破壞原創(chuàng )圖像,只是添加訪(fǎng)問(wèn)樣式。
比如博主用阿里的:
當然,加水印也不是100%避免被采集,因為水印也可以通過(guò)技術(shù)手段去除。除非整個(gè)圖像都是水印。 查看全部
文章實(shí)時(shí)采集(再看看被搬的時(shí)間,還好搬文章的人用是博客園)
看看它被移動(dòng)的時(shí)間。還好搬家文章的人用的是博客園而不是自己的程序,不然可以隨意修改文章的發(fā)布時(shí)間:

先說(shuō)一下那個(gè)文章的背景吧,那個(gè)文章就是剛出來(lái)工作(實(shí)習)的博主,實(shí)習結束前,他所見(jiàn)所聞所見(jiàn)所聞。寫(xiě)一點(diǎn)Laravel admin的小知識。
沒(méi)想到,就這樣被搬走了。其實(shí)博主并不反對搬文章,而是應該放個(gè)原文鏈接。這是對原作者的尊重。
其實(shí)采集這樣背著(zhù)文章的人還有很多。比如一個(gè)博主所在的QQ群是這樣的:

由于某些搜索引擎的算法,采集文章的一些博客的權重會(huì )更高,而真正努力寫(xiě)好每篇博文的博客的權重都比收錄高。但。
所以這會(huì )導致很多博客致力于采集文章。
就像現在的博主,百度搜索到Laravel-admin到第三頁(yè),我沒(méi)有看到博主的原創(chuàng )文章,但是我可以看到去掉的文章,因為權重博客園比博主強很多,一個(gè)只有少量流量的博客。
不過(guò)百度不應該因為網(wǎng)站的權重太高而忽略了一些動(dòng)人的文章的存在。
網(wǎng)上很大,其實(shí)很可能不止這個(gè)文章被搬走了,很多博客也被搬走了文章。
如果不注意,可能會(huì )導致一些原創(chuàng )博主不公開(kāi)自己的文章。
雖然博主經(jīng)常寫(xiě)一些關(guān)于如何自動(dòng)采集的文章,但是博主并沒(méi)有在任何系統中使用采集。
自動(dòng)采集可以學(xué)習,也可以用于一些數據的統計。但是這種直接刪除文章還是很煩的。并且沒(méi)有原創(chuàng )地址的鏈接。
最后說(shuō)一下通過(guò)技術(shù)手段避免被文章傳輸的方法。
如果是手動(dòng)復制,然后貼在自己的博客上,基本就停不下來(lái)了。
如果使用自動(dòng)采集(爬蟲(chóng)),可以限制訪(fǎng)問(wèn)頻率等。當然,如果對方只是爬了一篇文章的文章,也是必然的,必然的。
最重要的是給每張圖片加水印。推薦使用對象存儲(好像現在市面上的云服務(wù)商都有這個(gè),騰訊和阿里都有,七牛應該也有)。
它不會(huì )破壞原創(chuàng )圖像,只是添加訪(fǎng)問(wèn)樣式。
比如博主用阿里的:

當然,加水印也不是100%避免被采集,因為水印也可以通過(guò)技術(shù)手段去除。除非整個(gè)圖像都是水印。
文章實(shí)時(shí)采集(【Python爬蟲(chóng)+數據分析】實(shí)時(shí)采集最新疫情數據,繪制可視化地圖分析 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 168 次瀏覽 ? 2021-12-09 07:14
)
文章內容
一、 寫(xiě)在前面
兄弟們,最近有各種流行病。下班后盡量少去人多的地方。出門(mén)記得戴口罩。
所以如果你不出去,在家什么都不做,你只能學(xué)到更多的新東西。今天,我就爬取國內的疫情數據,看看國內的疫情情況。最后,讓我們將數據可視化并制作可視化地圖。
二、準備2.1、開(kāi)發(fā)環(huán)境
如果您不知道如何安裝軟件、模塊或其他基本和簡(jiǎn)單的問(wèn)題,請參閱此處:Python 入門(mén)集合
我還在本文末尾附上了視頻教程。文章看不懂,可以看視頻。
2.2、知識點(diǎn)爬蟲(chóng)基本流程jsonrequests在爬蟲(chóng)中發(fā)送網(wǎng)絡(luò )請求,pandas表單處理/保存數據pyecharts可視化三、爬蟲(chóng)部分3.1、爬蟲(chóng)過(guò)程明確要求
我們在爬什么?
分析數據從何而來(lái)#/
使用開(kāi)發(fā)者工具抓包(數據包)分析代碼流
?、? 發(fā)送訪(fǎng)問(wèn)請求網(wǎng)站
?、? 獲取數據
?、? 分析數據
xpath css re json bs4(已過(guò)時(shí))
python語(yǔ)言的json字典類(lèi)型數據{key 1: value 1, key 2: value 2, key 3: value 3}
?、? 保存數據3.2、數據采集
導入模塊
import time # 時(shí)間模塊
import json # json包
import requests # 網(wǎng)絡(luò )請求庫 第三方 pip
import pandas as pd # 數據處理 第三庫 pip
目標網(wǎng)址
url = 'https://view.inews.qq.com/g2/g ... 25int(time.time()*1000)
模擬瀏覽器發(fā)送請求并得到響應
html = requests.get(url)
分析網(wǎng)頁(yè)并提取數據
# json類(lèi)型轉換
data = json.loads(html.json()['data'])
china_data = data['areaTree'][0]['children']
data_set = []
for i in china_data:
data_dict = {}
# 地區名稱(chēng)
data_dict['province'] = i['name']
# 疫情數據
# 新增確診
data_dict['nowConfirm'] = i['total']['nowConfirm']
data_dict['confirm'] = i['total']['confirm']
data_dict['dead'] = i['total']['dead']
data_dict['heal'] = i['total']['heal']
data_dict['deadRate'] = i['total']['deadRate']
data_dict['healRate'] = i['total']['healRate']
data_set.append(data_dict)
df = pd.DataFrame(data_set)
df
保存數據
df.to_csv(r'data.csv')
四、數據可視化部分
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Pie,Map,Grid
df2 = df.sort_values(by=['nowConfirm'],ascending=False)[:9]
df2
[list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())]
pie = (
Pie()
.add(
"",
[list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())],
radius = ["10%","30%"]
)
.set_global_opts(
legend_opts=opts.LegendOpts(orient="vertical", pos_top="70%", pos_left="70%"),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter=": {c}"))
)
pie.render_notebook()
死亡率和治愈率
line = (
Line()
.add_xaxis(list(df['province'].values))
.add_yaxis("治愈率", df['healRate'].values.tolist())
.add_yaxis("死亡率", df['deadRate'].values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="死亡率與治愈率"),
)
)
line.render_notebook()
各地區確診及死亡人數
各地區確診病例數
china_map = (
Map()
.add("現有確診", [list(i) for i in zip(df['province'].values.tolist(),df['nowConfirm'].values.tolist())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="各地區確診人數"),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
)
)
china_map.render('a.html')
五、視頻教程
怕是零基礎不好。已經(jīng)為此發(fā)布了相關(guān)的視頻教程。你可以自己看。
【Python爬蟲(chóng)+數據分析】實(shí)時(shí)采集最新疫情數據,繪制可視化地圖分析!
六、寫(xiě)在最后
兄弟們,如果覺(jué)得對你有幫助,別忘了給你的臉點(diǎn)個(gè)贊,評論,采集,連續四次轉發(fā)哦~
查看全部
文章實(shí)時(shí)采集(【Python爬蟲(chóng)+數據分析】實(shí)時(shí)采集最新疫情數據,繪制可視化地圖分析
)
文章內容
一、 寫(xiě)在前面
兄弟們,最近有各種流行病。下班后盡量少去人多的地方。出門(mén)記得戴口罩。

所以如果你不出去,在家什么都不做,你只能學(xué)到更多的新東西。今天,我就爬取國內的疫情數據,看看國內的疫情情況。最后,讓我們將數據可視化并制作可視化地圖。

二、準備2.1、開(kāi)發(fā)環(huán)境
如果您不知道如何安裝軟件、模塊或其他基本和簡(jiǎn)單的問(wèn)題,請參閱此處:Python 入門(mén)集合
我還在本文末尾附上了視頻教程。文章看不懂,可以看視頻。
2.2、知識點(diǎn)爬蟲(chóng)基本流程jsonrequests在爬蟲(chóng)中發(fā)送網(wǎng)絡(luò )請求,pandas表單處理/保存數據pyecharts可視化三、爬蟲(chóng)部分3.1、爬蟲(chóng)過(guò)程明確要求
我們在爬什么?
分析數據從何而來(lái)#/
使用開(kāi)發(fā)者工具抓包(數據包)分析代碼流
?、? 發(fā)送訪(fǎng)問(wèn)請求網(wǎng)站
?、? 獲取數據
?、? 分析數據
xpath css re json bs4(已過(guò)時(shí))
python語(yǔ)言的json字典類(lèi)型數據{key 1: value 1, key 2: value 2, key 3: value 3}
?、? 保存數據3.2、數據采集
導入模塊
import time # 時(shí)間模塊
import json # json包
import requests # 網(wǎng)絡(luò )請求庫 第三方 pip
import pandas as pd # 數據處理 第三庫 pip
目標網(wǎng)址
url = 'https://view.inews.qq.com/g2/g ... 25int(time.time()*1000)
模擬瀏覽器發(fā)送請求并得到響應
html = requests.get(url)
分析網(wǎng)頁(yè)并提取數據
# json類(lèi)型轉換
data = json.loads(html.json()['data'])
china_data = data['areaTree'][0]['children']
data_set = []
for i in china_data:
data_dict = {}
# 地區名稱(chēng)
data_dict['province'] = i['name']
# 疫情數據
# 新增確診
data_dict['nowConfirm'] = i['total']['nowConfirm']
data_dict['confirm'] = i['total']['confirm']
data_dict['dead'] = i['total']['dead']
data_dict['heal'] = i['total']['heal']
data_dict['deadRate'] = i['total']['deadRate']
data_dict['healRate'] = i['total']['healRate']
data_set.append(data_dict)
df = pd.DataFrame(data_set)
df
保存數據
df.to_csv(r'data.csv')
四、數據可視化部分
from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Pie,Map,Grid
df2 = df.sort_values(by=['nowConfirm'],ascending=False)[:9]
df2
[list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())]
pie = (
Pie()
.add(
"",
[list(i) for i in zip(df2['province'].values.tolist(),df2['nowConfirm'].values.tolist())],
radius = ["10%","30%"]
)
.set_global_opts(
legend_opts=opts.LegendOpts(orient="vertical", pos_top="70%", pos_left="70%"),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter=": {c}"))
)
pie.render_notebook()
死亡率和治愈率
line = (
Line()
.add_xaxis(list(df['province'].values))
.add_yaxis("治愈率", df['healRate'].values.tolist())
.add_yaxis("死亡率", df['deadRate'].values.tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="死亡率與治愈率"),
)
)
line.render_notebook()
各地區確診及死亡人數
各地區確診病例數
china_map = (
Map()
.add("現有確診", [list(i) for i in zip(df['province'].values.tolist(),df['nowConfirm'].values.tolist())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="各地區確診人數"),
visualmap_opts=opts.VisualMapOpts(max_=200, is_piecewise=True),
)
)
china_map.render('a.html')
五、視頻教程
怕是零基礎不好。已經(jīng)為此發(fā)布了相關(guān)的視頻教程。你可以自己看。
【Python爬蟲(chóng)+數據分析】實(shí)時(shí)采集最新疫情數據,繪制可視化地圖分析!
六、寫(xiě)在最后
兄弟們,如果覺(jué)得對你有幫助,別忘了給你的臉點(diǎn)個(gè)贊,評論,采集,連續四次轉發(fā)哦~
文章實(shí)時(shí)采集(一個(gè)個(gè)人總結性的原則采集中的問(wèn)題以及相應的含義)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2021-11-30 02:02
前言
今天無(wú)意間刷新了技術(shù)公眾號,看到了這樣一篇文章的文章,是基于Flink關(guān)于Mysql Binlog數據的計劃采集。我看了實(shí)際方法和具體操作。有一些不充分的考慮。情況,缺少一些操作來(lái)處理實(shí)際情況。筆者之前也做過(guò)一些類(lèi)似的采集工具實(shí)踐文章,但是沒(méi)有做一個(gè)整體的系統總結,所以想知道是否可以做一個(gè)個(gè)人總結文章,總結Binlog采集中的問(wèn)題以及相應的解決方案?
可能很多人對 Binlog 還不夠了解。有些人可能會(huì )膚淺地想:“不是mysql生成的,它有固定結構的日志。把數據采集帶過(guò)來(lái),然后做成數據,登陸,有什么難的?”
的確,它本質(zhì)上確實(shí)是一個(gè)日志,但實(shí)際上,關(guān)于Binlog采集,從場(chǎng)景分析到技術(shù)選擇,整體里面還有很多不為人知的坑,所以不要小看它。
作者寫(xiě)這篇文章,目的是為了展示Binlog數據采集在實(shí)際工作中開(kāi)發(fā)過(guò)程的原理、注意事項以及可能出現的問(wèn)題。也會(huì )有作者的一些個(gè)人性格??偨Y一下數據采集中的原理,供大家參考,都是干貨。
讓我們開(kāi)始吧!
個(gè)人總結原則
首先拋開(kāi)技術(shù)框架的討論,個(gè)人總結一下Binlog日志數據采集的主要原理:
分別說(shuō)明這三個(gè)原則的具體含義
原則一
在數據采集中,數據登陸一般采用時(shí)間分區進(jìn)行登陸,所以我們需要確定一個(gè)固定的時(shí)間戳作為時(shí)間分區的基本時(shí)間序列。
在這種情況下,業(yè)務(wù)數據上的時(shí)間戳字段,無(wú)論是從實(shí)際開(kāi)發(fā)中獲取時(shí)間戳的角度,還是實(shí)際表中都會(huì )有這樣的時(shí)間戳,似乎都不可能所有表都完全滿(mǎn)足.
舉個(gè)反例:
表:業(yè)務(wù)時(shí)間戳
表 A:create_time、update_time
表 B:創(chuàng )建時(shí)間
表 C:create_at
表 D:無(wú)
像這樣的情況,理論上可以通過(guò)限制RD和DBA在設計表時(shí)對表結構的正則化來(lái)統一和限制時(shí)間戳和命名,但在實(shí)際工作中,這種情況基本不可能做到我相信很多讀者都會(huì )遇到這種情況。
可能很多做數據采集的同學(xué)會(huì )想,能不能請他們制定標準?
我個(gè)人的看法是,是的,但大數據的底層數據采集并不是完全依賴(lài)于這種相互開(kāi)發(fā)的標準。原因有以下三個(gè):
因此,如果要使用唯一的固定時(shí)間序列,必須與業(yè)務(wù)數據分離,并且我們想要的時(shí)間戳不受業(yè)務(wù)數據變化的影響。
原則二
在業(yè)務(wù)數據庫中,必然存在表結構變化的問(wèn)題。大多數情況下是添加列,但也有列重命名、列刪除等情況,字段變化的順序不可控。
這個(gè)原則想描述的是,導入數據倉庫的表必須適應數據庫表的各種操作,以保持其可用性和列數據的正確性。
原則三
這個(gè)數據可以追溯,包括兩個(gè)方面
第一個(gè)描述是在采集binlog采集端,可以再次按下位置采集binlog。
第二個(gè)描述是消費binlog登陸結束時(shí),可以通過(guò)重復消費來(lái)重新登陸數據。
這是作者的個(gè)人總結,無(wú)論選擇什么樣的技術(shù)選擇進(jìn)行組合施工,都需要具備這些原則。
實(shí)施方案及具體操作
技術(shù)架構:Debezium + Confluent + Kafka + OSS/S3 + Hive
基于原理一的解決方案
Debezium 提供了 New Record State Extraction 的配置選項,相當于提供了一個(gè)轉換算子來(lái)提取 binlog 中的元數據。
對于0.10版本的配置,可以提取表、版本、連接器、名稱(chēng)、ts_ms、db、server_id、file、pos、row等binlog元數據信息。
其中ts_ms是binlog日志的生成時(shí)間,這個(gè)是binlog元數據,可以應用到所有數據表,這個(gè)固定的時(shí)間戳可以在不完全了解數據表內部結構的情況下,完全實(shí)現我們的原理一。
關(guān)于Debezium,不同版本之前的配置參數可能不同。讀者如果需要練習,需要在官方文檔中確認對應版本的配置參數。
對于其他框架,比如市面上比較常用的Canal,或者讀者需要自己開(kāi)發(fā)數據采集程序,建議提取binlog元數據,在這個(gè)過(guò)程中可能會(huì )用到,后續流程。到達。
基于原理2的解決方案
對于Hive,目前主流的數據存儲格式有Parquet、ORC、Json、Avro。
暫且不談數據存儲效率的討論。
對于前兩種數據格式,是列存儲。也就是說(shuō),這兩種數據格式的數據讀取將嚴格依賴(lài)于我們數據表中數據的存儲順序。這種數據格式不能滿(mǎn)足數據列的靈活性。添加、刪除等操作。
Avro 格式是行存儲,但需要依賴(lài) Schema Register 服務(wù)??紤]到Hive的數據表讀取完全依賴(lài)于外部服務(wù),風(fēng)險太大。
最后決定使用Json格式進(jìn)行數據存儲。這種讀取和存儲效率雖然沒(méi)有其他格式高,但是可以保證業(yè)務(wù)數據的任何變化都可以在hive中讀取。
Debezium組件采集binlog的數據為json格式,符合預期的設計方案,可以解決原理2帶來(lái)的問(wèn)題。
對于其他框架,比如市面上比較常用的Canal,可以設置成Json數據格式進(jìn)行傳輸,或者讀者如果需要自己開(kāi)發(fā)數據采集程序,同樣的道理是真的。
基于原理三的解決方案
在采集binlog采集端,可以再次按下位置采集binlog。
官方 Debezium 網(wǎng)站 上也提供了該方案的實(shí)現。需要一般說(shuō)明。需要Kafkacat工具。
對于采集的每個(gè)mysql實(shí)例,在創(chuàng )建數據采集任務(wù)時(shí),Confluent都會(huì )創(chuàng )建連接器的采集元數據的主題(即采集程序) 因此,
對應的時(shí)間戳、文件位置和位置都會(huì )存儲在里面。您可以通過(guò)修改此數據來(lái)重置 采集binlog 日志的位置。
值得注意的是,這個(gè)操作的時(shí)間節點(diǎn)也是有限制的,這和mysql的binlog日志的存儲周期有關(guān),所以用這種方式回溯的時(shí)候,需要確認mysql日志還存在。
將數據放回地面以供重復使用。
因為這個(gè)方案是基于Kafka的,所以網(wǎng)上有很多Kafka重新設計消費抵消消費站點(diǎn)的方案,這里不再贅述。
供讀者自行實(shí)現,需要確認的選定MQ支持此功能。
#how_to_change_the_offsets_of_the_source_database
業(yè)務(wù)場(chǎng)景影響下的重要操作
本部分僅描述如何在作者的技術(shù)架構下實(shí)現以下操作。讀者可以根據他們選擇的技術(shù)組件探索不同的技術(shù)解決方案。
數據庫分庫分表情況
基于Debezium的架構,一個(gè)Source只能對應一個(gè)采集的mysql實(shí)例。對于同一個(gè)實(shí)例上的表拆分,您可以使用 Debezium Topic Routing 功能。
通過(guò)采集過(guò)濾binlog時(shí),將需要采集的表按照正則匹配寫(xiě)入指定topic。
在子庫的情況下,還需要在sink端添加RegexRouter變換算子,進(jìn)行topic之間的合并和寫(xiě)入操作。
數據增量采集和全量采集
對于采集組件,當前的配置是基于增量為默認的,所以無(wú)論選擇Debezium還是Canal,正常配置都可以。
但是,在某些情況下,會(huì )出現需要采集 的整個(gè)表的情況。作者還給出了全量數據的方案采集。
選項一
Debezium本身自帶這樣的功能,你需要
將snapshot.mode參數選擇設置為when_needed,這樣就可以做全表的采集操作。
在官方文檔中,這里的參數配置有更詳細的說(shuō)明。
#快照
選項二
同時(shí)使用sqoop和增量采集。
該方案適用于已經(jīng)有很多表數據,但當前binlog數據頻率不高的情況,使用該方案。
值得注意的是,有兩點(diǎn):
脫機重復數據刪除條件
數據落地后,通過(guò)json表映射出binlog原創(chuàng )數據,那么問(wèn)題來(lái)了,我們如何找到最新的那條數據呢?
或許我們可以簡(jiǎn)單的想,用剛才提取的ts_ms,然后再做反演,是不是就可以了?
在大多數情況下,這確實(shí)是可能的。
但是在實(shí)際開(kāi)發(fā)中,筆者發(fā)現這樣的情況并不能滿(mǎn)足所有的情況,因為在binlog中,可能有兩個(gè)數據和ts_ms和PK一樣,但是確實(shí)不同。
那么我們如何同時(shí)解析兩條數據呢?
答案就在上面,我們只是建議提取所有 binlog 元數據。
SELECT *
FROM
(
SELECT *,
row_number() over(partition BY t.id ORDER BY t.`__ts_ms` DESC,t.`__file` DESC,cast(t.`__pos` AS int) DESC) AS order_by
FROM test t
WHERE dt='{pt}'
AND hour='{now_hour}'
) t1
WHERE t1.order_by = 1
解釋一下這個(gè)sql中row_number的條件
__ts_ms:binlog中的ts_ms,即事件時(shí)間。
__file:是binlog數據的文件名。
__pos:是binlog中數據所在文件在文件中的位置,為數據類(lèi)型。
這樣組合條件取出的數據是最新的。
有讀者可能會(huì )問(wèn),如果這條數據被刪除了怎么辦?你這樣檢索出來(lái)的數據是不是錯了?
這個(gè)Debezium也有相應的操作,有相應的配置選項讓你選擇如何處理刪除行為的binlog數據。
作為給大家參考,作者選擇了rewrite的參數配置,這樣上面的sql最外層只需要判斷“delete='false'”是正確的數據即可。
架構總結
在技??術(shù)選擇和整體細節結構上,作者始終堅持一個(gè)原則——
過(guò)程應該盡可能簡(jiǎn)單,而不是越簡(jiǎn)單越好。數據鏈路越長(cháng),可能出現的問(wèn)題鏈路就越多。后期的鎖死問(wèn)題和運維也會(huì )很困難。
所以筆者在技術(shù)選型上考慮了Flink+Kafka的方式,但是基于當時(shí)的情況,筆者并沒(méi)有選擇這樣的技術(shù)選型,筆者也詳細闡述了原因。
綜上所述,我當時(shí)就想到了 Flink。如果Flink不是基于平臺的開(kāi)發(fā)和運維監控,可以作為臨時(shí)解決方案,但如果后期在這樣的開(kāi)發(fā)過(guò)程下縫補了,就要多人開(kāi)發(fā)。很容易出問(wèn)題,或者大家都在這樣的程序框架下造輪子,造的越多越慢。而且后期的主要項目方向并沒(méi)有把Flink平臺化提上日程,所以也是考慮到了部分未來(lái)情況的選擇。
所以當我最終決定技術(shù)選擇的時(shí)候,我并沒(méi)有選擇 Flink。
結束語(yǔ)
這篇文章文章比較理論,也是對這個(gè)場(chǎng)景的技術(shù)理論總結。如果文章中還有其他不清楚的操作,可以參考作者之前的文章詳細代碼級操作。
技術(shù)架構方案有很多種。我只是選擇了其中之一來(lái)實(shí)施。也希望大家有其他的技術(shù)方案或理論進(jìn)行交流。請糾正我。 查看全部
文章實(shí)時(shí)采集(一個(gè)個(gè)人總結性的原則采集中的問(wèn)題以及相應的含義)
前言
今天無(wú)意間刷新了技術(shù)公眾號,看到了這樣一篇文章的文章,是基于Flink關(guān)于Mysql Binlog數據的計劃采集。我看了實(shí)際方法和具體操作。有一些不充分的考慮。情況,缺少一些操作來(lái)處理實(shí)際情況。筆者之前也做過(guò)一些類(lèi)似的采集工具實(shí)踐文章,但是沒(méi)有做一個(gè)整體的系統總結,所以想知道是否可以做一個(gè)個(gè)人總結文章,總結Binlog采集中的問(wèn)題以及相應的解決方案?
可能很多人對 Binlog 還不夠了解。有些人可能會(huì )膚淺地想:“不是mysql生成的,它有固定結構的日志。把數據采集帶過(guò)來(lái),然后做成數據,登陸,有什么難的?”
的確,它本質(zhì)上確實(shí)是一個(gè)日志,但實(shí)際上,關(guān)于Binlog采集,從場(chǎng)景分析到技術(shù)選擇,整體里面還有很多不為人知的坑,所以不要小看它。
作者寫(xiě)這篇文章,目的是為了展示Binlog數據采集在實(shí)際工作中開(kāi)發(fā)過(guò)程的原理、注意事項以及可能出現的問(wèn)題。也會(huì )有作者的一些個(gè)人性格??偨Y一下數據采集中的原理,供大家參考,都是干貨。
讓我們開(kāi)始吧!
個(gè)人總結原則
首先拋開(kāi)技術(shù)框架的討論,個(gè)人總結一下Binlog日志數據采集的主要原理:
分別說(shuō)明這三個(gè)原則的具體含義
原則一
在數據采集中,數據登陸一般采用時(shí)間分區進(jìn)行登陸,所以我們需要確定一個(gè)固定的時(shí)間戳作為時(shí)間分區的基本時(shí)間序列。
在這種情況下,業(yè)務(wù)數據上的時(shí)間戳字段,無(wú)論是從實(shí)際開(kāi)發(fā)中獲取時(shí)間戳的角度,還是實(shí)際表中都會(huì )有這樣的時(shí)間戳,似乎都不可能所有表都完全滿(mǎn)足.
舉個(gè)反例:
表:業(yè)務(wù)時(shí)間戳
表 A:create_time、update_time
表 B:創(chuàng )建時(shí)間
表 C:create_at
表 D:無(wú)
像這樣的情況,理論上可以通過(guò)限制RD和DBA在設計表時(shí)對表結構的正則化來(lái)統一和限制時(shí)間戳和命名,但在實(shí)際工作中,這種情況基本不可能做到我相信很多讀者都會(huì )遇到這種情況。
可能很多做數據采集的同學(xué)會(huì )想,能不能請他們制定標準?
我個(gè)人的看法是,是的,但大數據的底層數據采集并不是完全依賴(lài)于這種相互開(kāi)發(fā)的標準。原因有以下三個(gè):
因此,如果要使用唯一的固定時(shí)間序列,必須與業(yè)務(wù)數據分離,并且我們想要的時(shí)間戳不受業(yè)務(wù)數據變化的影響。
原則二
在業(yè)務(wù)數據庫中,必然存在表結構變化的問(wèn)題。大多數情況下是添加列,但也有列重命名、列刪除等情況,字段變化的順序不可控。
這個(gè)原則想描述的是,導入數據倉庫的表必須適應數據庫表的各種操作,以保持其可用性和列數據的正確性。
原則三
這個(gè)數據可以追溯,包括兩個(gè)方面
第一個(gè)描述是在采集binlog采集端,可以再次按下位置采集binlog。
第二個(gè)描述是消費binlog登陸結束時(shí),可以通過(guò)重復消費來(lái)重新登陸數據。
這是作者的個(gè)人總結,無(wú)論選擇什么樣的技術(shù)選擇進(jìn)行組合施工,都需要具備這些原則。
實(shí)施方案及具體操作
技術(shù)架構:Debezium + Confluent + Kafka + OSS/S3 + Hive
基于原理一的解決方案
Debezium 提供了 New Record State Extraction 的配置選項,相當于提供了一個(gè)轉換算子來(lái)提取 binlog 中的元數據。
對于0.10版本的配置,可以提取表、版本、連接器、名稱(chēng)、ts_ms、db、server_id、file、pos、row等binlog元數據信息。
其中ts_ms是binlog日志的生成時(shí)間,這個(gè)是binlog元數據,可以應用到所有數據表,這個(gè)固定的時(shí)間戳可以在不完全了解數據表內部結構的情況下,完全實(shí)現我們的原理一。
關(guān)于Debezium,不同版本之前的配置參數可能不同。讀者如果需要練習,需要在官方文檔中確認對應版本的配置參數。
對于其他框架,比如市面上比較常用的Canal,或者讀者需要自己開(kāi)發(fā)數據采集程序,建議提取binlog元數據,在這個(gè)過(guò)程中可能會(huì )用到,后續流程。到達。
基于原理2的解決方案
對于Hive,目前主流的數據存儲格式有Parquet、ORC、Json、Avro。
暫且不談數據存儲效率的討論。
對于前兩種數據格式,是列存儲。也就是說(shuō),這兩種數據格式的數據讀取將嚴格依賴(lài)于我們數據表中數據的存儲順序。這種數據格式不能滿(mǎn)足數據列的靈活性。添加、刪除等操作。
Avro 格式是行存儲,但需要依賴(lài) Schema Register 服務(wù)??紤]到Hive的數據表讀取完全依賴(lài)于外部服務(wù),風(fēng)險太大。
最后決定使用Json格式進(jìn)行數據存儲。這種讀取和存儲效率雖然沒(méi)有其他格式高,但是可以保證業(yè)務(wù)數據的任何變化都可以在hive中讀取。
Debezium組件采集binlog的數據為json格式,符合預期的設計方案,可以解決原理2帶來(lái)的問(wèn)題。
對于其他框架,比如市面上比較常用的Canal,可以設置成Json數據格式進(jìn)行傳輸,或者讀者如果需要自己開(kāi)發(fā)數據采集程序,同樣的道理是真的。
基于原理三的解決方案
在采集binlog采集端,可以再次按下位置采集binlog。
官方 Debezium 網(wǎng)站 上也提供了該方案的實(shí)現。需要一般說(shuō)明。需要Kafkacat工具。
對于采集的每個(gè)mysql實(shí)例,在創(chuàng )建數據采集任務(wù)時(shí),Confluent都會(huì )創(chuàng )建連接器的采集元數據的主題(即采集程序) 因此,
對應的時(shí)間戳、文件位置和位置都會(huì )存儲在里面。您可以通過(guò)修改此數據來(lái)重置 采集binlog 日志的位置。
值得注意的是,這個(gè)操作的時(shí)間節點(diǎn)也是有限制的,這和mysql的binlog日志的存儲周期有關(guān),所以用這種方式回溯的時(shí)候,需要確認mysql日志還存在。
將數據放回地面以供重復使用。
因為這個(gè)方案是基于Kafka的,所以網(wǎng)上有很多Kafka重新設計消費抵消消費站點(diǎn)的方案,這里不再贅述。
供讀者自行實(shí)現,需要確認的選定MQ支持此功能。
#how_to_change_the_offsets_of_the_source_database
業(yè)務(wù)場(chǎng)景影響下的重要操作
本部分僅描述如何在作者的技術(shù)架構下實(shí)現以下操作。讀者可以根據他們選擇的技術(shù)組件探索不同的技術(shù)解決方案。
數據庫分庫分表情況
基于Debezium的架構,一個(gè)Source只能對應一個(gè)采集的mysql實(shí)例。對于同一個(gè)實(shí)例上的表拆分,您可以使用 Debezium Topic Routing 功能。
通過(guò)采集過(guò)濾binlog時(shí),將需要采集的表按照正則匹配寫(xiě)入指定topic。
在子庫的情況下,還需要在sink端添加RegexRouter變換算子,進(jìn)行topic之間的合并和寫(xiě)入操作。
數據增量采集和全量采集
對于采集組件,當前的配置是基于增量為默認的,所以無(wú)論選擇Debezium還是Canal,正常配置都可以。
但是,在某些情況下,會(huì )出現需要采集 的整個(gè)表的情況。作者還給出了全量數據的方案采集。
選項一
Debezium本身自帶這樣的功能,你需要
將snapshot.mode參數選擇設置為when_needed,這樣就可以做全表的采集操作。
在官方文檔中,這里的參數配置有更詳細的說(shuō)明。
#快照
選項二
同時(shí)使用sqoop和增量采集。
該方案適用于已經(jīng)有很多表數據,但當前binlog數據頻率不高的情況,使用該方案。
值得注意的是,有兩點(diǎn):
脫機重復數據刪除條件
數據落地后,通過(guò)json表映射出binlog原創(chuàng )數據,那么問(wèn)題來(lái)了,我們如何找到最新的那條數據呢?
或許我們可以簡(jiǎn)單的想,用剛才提取的ts_ms,然后再做反演,是不是就可以了?
在大多數情況下,這確實(shí)是可能的。
但是在實(shí)際開(kāi)發(fā)中,筆者發(fā)現這樣的情況并不能滿(mǎn)足所有的情況,因為在binlog中,可能有兩個(gè)數據和ts_ms和PK一樣,但是確實(shí)不同。
那么我們如何同時(shí)解析兩條數據呢?
答案就在上面,我們只是建議提取所有 binlog 元數據。
SELECT *
FROM
(
SELECT *,
row_number() over(partition BY t.id ORDER BY t.`__ts_ms` DESC,t.`__file` DESC,cast(t.`__pos` AS int) DESC) AS order_by
FROM test t
WHERE dt='{pt}'
AND hour='{now_hour}'
) t1
WHERE t1.order_by = 1
解釋一下這個(gè)sql中row_number的條件
__ts_ms:binlog中的ts_ms,即事件時(shí)間。
__file:是binlog數據的文件名。
__pos:是binlog中數據所在文件在文件中的位置,為數據類(lèi)型。
這樣組合條件取出的數據是最新的。
有讀者可能會(huì )問(wèn),如果這條數據被刪除了怎么辦?你這樣檢索出來(lái)的數據是不是錯了?
這個(gè)Debezium也有相應的操作,有相應的配置選項讓你選擇如何處理刪除行為的binlog數據。
作為給大家參考,作者選擇了rewrite的參數配置,這樣上面的sql最外層只需要判斷“delete='false'”是正確的數據即可。
架構總結
在技??術(shù)選擇和整體細節結構上,作者始終堅持一個(gè)原則——
過(guò)程應該盡可能簡(jiǎn)單,而不是越簡(jiǎn)單越好。數據鏈路越長(cháng),可能出現的問(wèn)題鏈路就越多。后期的鎖死問(wèn)題和運維也會(huì )很困難。
所以筆者在技術(shù)選型上考慮了Flink+Kafka的方式,但是基于當時(shí)的情況,筆者并沒(méi)有選擇這樣的技術(shù)選型,筆者也詳細闡述了原因。
綜上所述,我當時(shí)就想到了 Flink。如果Flink不是基于平臺的開(kāi)發(fā)和運維監控,可以作為臨時(shí)解決方案,但如果后期在這樣的開(kāi)發(fā)過(guò)程下縫補了,就要多人開(kāi)發(fā)。很容易出問(wèn)題,或者大家都在這樣的程序框架下造輪子,造的越多越慢。而且后期的主要項目方向并沒(méi)有把Flink平臺化提上日程,所以也是考慮到了部分未來(lái)情況的選擇。
所以當我最終決定技術(shù)選擇的時(shí)候,我并沒(méi)有選擇 Flink。
結束語(yǔ)
這篇文章文章比較理論,也是對這個(gè)場(chǎng)景的技術(shù)理論總結。如果文章中還有其他不清楚的操作,可以參考作者之前的文章詳細代碼級操作。
技術(shù)架構方案有很多種。我只是選擇了其中之一來(lái)實(shí)施。也希望大家有其他的技術(shù)方案或理論進(jìn)行交流。請糾正我。
文章實(shí)時(shí)采集(文章實(shí)時(shí)采集如何上架文章嗎?知道如何批量采集?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 130 次瀏覽 ? 2021-11-29 09:05
文章實(shí)時(shí)采集現在在自媒體界,提起采集,已經(jīng)是老生常談的工作了,不管是標題黨,還是軟文廣告,無(wú)論是視頻,還是音頻,以及文字內容,都有許多公眾號發(fā)出來(lái)。包括頭條號,企鵝號,大魚(yú)號,網(wǎng)易號,都會(huì )發(fā)出來(lái),我們只要順手采集,發(fā)到自己的公眾號即可。于是有很多的文章標題黨都寫(xiě)采集標題軟文,聲稱(chēng)自己抓取熱點(diǎn),加引流到自己的號上。
有的直接是文章里的內容轉發(fā)上去,還有的采集教程或者采集資源,在某個(gè)微信群里分享,變成了教程。這些是極少數,還是得非常小心,看你采集的信息有沒(méi)有一些敏感性,你了解清楚對方是個(gè)什么目的不,你采集的內容有沒(méi)有違規的成分,是不是非法,是不是詐騙。今天就給大家分享,采集一些開(kāi)放平臺,如:今日頭條,微信公眾號,還有新浪博客上面的內容,可以進(jìn)行批量采集。
知道如何上架文章嗎?1,自己上架一個(gè)公眾號的內容,并且內容排版標題一致,在微信公眾號寫(xiě)好原創(chuàng ),然后在文章配圖點(diǎn)一下重點(diǎn)就ok了。2,找到可采集的信息,如:頭條,微博,等。并導入到你的公眾號和開(kāi)放平臺的文章中去。把配圖刪除掉,可以去除任何連接。3,把鏈接去掉。如果文章連接刪掉,這樣可以批量采集,批量改內容名稱(chēng),發(fā)布即可。
4,發(fā)布的時(shí)候如何不讓你的粉絲看到,因為這些內容是被不法分子注冊過(guò)的,可以發(fā)布的時(shí)候,編寫(xiě)一個(gè)聲明,該內容不允許任何人閱讀。這樣其他人就可以轉發(fā)。無(wú)非就是利用讀者信任問(wèn)題。你不能保證文章全部沒(méi)有問(wèn)題,因為已經(jīng)注冊過(guò)的內容,肯定有內容,本身已經(jīng)違規,一樣要看違規程度。你自己加工的文章,不能保證一定是對的,如果有,你可以提交給國家版權局去測試。
5,只要你是個(gè)好人,開(kāi)放平臺支持你的采集,如果你的文章質(zhì)量比較差,文章數量還比較多,甚至可以建群,每天批量采集,我們發(fā)布的文章是可以提供免費清洗服務(wù)的。如何進(jìn)行檢測呢?你可以注冊一個(gè)公眾號,然后新建賬號,你可以用自己的身份證賬號進(jìn)行驗證,驗證通過(guò)后,只需要輸入進(jìn)去,就可以注冊一個(gè)文章采集鏈接。也可以一個(gè)新號,進(jìn)去后臺,通過(guò)后臺的黃色按鈕,第一次登錄后臺,輸入你的身份證賬號和密碼,獲取個(gè)人信息,通過(guò)后可以給你正常檢測的鏈接。
然后是登錄你的賬號,這個(gè)時(shí)候才可以正常檢測的。我一般推薦用第一個(gè)方法,第二個(gè)不推薦。就是因為這個(gè),并不是每個(gè)人都可以注冊新號去驗證,可能會(huì )導致你的帳號注冊比較困難。所以如果你用開(kāi)放平臺已經(jīng)上傳你的資料后,注冊平臺會(huì )給你賬號,只要你用自己的賬號登錄,然后在你的資料里看有沒(méi)有聯(lián)系方式,如果有的話(huà),就說(shuō)明你。 查看全部
文章實(shí)時(shí)采集(文章實(shí)時(shí)采集如何上架文章嗎?知道如何批量采集?)
文章實(shí)時(shí)采集現在在自媒體界,提起采集,已經(jīng)是老生常談的工作了,不管是標題黨,還是軟文廣告,無(wú)論是視頻,還是音頻,以及文字內容,都有許多公眾號發(fā)出來(lái)。包括頭條號,企鵝號,大魚(yú)號,網(wǎng)易號,都會(huì )發(fā)出來(lái),我們只要順手采集,發(fā)到自己的公眾號即可。于是有很多的文章標題黨都寫(xiě)采集標題軟文,聲稱(chēng)自己抓取熱點(diǎn),加引流到自己的號上。
有的直接是文章里的內容轉發(fā)上去,還有的采集教程或者采集資源,在某個(gè)微信群里分享,變成了教程。這些是極少數,還是得非常小心,看你采集的信息有沒(méi)有一些敏感性,你了解清楚對方是個(gè)什么目的不,你采集的內容有沒(méi)有違規的成分,是不是非法,是不是詐騙。今天就給大家分享,采集一些開(kāi)放平臺,如:今日頭條,微信公眾號,還有新浪博客上面的內容,可以進(jìn)行批量采集。
知道如何上架文章嗎?1,自己上架一個(gè)公眾號的內容,并且內容排版標題一致,在微信公眾號寫(xiě)好原創(chuàng ),然后在文章配圖點(diǎn)一下重點(diǎn)就ok了。2,找到可采集的信息,如:頭條,微博,等。并導入到你的公眾號和開(kāi)放平臺的文章中去。把配圖刪除掉,可以去除任何連接。3,把鏈接去掉。如果文章連接刪掉,這樣可以批量采集,批量改內容名稱(chēng),發(fā)布即可。
4,發(fā)布的時(shí)候如何不讓你的粉絲看到,因為這些內容是被不法分子注冊過(guò)的,可以發(fā)布的時(shí)候,編寫(xiě)一個(gè)聲明,該內容不允許任何人閱讀。這樣其他人就可以轉發(fā)。無(wú)非就是利用讀者信任問(wèn)題。你不能保證文章全部沒(méi)有問(wèn)題,因為已經(jīng)注冊過(guò)的內容,肯定有內容,本身已經(jīng)違規,一樣要看違規程度。你自己加工的文章,不能保證一定是對的,如果有,你可以提交給國家版權局去測試。
5,只要你是個(gè)好人,開(kāi)放平臺支持你的采集,如果你的文章質(zhì)量比較差,文章數量還比較多,甚至可以建群,每天批量采集,我們發(fā)布的文章是可以提供免費清洗服務(wù)的。如何進(jìn)行檢測呢?你可以注冊一個(gè)公眾號,然后新建賬號,你可以用自己的身份證賬號進(jìn)行驗證,驗證通過(guò)后,只需要輸入進(jìn)去,就可以注冊一個(gè)文章采集鏈接。也可以一個(gè)新號,進(jìn)去后臺,通過(guò)后臺的黃色按鈕,第一次登錄后臺,輸入你的身份證賬號和密碼,獲取個(gè)人信息,通過(guò)后可以給你正常檢測的鏈接。
然后是登錄你的賬號,這個(gè)時(shí)候才可以正常檢測的。我一般推薦用第一個(gè)方法,第二個(gè)不推薦。就是因為這個(gè),并不是每個(gè)人都可以注冊新號去驗證,可能會(huì )導致你的帳號注冊比較困難。所以如果你用開(kāi)放平臺已經(jīng)上傳你的資料后,注冊平臺會(huì )給你賬號,只要你用自己的賬號登錄,然后在你的資料里看有沒(méi)有聯(lián)系方式,如果有的話(huà),就說(shuō)明你。
文章實(shí)時(shí)采集( 147SEO2021-11-25關(guān)于CMS采集插件,小編有話(huà)說(shuō)! )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 181 次瀏覽 ? 2021-11-26 11:00
147SEO2021-11-25關(guān)于CMS采集插件,小編有話(huà)說(shuō)!
)
關(guān)于采集插件,小編有話(huà)要說(shuō)!采集 文章的作用是什么
147SEO2021-11-25
<p>關(guān)于cms采集插件,小編有話(huà)要說(shuō)!很多采集插件都是為某個(gè)cms制作的,對于多個(gè)cms網(wǎng)站的SEO站長(cháng)來(lái)說(shuō)非常不方便。大多數SEO站長(cháng)使用市場(chǎng)上常見(jiàn)的cms來(lái)制作網(wǎng)站。我在網(wǎng)上看到了一些關(guān)于cms的采集插件。很多都是需要付費的,或者采集功能單一,不注重功能??赡苓€有很多站長(cháng)不知道采集插件是什么,采集插件的作用是什么。cms采集插件可以作為采集器到采集網(wǎng)站需要文章,可以節省制作 查看全部
文章實(shí)時(shí)采集(
147SEO2021-11-25關(guān)于CMS采集插件,小編有話(huà)說(shuō)!
)
關(guān)于采集插件,小編有話(huà)要說(shuō)!采集 文章的作用是什么

147SEO2021-11-25
<p>關(guān)于cms采集插件,小編有話(huà)要說(shuō)!很多采集插件都是為某個(gè)cms制作的,對于多個(gè)cms網(wǎng)站的SEO站長(cháng)來(lái)說(shuō)非常不方便。大多數SEO站長(cháng)使用市場(chǎng)上常見(jiàn)的cms來(lái)制作網(wǎng)站。我在網(wǎng)上看到了一些關(guān)于cms的采集插件。很多都是需要付費的,或者采集功能單一,不注重功能??赡苓€有很多站長(cháng)不知道采集插件是什么,采集插件的作用是什么。cms采集插件可以作為采集器到采集網(wǎng)站需要文章,可以節省制作
文章實(shí)時(shí)采集(就是數據更新日志的獲取,就是debezium插件模式詳解(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 299 次瀏覽 ? 2021-11-23 17:23
一、前言
隨著(zhù)業(yè)務(wù)的發(fā)展,之前的離線(xiàn)批量計算方式,延遲時(shí)間長(cháng),無(wú)法滿(mǎn)足需求。隨著(zhù)flink等實(shí)時(shí)計算工具的出現,實(shí)時(shí)采集也成為大數據工作中非常重要的一部分。.
如今企業(yè)的數據來(lái)源大致分為兩類(lèi):存儲在各種關(guān)系數據庫中的業(yè)務(wù)數據,網(wǎng)站或APP生成的用戶(hù)行為日志數據
日志數據已經(jīng)可以通過(guò)flume、kafka等工具實(shí)現實(shí)時(shí),但是關(guān)系型數據庫的同步還是基于批處理。
當關(guān)系型數據庫的表數據達到一定程度時(shí),批量同步時(shí)間過(guò)長(cháng),增量同步無(wú)法解決實(shí)時(shí)性要求
mysql可以通過(guò)binlog進(jìn)行實(shí)時(shí)同步,技術(shù)比較成熟,但是不能解決SQLserver、Oracle、postgresql等數據庫的問(wèn)題。
即使有kafka這樣的流數據分發(fā)訂閱平臺,flink這樣的實(shí)時(shí)計算平臺,redis這樣的高效讀寫(xiě)數據庫,如果實(shí)時(shí)采集問(wèn)題無(wú)法解決,那么就無(wú)法實(shí)現完整的實(shí)時(shí)鏈接。
好在國外有一個(gè)開(kāi)源工具,可以實(shí)現對市面上各種常用數據庫的數據更新日志的獲取。它是 debezium。
插件模式
二、簡(jiǎn)介
Debezium 是一組分布式服務(wù),用于捕獲數據庫中的更改,以便您的應用程序可以查看這些更改并對其做出響應。Debezium 在更改事件流中記錄每個(gè)數據庫表中的所有行級更改。應用程序只需要讀取這些流就可以按照更改事件發(fā)生的順序查看更改事件。
Debezium有兩種運行方式,一種在kafka connect中作為插件繼承,另一種作為獨立服務(wù)運行(孵化)
服務(wù)器模式
今天我們要介紹的是插件模式。
三、部署
插件模式首先要求集群上已經(jīng)安裝了zookeeper和kafka。Kafka 可以連接到上游數據庫。這里我使用flink消費kafka中的日志,并實(shí)時(shí)寫(xiě)入mysql。
所以還需要部署flink集群和mysql數據庫
以上都具備后,就可以開(kāi)始部署debezium了
1.下載安裝包
#以mysql為例,下載debezium-connector-mysql-1.4.2.Final-plugin.tar.gz
wget https://repo1.maven.org/maven2 ... ar.gz
在kafka安裝文件夾中創(chuàng )建connectors文件夾,將下載的debezium插件解壓到connectors
2.創(chuàng )建話(huà)題
創(chuàng )建 kafka connect 需要的三個(gè)主題:connect-offsets、connect-configs、connect-status
3.編寫(xiě)kafka連接配置文件
創(chuàng )建 connect-distributed.properties 并分發(fā)到所有節點(diǎn)
#kafka-connect配置文件
# kafka集群地址
bootstrap.servers=ip1:9092,ip2:9092,ip3:9092
# Connector集群的名稱(chēng),同一集群內的Connector需要保持此group.id一致
group.id=connect-cluster
# 存儲到kafka的數據格式
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false
value.converter.schemas.enable=false
# 內部轉換器的格式,針對offsets、config和status,一般不需要修改
internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false
# 用于保存offsets的topic,應該有多個(gè)partitions,并且擁有副本(replication)
# Kafka Connect會(huì )自動(dòng)創(chuàng )建這個(gè)topic,但是你可以根據需要自行創(chuàng )建
offset.storage.topic=connect-offsets
offset.storage.replication.factor=2
offset.storage.partitions=3
# 保存connector和task的配置,應該只有1個(gè)partition,并且有多個(gè)副本
config.storage.topic=connect-configs
config.storage.replication.factor=2
# 用于保存狀態(tài),可以擁有多個(gè)partition和replication
status.storage.topic=connect-status
status.storage.replication.factor=2
status.storage.partitions=3
# Flush much faster than normal, which is useful for testing/debugging
offset.flush.interval.ms=10000
# RESET主機名,默認為本機
#rest.host.name=
# REST端口號
rest.port=18083
# The Hostname & Port that will be given out to other workers to connect to i.e. URLs that are routable from other servers.
#rest.advertised.host.name=
#rest.advertised.port=
# 保存connectors的路徑
#plugin.path=/usr/local/share/java,/usr/local/share/kafka/plugins,/opt/connectors,
plugin.path=/opt/cloudera/parcels/CDH/lib/kafka/connectors
4.啟動(dòng)kafka-connect
注意:必須執行所有節點(diǎn)
cd /opt/cloudera/parcels/CDH/lib/kafka
bin/connect-distributed.sh -daemon config/connect-distributed.properties
###jps 可看到 ConnectDistributed 進(jìn)程
5.通過(guò)POST URL提交連接請求
多個(gè)表名用逗號分隔,格式為db.table,參數中指定的topic為元數據topic,真正的topic名由server_name.db_name.table_name組成
POST:http://ip:18083/connectors
Headers:Content-Type: application/json
Body:{
"name" : "debezium-mysql",
"config":{
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"database.hostname": "host",
"database.port": "3306",
"database.user": "username",
"database.password": "password",
"database.server.id" :"1739",
"database.server.name": "mysql",
"database.history.kafka.bootstrap.servers": "ip1:9092,ip2:9092,ip3:9092",
"database.history.kafka.topic": "mysql.test",
"database.whitelist": "test",
"table.whitelist":"test.test_table2",
"include.schema.changes" : "true" ,
"mode" : "incrementing",
"incrementing.column.name" : "id",
"database.history.skip.unparseable.ddl" : "true"
}
}
提交完成后,使用GET:18083/connectors獲取連接器信息
由于debezium沒(méi)有構建topic的邏輯,所以Kafka需要開(kāi)啟自動(dòng)生成topic的配置
檢查kafka是否生成了對應的topic,上位源表的內容,如果topic中有對應的change log記錄,則任務(wù)配置成功
有很多方法可以消費來(lái)自 Kafka 的數據。 查看全部
文章實(shí)時(shí)采集(就是數據更新日志的獲取,就是debezium插件模式詳解(組圖))
一、前言
隨著(zhù)業(yè)務(wù)的發(fā)展,之前的離線(xiàn)批量計算方式,延遲時(shí)間長(cháng),無(wú)法滿(mǎn)足需求。隨著(zhù)flink等實(shí)時(shí)計算工具的出現,實(shí)時(shí)采集也成為大數據工作中非常重要的一部分。.
如今企業(yè)的數據來(lái)源大致分為兩類(lèi):存儲在各種關(guān)系數據庫中的業(yè)務(wù)數據,網(wǎng)站或APP生成的用戶(hù)行為日志數據
日志數據已經(jīng)可以通過(guò)flume、kafka等工具實(shí)現實(shí)時(shí),但是關(guān)系型數據庫的同步還是基于批處理。
當關(guān)系型數據庫的表數據達到一定程度時(shí),批量同步時(shí)間過(guò)長(cháng),增量同步無(wú)法解決實(shí)時(shí)性要求
mysql可以通過(guò)binlog進(jìn)行實(shí)時(shí)同步,技術(shù)比較成熟,但是不能解決SQLserver、Oracle、postgresql等數據庫的問(wèn)題。
即使有kafka這樣的流數據分發(fā)訂閱平臺,flink這樣的實(shí)時(shí)計算平臺,redis這樣的高效讀寫(xiě)數據庫,如果實(shí)時(shí)采集問(wèn)題無(wú)法解決,那么就無(wú)法實(shí)現完整的實(shí)時(shí)鏈接。
好在國外有一個(gè)開(kāi)源工具,可以實(shí)現對市面上各種常用數據庫的數據更新日志的獲取。它是 debezium。

插件模式
二、簡(jiǎn)介
Debezium 是一組分布式服務(wù),用于捕獲數據庫中的更改,以便您的應用程序可以查看這些更改并對其做出響應。Debezium 在更改事件流中記錄每個(gè)數據庫表中的所有行級更改。應用程序只需要讀取這些流就可以按照更改事件發(fā)生的順序查看更改事件。
Debezium有兩種運行方式,一種在kafka connect中作為插件繼承,另一種作為獨立服務(wù)運行(孵化)

服務(wù)器模式
今天我們要介紹的是插件模式。
三、部署
插件模式首先要求集群上已經(jīng)安裝了zookeeper和kafka。Kafka 可以連接到上游數據庫。這里我使用flink消費kafka中的日志,并實(shí)時(shí)寫(xiě)入mysql。
所以還需要部署flink集群和mysql數據庫
以上都具備后,就可以開(kāi)始部署debezium了
1.下載安裝包
#以mysql為例,下載debezium-connector-mysql-1.4.2.Final-plugin.tar.gz
wget https://repo1.maven.org/maven2 ... ar.gz
在kafka安裝文件夾中創(chuàng )建connectors文件夾,將下載的debezium插件解壓到connectors
2.創(chuàng )建話(huà)題
創(chuàng )建 kafka connect 需要的三個(gè)主題:connect-offsets、connect-configs、connect-status
3.編寫(xiě)kafka連接配置文件
創(chuàng )建 connect-distributed.properties 并分發(fā)到所有節點(diǎn)
#kafka-connect配置文件
# kafka集群地址
bootstrap.servers=ip1:9092,ip2:9092,ip3:9092
# Connector集群的名稱(chēng),同一集群內的Connector需要保持此group.id一致
group.id=connect-cluster
# 存儲到kafka的數據格式
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false
value.converter.schemas.enable=false
# 內部轉換器的格式,針對offsets、config和status,一般不需要修改
internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false
# 用于保存offsets的topic,應該有多個(gè)partitions,并且擁有副本(replication)
# Kafka Connect會(huì )自動(dòng)創(chuàng )建這個(gè)topic,但是你可以根據需要自行創(chuàng )建
offset.storage.topic=connect-offsets
offset.storage.replication.factor=2
offset.storage.partitions=3
# 保存connector和task的配置,應該只有1個(gè)partition,并且有多個(gè)副本
config.storage.topic=connect-configs
config.storage.replication.factor=2
# 用于保存狀態(tài),可以擁有多個(gè)partition和replication
status.storage.topic=connect-status
status.storage.replication.factor=2
status.storage.partitions=3
# Flush much faster than normal, which is useful for testing/debugging
offset.flush.interval.ms=10000
# RESET主機名,默認為本機
#rest.host.name=
# REST端口號
rest.port=18083
# The Hostname & Port that will be given out to other workers to connect to i.e. URLs that are routable from other servers.
#rest.advertised.host.name=
#rest.advertised.port=
# 保存connectors的路徑
#plugin.path=/usr/local/share/java,/usr/local/share/kafka/plugins,/opt/connectors,
plugin.path=/opt/cloudera/parcels/CDH/lib/kafka/connectors
4.啟動(dòng)kafka-connect
注意:必須執行所有節點(diǎn)
cd /opt/cloudera/parcels/CDH/lib/kafka
bin/connect-distributed.sh -daemon config/connect-distributed.properties
###jps 可看到 ConnectDistributed 進(jìn)程
5.通過(guò)POST URL提交連接請求
多個(gè)表名用逗號分隔,格式為db.table,參數中指定的topic為元數據topic,真正的topic名由server_name.db_name.table_name組成
POST:http://ip:18083/connectors
Headers:Content-Type: application/json
Body:{
"name" : "debezium-mysql",
"config":{
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"database.hostname": "host",
"database.port": "3306",
"database.user": "username",
"database.password": "password",
"database.server.id" :"1739",
"database.server.name": "mysql",
"database.history.kafka.bootstrap.servers": "ip1:9092,ip2:9092,ip3:9092",
"database.history.kafka.topic": "mysql.test",
"database.whitelist": "test",
"table.whitelist":"test.test_table2",
"include.schema.changes" : "true" ,
"mode" : "incrementing",
"incrementing.column.name" : "id",
"database.history.skip.unparseable.ddl" : "true"
}
}
提交完成后,使用GET:18083/connectors獲取連接器信息
由于debezium沒(méi)有構建topic的邏輯,所以Kafka需要開(kāi)啟自動(dòng)生成topic的配置
檢查kafka是否生成了對應的topic,上位源表的內容,如果topic中有對應的change log記錄,則任務(wù)配置成功
有很多方法可以消費來(lái)自 Kafka 的數據。
文章實(shí)時(shí)采集(數據技術(shù)篇——實(shí)時(shí)技術(shù)5.1簡(jiǎn)介流計算(下))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 194 次瀏覽 ? 2021-11-21 07:08
五、數據技術(shù)篇-實(shí)時(shí)技術(shù)
5.1 簡(jiǎn)介
流計算,業(yè)務(wù)希望第一時(shí)間拿到處理后的數據,實(shí)時(shí)監控狀態(tài),做出運營(yíng)決策,引導業(yè)務(wù)往好的方向發(fā)展。
特征:
效率高,延遲可達到毫秒級常駐任務(wù)。流式任務(wù)數據屬于常駐進(jìn)程任務(wù),啟動(dòng)后會(huì )一直運行(數據源無(wú)界)。高性能要求,高吞吐低時(shí)延,性能有待優(yōu)化 應用限制,無(wú)法替代離線(xiàn)處理(計算成本高),數據是流式處理,在context上下文中,到達時(shí)間的不確定性導致一定的實(shí)時(shí)和離線(xiàn)處理結果的區別
根據數據的時(shí)延,有3種時(shí)效
5.2 流技術(shù)架構@
5.2.1 個(gè)數據采集
數據從日志服務(wù)器采集到數據中間件供下游實(shí)時(shí)訂閱使用
及時(shí)性和吞吐量是數據處理的矛盾
數據類(lèi)型采集:
如何對數據執行采集(按批次):
消息系統是數據庫變更節點(diǎn)的上游,特點(diǎn)是:低延遲和有限的吞吐量。有些業(yè)務(wù)不通過(guò)消息系統更新數據庫,所以從消息系統獲取的數據是不完整的,但是從數據庫變更日志中獲取的數據必須是完整的。
5.2.2 數據處理
提供流計算引擎,將其拉入流計算系統的任務(wù)中進(jìn)行處理。實(shí)時(shí)應用的拓撲結構是一個(gè)有向無(wú)環(huán)圖
任務(wù)計算往往是多線(xiàn)程的,會(huì )根據業(yè)務(wù)主鍵分桶處理,數據在內存中(需要定時(shí)處理,可以根據LRU清理)。封裝了一層SQL語(yǔ)義,降低了門(mén)檻。以下是一些經(jīng)典問(wèn)題:
1. 去重指標:
在計算重復數據刪除時(shí),必須保存重復數據刪除的詳細數據,這會(huì )導致內存消耗過(guò)多。這里有兩種情況:
精確去重,明細數據必須保存,可以通過(guò)數據傾斜來(lái)處理,一個(gè)節點(diǎn)的壓力分到多個(gè)節點(diǎn)上。
模糊去重,精度要求不高的情況,相關(guān)算法去重。
去重算法:
布隆過(guò)濾器。位數組算法的應用不保存實(shí)際的明細數據,只保存明細數據對應的哈希表的標記位。適用于:統計維度值較多的情況,如全網(wǎng)各種業(yè)務(wù)的UV數據統計??梢栽诟鱾€(gè)維度之間共享?;A估計。Hash 還用于根據數據分散程度估計現有數據集的邊界,從而獲得近似的總去重值。適用于:統計維度值很厚的情況,比如整個(gè)市場(chǎng)的UV數據。它不能在各個(gè)維度之間共享。
2. 數據傾斜:
當單個(gè)節點(diǎn)的數據量比較大時(shí),就會(huì )遇到性能瓶頸。數據需要分桶。
重復數據刪除指標分為桶。通過(guò)對bucket中的去重值進(jìn)行hash,將相同的值放到同一個(gè)bucket中進(jìn)行去重,然后將每個(gè)bucket中的值相加。利用 CPU 和內存資源按非重復數據刪除指標劃分桶。隨機分配到每個(gè)bucket,每個(gè)bucket匯總,使用每個(gè)bucket的CPU容量
3. 交易處理:
實(shí)時(shí)計算中的分布式處理,系統不穩定,如何實(shí)現精確的數據處理
5.2.3 數據存儲
數據實(shí)時(shí)處理(聚合、清洗)并寫(xiě)入在線(xiàn)存儲系統。寫(xiě)操作為增量操作,源源不斷
存儲的三種類(lèi)型的數據:
實(shí)時(shí)任務(wù)使用的數據庫特點(diǎn):
表名設計:匯總層標識+數據字段+主維度+時(shí)間維度(主維度相同的所有數據在一張物理表中)
rowkey設計:MD5+主維度+維度標識+子維度1+時(shí)間維度+子維度2(MD5對數據進(jìn)行hash,平衡服務(wù)器負載)
5.2.4 數據服務(wù)
設置統一的數據服務(wù)層獲取結果
優(yōu)勢:
5.3 流式數據模型5.3.1 數據分層
ODS層
屬于運營(yíng)數據層,業(yè)務(wù)系統直接返回的最原創(chuàng )數據采集,粒度最細。實(shí)時(shí)和離線(xiàn)在源頭統一(好處:同一條數據處理的指標口徑基本一致,便于比較)。如:原創(chuàng )訂單變更記錄數據,訂單強度變化過(guò)程,一個(gè)訂單有多條記錄。
DWD層
根據業(yè)務(wù)流程中建模的實(shí)時(shí)事實(shí)細節,將沒(méi)有上下文的記錄返回離線(xiàn)系統,最大程度保證ODS和DWD層實(shí)時(shí)離線(xiàn)的一致性。如:訂單的付款時(shí)間表,用戶(hù)訪(fǎng)問(wèn)日志時(shí)間表。訂單強度支付記錄,一個(gè)訂單只有一條記錄。
DWS層
計算各個(gè)維度的匯總指標。如果維度對所有垂直業(yè)務(wù)線(xiàn)通用,則將其放置在實(shí)時(shí)通用匯總層中。比如一個(gè)電商數據(賣(mài)家實(shí)力)幾個(gè)維度的匯總表。賣(mài)家的實(shí)時(shí)交易金額,每個(gè)賣(mài)家一個(gè)記錄。
ADS層
對于不同的統計維度值數據,我們的銷(xiāo)售人員會(huì )關(guān)注它。外賣(mài)區實(shí)時(shí)交易金額
DIM層
基本來(lái)源于離線(xiàn)維度表層(ODS離線(xiàn)處理),提取到實(shí)時(shí)應用。如產(chǎn)品維度表、賣(mài)家維度表等。 訂單項目類(lèi)別與行業(yè)對應表。
5.3.2 多碼流關(guān)聯(lián)
在流計算中,需要將兩個(gè)實(shí)時(shí)流與主鍵關(guān)聯(lián)起來(lái),才能得到對應的表。
關(guān)鍵點(diǎn):需要互相等待,雙方到達后才能成功關(guān)聯(lián)。
難點(diǎn):數據到達是一個(gè)增量過(guò)程,數據到達時(shí)間不確定、無(wú)序,需要涉及中間狀態(tài)的保存和恢復。
當A表和B表實(shí)時(shí)關(guān)聯(lián)ID時(shí),無(wú)法知道表的到達順序。因此,當兩個(gè)數據流中的每個(gè)新數據到達時(shí),都必須在另一個(gè)表中進(jìn)行搜索。如果匹配,則拼接成一條記錄輸出到下游;如果無(wú)法匹配,則需要將其存儲在內存或外部存儲器中,直到表 B 中的記錄也到達。每次都在對方表的當前全量數據中查找??梢愿鶕P(guān)聯(lián)的主鍵在bucket中進(jìn)行處理
5.3.3維表使用@
實(shí)時(shí)計算時(shí),相關(guān)維表會(huì )使用當前實(shí)時(shí)數據(T)關(guān)聯(lián)T-2的維表數據
你為什么這樣做?
數據無(wú)法及時(shí)準備。在零點(diǎn),實(shí)時(shí)數據必須與維表相關(guān)聯(lián),T-1的維表數據不能在零點(diǎn)立即準備好,無(wú)法準確獲取最新的全量數據。所有最新數據=T-1數據+當天變化。當天實(shí)時(shí)數據無(wú)序,時(shí)間不確定。數據的混亂。比如10點(diǎn)的業(yè)務(wù)數據與維表關(guān)聯(lián)成功,獲取維表的字段信息(只能說(shuō)是獲取到10點(diǎn)的最新?tīng)顟B(tài)數據,而不知道會(huì )不會(huì )變)
有兩種類(lèi)型的維度表
滿(mǎn)載。數據量小,每天上萬(wàn)條記錄,分類(lèi)維表增量加載。無(wú)法全部加載,增量搜索和LRU過(guò)期形式,熱點(diǎn)數據存儲在內存中5.4大推廣挑戰5.4.1大推廣特性毫秒延遲峰值明顯(高吞吐量)保證(需要多鏈路冗余、快速切換、對業(yè)務(wù)方透明)公關(guān)特性(主鍵過(guò)濾、精確去重、統一口徑一) 5.4.2大促保證@
實(shí)時(shí)任務(wù)優(yōu)化
獨占資源和共享資源的策略(一臺機器長(cháng)時(shí)間需要從共享資源池中抓取資源,考慮分配更多的獨占資源)合理選擇緩存機制,減少庫的讀寫(xiě)次數,合并計算單元,并降級拓撲級別。(每個(gè)節點(diǎn)的數據傳輸都必須進(jìn)行序列化和反序列化,在級別深度上性能較差) 內存對象共享,避免字符串復制 高吞吐量和低延遲平均
數據鏈路保證
多鏈路建設、多機房容災、異地容災、鏈路切換推送
壓力測試
數據壓力測量:將實(shí)時(shí)操作的訂閱數據點(diǎn)調整到幾小時(shí)或幾天前,以模擬蓄洪壓力測量。
產(chǎn)品壓測:自壓測試優(yōu)化服務(wù)器性能(所有手機讀取操作的URL,QPS:500次/秒壓測);前端頁(yè)面穩定性測試(8-24小時(shí),提高前端頁(yè)面穩定性) 查看全部
文章實(shí)時(shí)采集(數據技術(shù)篇——實(shí)時(shí)技術(shù)5.1簡(jiǎn)介流計算(下))
五、數據技術(shù)篇-實(shí)時(shí)技術(shù)
5.1 簡(jiǎn)介
流計算,業(yè)務(wù)希望第一時(shí)間拿到處理后的數據,實(shí)時(shí)監控狀態(tài),做出運營(yíng)決策,引導業(yè)務(wù)往好的方向發(fā)展。
特征:
效率高,延遲可達到毫秒級常駐任務(wù)。流式任務(wù)數據屬于常駐進(jìn)程任務(wù),啟動(dòng)后會(huì )一直運行(數據源無(wú)界)。高性能要求,高吞吐低時(shí)延,性能有待優(yōu)化 應用限制,無(wú)法替代離線(xiàn)處理(計算成本高),數據是流式處理,在context上下文中,到達時(shí)間的不確定性導致一定的實(shí)時(shí)和離線(xiàn)處理結果的區別
根據數據的時(shí)延,有3種時(shí)效
5.2 流技術(shù)架構@

5.2.1 個(gè)數據采集
數據從日志服務(wù)器采集到數據中間件供下游實(shí)時(shí)訂閱使用
及時(shí)性和吞吐量是數據處理的矛盾
數據類(lèi)型采集:
如何對數據執行采集(按批次):
消息系統是數據庫變更節點(diǎn)的上游,特點(diǎn)是:低延遲和有限的吞吐量。有些業(yè)務(wù)不通過(guò)消息系統更新數據庫,所以從消息系統獲取的數據是不完整的,但是從數據庫變更日志中獲取的數據必須是完整的。
5.2.2 數據處理
提供流計算引擎,將其拉入流計算系統的任務(wù)中進(jìn)行處理。實(shí)時(shí)應用的拓撲結構是一個(gè)有向無(wú)環(huán)圖
任務(wù)計算往往是多線(xiàn)程的,會(huì )根據業(yè)務(wù)主鍵分桶處理,數據在內存中(需要定時(shí)處理,可以根據LRU清理)。封裝了一層SQL語(yǔ)義,降低了門(mén)檻。以下是一些經(jīng)典問(wèn)題:
1. 去重指標:
在計算重復數據刪除時(shí),必須保存重復數據刪除的詳細數據,這會(huì )導致內存消耗過(guò)多。這里有兩種情況:
精確去重,明細數據必須保存,可以通過(guò)數據傾斜來(lái)處理,一個(gè)節點(diǎn)的壓力分到多個(gè)節點(diǎn)上。
模糊去重,精度要求不高的情況,相關(guān)算法去重。
去重算法:
布隆過(guò)濾器。位數組算法的應用不保存實(shí)際的明細數據,只保存明細數據對應的哈希表的標記位。適用于:統計維度值較多的情況,如全網(wǎng)各種業(yè)務(wù)的UV數據統計??梢栽诟鱾€(gè)維度之間共享?;A估計。Hash 還用于根據數據分散程度估計現有數據集的邊界,從而獲得近似的總去重值。適用于:統計維度值很厚的情況,比如整個(gè)市場(chǎng)的UV數據。它不能在各個(gè)維度之間共享。
2. 數據傾斜:
當單個(gè)節點(diǎn)的數據量比較大時(shí),就會(huì )遇到性能瓶頸。數據需要分桶。
重復數據刪除指標分為桶。通過(guò)對bucket中的去重值進(jìn)行hash,將相同的值放到同一個(gè)bucket中進(jìn)行去重,然后將每個(gè)bucket中的值相加。利用 CPU 和內存資源按非重復數據刪除指標劃分桶。隨機分配到每個(gè)bucket,每個(gè)bucket匯總,使用每個(gè)bucket的CPU容量
3. 交易處理:
實(shí)時(shí)計算中的分布式處理,系統不穩定,如何實(shí)現精確的數據處理
5.2.3 數據存儲
數據實(shí)時(shí)處理(聚合、清洗)并寫(xiě)入在線(xiàn)存儲系統。寫(xiě)操作為增量操作,源源不斷
存儲的三種類(lèi)型的數據:
實(shí)時(shí)任務(wù)使用的數據庫特點(diǎn):
表名設計:匯總層標識+數據字段+主維度+時(shí)間維度(主維度相同的所有數據在一張物理表中)
rowkey設計:MD5+主維度+維度標識+子維度1+時(shí)間維度+子維度2(MD5對數據進(jìn)行hash,平衡服務(wù)器負載)
5.2.4 數據服務(wù)
設置統一的數據服務(wù)層獲取結果
優(yōu)勢:
5.3 流式數據模型5.3.1 數據分層
ODS層
屬于運營(yíng)數據層,業(yè)務(wù)系統直接返回的最原創(chuàng )數據采集,粒度最細。實(shí)時(shí)和離線(xiàn)在源頭統一(好處:同一條數據處理的指標口徑基本一致,便于比較)。如:原創(chuàng )訂單變更記錄數據,訂單強度變化過(guò)程,一個(gè)訂單有多條記錄。
DWD層
根據業(yè)務(wù)流程中建模的實(shí)時(shí)事實(shí)細節,將沒(méi)有上下文的記錄返回離線(xiàn)系統,最大程度保證ODS和DWD層實(shí)時(shí)離線(xiàn)的一致性。如:訂單的付款時(shí)間表,用戶(hù)訪(fǎng)問(wèn)日志時(shí)間表。訂單強度支付記錄,一個(gè)訂單只有一條記錄。
DWS層
計算各個(gè)維度的匯總指標。如果維度對所有垂直業(yè)務(wù)線(xiàn)通用,則將其放置在實(shí)時(shí)通用匯總層中。比如一個(gè)電商數據(賣(mài)家實(shí)力)幾個(gè)維度的匯總表。賣(mài)家的實(shí)時(shí)交易金額,每個(gè)賣(mài)家一個(gè)記錄。
ADS層
對于不同的統計維度值數據,我們的銷(xiāo)售人員會(huì )關(guān)注它。外賣(mài)區實(shí)時(shí)交易金額
DIM層
基本來(lái)源于離線(xiàn)維度表層(ODS離線(xiàn)處理),提取到實(shí)時(shí)應用。如產(chǎn)品維度表、賣(mài)家維度表等。 訂單項目類(lèi)別與行業(yè)對應表。
5.3.2 多碼流關(guān)聯(lián)
在流計算中,需要將兩個(gè)實(shí)時(shí)流與主鍵關(guān)聯(lián)起來(lái),才能得到對應的表。
關(guān)鍵點(diǎn):需要互相等待,雙方到達后才能成功關(guān)聯(lián)。
難點(diǎn):數據到達是一個(gè)增量過(guò)程,數據到達時(shí)間不確定、無(wú)序,需要涉及中間狀態(tài)的保存和恢復。
當A表和B表實(shí)時(shí)關(guān)聯(lián)ID時(shí),無(wú)法知道表的到達順序。因此,當兩個(gè)數據流中的每個(gè)新數據到達時(shí),都必須在另一個(gè)表中進(jìn)行搜索。如果匹配,則拼接成一條記錄輸出到下游;如果無(wú)法匹配,則需要將其存儲在內存或外部存儲器中,直到表 B 中的記錄也到達。每次都在對方表的當前全量數據中查找??梢愿鶕P(guān)聯(lián)的主鍵在bucket中進(jìn)行處理
5.3.3維表使用@
實(shí)時(shí)計算時(shí),相關(guān)維表會(huì )使用當前實(shí)時(shí)數據(T)關(guān)聯(lián)T-2的維表數據
你為什么這樣做?
數據無(wú)法及時(shí)準備。在零點(diǎn),實(shí)時(shí)數據必須與維表相關(guān)聯(lián),T-1的維表數據不能在零點(diǎn)立即準備好,無(wú)法準確獲取最新的全量數據。所有最新數據=T-1數據+當天變化。當天實(shí)時(shí)數據無(wú)序,時(shí)間不確定。數據的混亂。比如10點(diǎn)的業(yè)務(wù)數據與維表關(guān)聯(lián)成功,獲取維表的字段信息(只能說(shuō)是獲取到10點(diǎn)的最新?tīng)顟B(tài)數據,而不知道會(huì )不會(huì )變)
有兩種類(lèi)型的維度表
滿(mǎn)載。數據量小,每天上萬(wàn)條記錄,分類(lèi)維表增量加載。無(wú)法全部加載,增量搜索和LRU過(guò)期形式,熱點(diǎn)數據存儲在內存中5.4大推廣挑戰5.4.1大推廣特性毫秒延遲峰值明顯(高吞吐量)保證(需要多鏈路冗余、快速切換、對業(yè)務(wù)方透明)公關(guān)特性(主鍵過(guò)濾、精確去重、統一口徑一) 5.4.2大促保證@
實(shí)時(shí)任務(wù)優(yōu)化
獨占資源和共享資源的策略(一臺機器長(cháng)時(shí)間需要從共享資源池中抓取資源,考慮分配更多的獨占資源)合理選擇緩存機制,減少庫的讀寫(xiě)次數,合并計算單元,并降級拓撲級別。(每個(gè)節點(diǎn)的數據傳輸都必須進(jìn)行序列化和反序列化,在級別深度上性能較差) 內存對象共享,避免字符串復制 高吞吐量和低延遲平均
數據鏈路保證
多鏈路建設、多機房容災、異地容災、鏈路切換推送
壓力測試
數據壓力測量:將實(shí)時(shí)操作的訂閱數據點(diǎn)調整到幾小時(shí)或幾天前,以模擬蓄洪壓力測量。
產(chǎn)品壓測:自壓測試優(yōu)化服務(wù)器性能(所有手機讀取操作的URL,QPS:500次/秒壓測);前端頁(yè)面穩定性測試(8-24小時(shí),提高前端頁(yè)面穩定性)
文章實(shí)時(shí)采集(文章實(shí)時(shí)采集和對采集點(diǎn)的編碼處理(圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2021-11-20 13:14
文章實(shí)時(shí)采集和對采集點(diǎn)的編碼處理我們通常先需要對采集的數據進(jìn)行預處理,比如說(shuō)提取“特征”,然后才能進(jìn)行文本識別。最常見(jiàn)的文本特征就是詞的embedding向量了,詞向量對訓練,特征取值可以是詞袋模型embedding向量,我們可以通過(guò)學(xué)習詞匯向量的一個(gè)新維度——詞維度(wordembeddingc維度),然后讓這個(gè)維度來(lái)決定詞代表詞匯的對應關(guān)系。
和英文不同,中文里面詞之間的關(guān)系并不是一一對應的,因此最常見(jiàn)的文本特征的方法就是基于多層神經(jīng)網(wǎng)絡(luò )的匹配,即詞代表的詞向量向量和該詞的詞語(yǔ)概率成正比,這樣可以在以詞對應為基礎的一個(gè)詞向量中獲得不重復的詞語(yǔ)。另外還有一些方法,就是我們大多數都知道的詞典關(guān)鍵詞,通過(guò)bagofwords(bow)模型來(lái)獲得詞對應的詞向量向量。
但是一些開(kāi)源工具當中并沒(méi)有詞典關(guān)鍵詞的內容,那怎么辦呢?現在也出現了詞粒度上的詞向量,說(shuō)明詞粒度上的詞向量也可以在某些情況下直接用詞袋模型提取對應關(guān)系。比如這里把“code”和“candidate”可以視為兩個(gè)單詞,詞粒度上可以直接提取對應關(guān)系。那怎么同時(shí)獲得詞粒度上和詞概率成正比的詞向量呢?這個(gè)很簡(jiǎn)單,即訓練詞粒度上的嵌入向量。
但有些情況下比如說(shuō)詞語(yǔ)已經(jīng)完整結束的情況下,再復雜的嵌入也不能彌補詞粒度上詞向量不足這個(gè)缺點(diǎn)。于是有人提出了詞嵌入(wordembedding)的概念。但是有些詞嵌入會(huì )帶有一些重疊字,比如說(shuō)“class”。實(shí)際上假設我們這里提取一個(gè)詞向量對應的這個(gè)詞的概率為一個(gè)分布,我們需要考慮兩個(gè)集合的距離是不是要越小越好,但是同時(shí)我們需要考慮兩個(gè)集合的詞向量向量加在一起是不是越小越好。
如果這兩個(gè)集合的距離太小了,就表示兩個(gè)集合的差距不是越大越好,這個(gè)時(shí)候可以加上隱層就像高斯分布那樣,使得這個(gè)兩個(gè)集合距離越小越好。其實(shí)這些距離方法理論上都可以找到對應的計算方法,但是我們也可以采用參數化的距離方法,即一個(gè)參數把詞向量好好計算一遍,然后記住,進(jìn)而規模擴大很多倍的時(shí)候就可以直接用正則項進(jìn)行約束,這樣可以降低模型的復雜度。
從高斯分布到詞粒度上的詞向量實(shí)際上能提取到的詞向量維度并不是最重要的,重要的是我們能提取到什么樣的詞向量。目前我們看到的詞向量大多是基于詞序的相似度計算,在詞序上做的詞向量會(huì )更符合我們的直覺(jué)。我們都知道詞袋模型embedding包含了向量維度與詞向量維度之間的倍數關(guān)系,如果能找到一個(gè)條件:1、這個(gè)詞向量的維度是維空間中每一維embedding向量的維度乘以n;2、詞向量的和也是維空間中詞的維度乘以n,這就實(shí)現了一個(gè)基于詞向量的。 查看全部
文章實(shí)時(shí)采集(文章實(shí)時(shí)采集和對采集點(diǎn)的編碼處理(圖))
文章實(shí)時(shí)采集和對采集點(diǎn)的編碼處理我們通常先需要對采集的數據進(jìn)行預處理,比如說(shuō)提取“特征”,然后才能進(jìn)行文本識別。最常見(jiàn)的文本特征就是詞的embedding向量了,詞向量對訓練,特征取值可以是詞袋模型embedding向量,我們可以通過(guò)學(xué)習詞匯向量的一個(gè)新維度——詞維度(wordembeddingc維度),然后讓這個(gè)維度來(lái)決定詞代表詞匯的對應關(guān)系。
和英文不同,中文里面詞之間的關(guān)系并不是一一對應的,因此最常見(jiàn)的文本特征的方法就是基于多層神經(jīng)網(wǎng)絡(luò )的匹配,即詞代表的詞向量向量和該詞的詞語(yǔ)概率成正比,這樣可以在以詞對應為基礎的一個(gè)詞向量中獲得不重復的詞語(yǔ)。另外還有一些方法,就是我們大多數都知道的詞典關(guān)鍵詞,通過(guò)bagofwords(bow)模型來(lái)獲得詞對應的詞向量向量。
但是一些開(kāi)源工具當中并沒(méi)有詞典關(guān)鍵詞的內容,那怎么辦呢?現在也出現了詞粒度上的詞向量,說(shuō)明詞粒度上的詞向量也可以在某些情況下直接用詞袋模型提取對應關(guān)系。比如這里把“code”和“candidate”可以視為兩個(gè)單詞,詞粒度上可以直接提取對應關(guān)系。那怎么同時(shí)獲得詞粒度上和詞概率成正比的詞向量呢?這個(gè)很簡(jiǎn)單,即訓練詞粒度上的嵌入向量。
但有些情況下比如說(shuō)詞語(yǔ)已經(jīng)完整結束的情況下,再復雜的嵌入也不能彌補詞粒度上詞向量不足這個(gè)缺點(diǎn)。于是有人提出了詞嵌入(wordembedding)的概念。但是有些詞嵌入會(huì )帶有一些重疊字,比如說(shuō)“class”。實(shí)際上假設我們這里提取一個(gè)詞向量對應的這個(gè)詞的概率為一個(gè)分布,我們需要考慮兩個(gè)集合的距離是不是要越小越好,但是同時(shí)我們需要考慮兩個(gè)集合的詞向量向量加在一起是不是越小越好。
如果這兩個(gè)集合的距離太小了,就表示兩個(gè)集合的差距不是越大越好,這個(gè)時(shí)候可以加上隱層就像高斯分布那樣,使得這個(gè)兩個(gè)集合距離越小越好。其實(shí)這些距離方法理論上都可以找到對應的計算方法,但是我們也可以采用參數化的距離方法,即一個(gè)參數把詞向量好好計算一遍,然后記住,進(jìn)而規模擴大很多倍的時(shí)候就可以直接用正則項進(jìn)行約束,這樣可以降低模型的復雜度。
從高斯分布到詞粒度上的詞向量實(shí)際上能提取到的詞向量維度并不是最重要的,重要的是我們能提取到什么樣的詞向量。目前我們看到的詞向量大多是基于詞序的相似度計算,在詞序上做的詞向量會(huì )更符合我們的直覺(jué)。我們都知道詞袋模型embedding包含了向量維度與詞向量維度之間的倍數關(guān)系,如果能找到一個(gè)條件:1、這個(gè)詞向量的維度是維空間中每一維embedding向量的維度乘以n;2、詞向量的和也是維空間中詞的維度乘以n,這就實(shí)現了一個(gè)基于詞向量的。
文章實(shí)時(shí)采集(具體內容如下新接到一個(gè)實(shí)時(shí)獲取攝像頭當前照片的詳細介紹)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2021-11-18 13:07
本文文章主要為大家介紹iOS中攝像頭的實(shí)時(shí)采集圖像。文章中的示例代碼很詳細,有一定的參考價(jià)值。有興趣的朋友可以參考一下。
本文示例分享了iOS中攝像頭實(shí)時(shí)采集圖像的具體代碼,供大家參考。具體內容如下
接收到新的實(shí)時(shí)獲取相機當前照片的請求,需要在設定的時(shí)間內使相機保持開(kāi)機狀態(tài),可以實(shí)時(shí)回調當前圖片數據信息;
這次結合了 AVCaptureDevice、AVCaptureSession、AVCaptureVideoPreviewLayer 和 UIView、UIImageView 和 UIImage;
GitHub
具體實(shí)現代碼如下:
#import #import #import #import NS_ASSUME_NONNULL_BEGIN @interface YHCameraView : UIView @property (nonatomic, weak) UIImageView *cameraImageView; @property (strong, nonatomic) AVCaptureDevice* device; @property (strong, nonatomic) AVCaptureSession* captureSession; @property (strong, nonatomic) AVCaptureVideoPreviewLayer* previewLayer; @property (strong, nonatomic) UIImage* cameraImage; @end NS_ASSUME_NONNULL_END
#import "YHCameraView.h" @implementation YHCameraView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor lightGrayColor]; [self createUI]; } return self; } /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ - (void)createUI { NSArray* devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; for(AVCaptureDevice *device in devices) { if([device position] == AVCaptureDevicePositionFront) // 前置攝像頭 self.device = device; } AVCaptureDeviceInput* input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; AVCaptureVideoDataOutput* output = [[AVCaptureVideoDataOutput alloc] init]; output.alwaysDiscardsLateVideoFrames = YES; dispatch_queue_t queue; queue = dispatch_queue_create("cameraQueue", NULL); [output setSampleBufferDelegate:self queue:queue]; NSString* key = (NSString *) kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; [output setVideoSettings:videoSettings]; self.captureSession = [[AVCaptureSession alloc] init]; [self.captureSession addInput:input]; [self.captureSession addOutput:output]; [self.captureSession setSessionPreset:AVCaptureSessionPresetPhoto]; self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession]; self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; // CHECK FOR YOUR APP NSInteger screenWidth = self.frame.size.width; NSInteger screenHeitht = self.frame.size.height; self.previewLayer.frame = self.bounds; self.previewLayer.orientation = AVCaptureVideoOrientationPortrait; // CHECK FOR YOUR APP // [self.layer insertSublayer:self.previewLayer atIndex:0]; // Comment-out to hide preview layer [self.captureSession startRunning]; } - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CVPixelBufferLockBaseAddress(imageBuffer, 0); uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer); size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); size_t width = CVPixelBufferGetWidth(imageBuffer); size_t height = CVPixelBufferGetHeight(imageBuffer); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); CGImageRef newImage = CGBitmapContextCreateImage(newContext); CGContextRelease(newContext); CGColorSpaceRelease(colorSpace); self.cameraImage = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored]; // UIImageOrientationDownMirrored self.cameraImageView.image = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored]; CGImageRelease(newImage); CVPixelBufferUnlockBaseAddress(imageBuffer, 0); } @end
實(shí)例化之后,可以在需要的時(shí)候直接獲取其cameraView的cameraImage;
#pragma mark - 快照采集 /// 快照采集 - (YHCameraView *)cameraView { if (!_cameraView) { YHCameraView *view = [[YHCameraView alloc] init]; view.frame = CGRectMake(1, 1, 1, 1); view.cameraImageView.image = view.cameraImage; _cameraView = view; } return _cameraView; } NSString *strImg = [YHCameraManager imageBase64EncodedWithImage:self.cameraView.cameraImage AndImageType:@"JPEG"]; // 獲取照片信息
/** 圖片轉 Base64 @param img 原圖片 @param type 圖片類(lèi)型(PNG 或 JPEG) @return 處理結果 */ + (NSString *)imageBase64EncodedWithImage:(UIImage *)img AndImageType:(NSString *)type { NSString *callBack = nil; if ([img isKindOfClass:[UIImage class]]) { NSData *data = [NSData data]; if ([type isEqualToString:@"PNG"]) { data = UIImagePNGRepresentation(img); } else { data = UIImageJPEGRepresentation(img, 1.0f); } NSString *encodedImgStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSLog(@"YHCameraManager\nencodedImgStr: %@", encodedImgStr); return encodedImgStr; } else { return callBack; } }
以上就是iOS實(shí)現的攝像頭實(shí)時(shí)采集圖像的詳細內容。更多詳情請關(guān)注html中文網(wǎng)站其他相關(guān)文章! 查看全部
文章實(shí)時(shí)采集(具體內容如下新接到一個(gè)實(shí)時(shí)獲取攝像頭當前照片的詳細介紹)
本文文章主要為大家介紹iOS中攝像頭的實(shí)時(shí)采集圖像。文章中的示例代碼很詳細,有一定的參考價(jià)值。有興趣的朋友可以參考一下。
本文示例分享了iOS中攝像頭實(shí)時(shí)采集圖像的具體代碼,供大家參考。具體內容如下
接收到新的實(shí)時(shí)獲取相機當前照片的請求,需要在設定的時(shí)間內使相機保持開(kāi)機狀態(tài),可以實(shí)時(shí)回調當前圖片數據信息;
這次結合了 AVCaptureDevice、AVCaptureSession、AVCaptureVideoPreviewLayer 和 UIView、UIImageView 和 UIImage;
GitHub
具體實(shí)現代碼如下:
#import #import #import #import NS_ASSUME_NONNULL_BEGIN @interface YHCameraView : UIView @property (nonatomic, weak) UIImageView *cameraImageView; @property (strong, nonatomic) AVCaptureDevice* device; @property (strong, nonatomic) AVCaptureSession* captureSession; @property (strong, nonatomic) AVCaptureVideoPreviewLayer* previewLayer; @property (strong, nonatomic) UIImage* cameraImage; @end NS_ASSUME_NONNULL_END
#import "YHCameraView.h" @implementation YHCameraView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor lightGrayColor]; [self createUI]; } return self; } /* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */ - (void)createUI { NSArray* devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; for(AVCaptureDevice *device in devices) { if([device position] == AVCaptureDevicePositionFront) // 前置攝像頭 self.device = device; } AVCaptureDeviceInput* input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil]; AVCaptureVideoDataOutput* output = [[AVCaptureVideoDataOutput alloc] init]; output.alwaysDiscardsLateVideoFrames = YES; dispatch_queue_t queue; queue = dispatch_queue_create("cameraQueue", NULL); [output setSampleBufferDelegate:self queue:queue]; NSString* key = (NSString *) kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; [output setVideoSettings:videoSettings]; self.captureSession = [[AVCaptureSession alloc] init]; [self.captureSession addInput:input]; [self.captureSession addOutput:output]; [self.captureSession setSessionPreset:AVCaptureSessionPresetPhoto]; self.previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession]; self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; // CHECK FOR YOUR APP NSInteger screenWidth = self.frame.size.width; NSInteger screenHeitht = self.frame.size.height; self.previewLayer.frame = self.bounds; self.previewLayer.orientation = AVCaptureVideoOrientationPortrait; // CHECK FOR YOUR APP // [self.layer insertSublayer:self.previewLayer atIndex:0]; // Comment-out to hide preview layer [self.captureSession startRunning]; } - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CVPixelBufferLockBaseAddress(imageBuffer, 0); uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer); size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); size_t width = CVPixelBufferGetWidth(imageBuffer); size_t height = CVPixelBufferGetHeight(imageBuffer); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); CGImageRef newImage = CGBitmapContextCreateImage(newContext); CGContextRelease(newContext); CGColorSpaceRelease(colorSpace); self.cameraImage = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored]; // UIImageOrientationDownMirrored self.cameraImageView.image = [UIImage imageWithCGImage:newImage scale:1.0f orientation:UIImageOrientationLeftMirrored]; CGImageRelease(newImage); CVPixelBufferUnlockBaseAddress(imageBuffer, 0); } @end
實(shí)例化之后,可以在需要的時(shí)候直接獲取其cameraView的cameraImage;
#pragma mark - 快照采集 /// 快照采集 - (YHCameraView *)cameraView { if (!_cameraView) { YHCameraView *view = [[YHCameraView alloc] init]; view.frame = CGRectMake(1, 1, 1, 1); view.cameraImageView.image = view.cameraImage; _cameraView = view; } return _cameraView; } NSString *strImg = [YHCameraManager imageBase64EncodedWithImage:self.cameraView.cameraImage AndImageType:@"JPEG"]; // 獲取照片信息
/** 圖片轉 Base64 @param img 原圖片 @param type 圖片類(lèi)型(PNG 或 JPEG) @return 處理結果 */ + (NSString *)imageBase64EncodedWithImage:(UIImage *)img AndImageType:(NSString *)type { NSString *callBack = nil; if ([img isKindOfClass:[UIImage class]]) { NSData *data = [NSData data]; if ([type isEqualToString:@"PNG"]) { data = UIImagePNGRepresentation(img); } else { data = UIImageJPEGRepresentation(img, 1.0f); } NSString *encodedImgStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSLog(@"YHCameraManager\nencodedImgStr: %@", encodedImgStr); return encodedImgStr; } else { return callBack; } }
以上就是iOS實(shí)現的攝像頭實(shí)時(shí)采集圖像的詳細內容。更多詳情請關(guān)注html中文網(wǎng)站其他相關(guān)文章!
文章實(shí)時(shí)采集(基于半成品渲染模型的shader試別的例子(圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 148 次瀏覽 ? 2021-11-11 22:03
文章實(shí)時(shí)采集,并上傳至forbuzzrender上,作者作品:qq秀效果。后來(lái)我們接手了方案的改善,方案完善了render函數。與原項目有相同的地方就是少了shader變量。接下來(lái)我們開(kāi)始重構,在老版本基礎上我們重寫(xiě)了方案中的shader,后續再試試別的例子。
這個(gè)東西叫做半成品渲染模型,就是建模過(guò)程在base+cb上面。能實(shí)現base+cb的渲染器也就是能調包,調好了也就是給方案提供樣式而已。不然的話(huà)方案根本就沒(méi)法作為一個(gè)項目開(kāi)源。
opengl如果沒(méi)有考慮游戲應用場(chǎng)景的話(huà),
調了顏色改了紋理總有個(gè)方案接受唄,做完這個(gè)項目,可以抽機會(huì )試試。
實(shí)際上是否使用這個(gè)中心貼圖是反應模型是否使用這個(gè)模型設計思想,可以在源碼中結合光照質(zhì)量和熱敏的參數來(lái)驗證這個(gè)模型使用是否合理。一旦設計思想支持到硬件上,肯定得使用。
我覺(jué)得你說(shuō)的是最后計算法則是的,這個(gè)是alias的過(guò)程,已知一個(gè)頂點(diǎn)位置和所有顏色,
具體方案應該寫(xiě)成serialization,當一個(gè)頂點(diǎn)位置發(fā)生改變時(shí),在其不同的bin的頂點(diǎn)對應所對應的頂點(diǎn)是可以被替換的。比如控制頂點(diǎn)位置需要用serialization取self相似值(int64),serialization取與另一個(gè)頂點(diǎn)bin中相鄰的頂點(diǎn)位置即可,這樣就避免了顏色相同的pass統一存放模型文件,然后和原來(lái)的模型文件合并。 查看全部
文章實(shí)時(shí)采集(基于半成品渲染模型的shader試別的例子(圖))
文章實(shí)時(shí)采集,并上傳至forbuzzrender上,作者作品:qq秀效果。后來(lái)我們接手了方案的改善,方案完善了render函數。與原項目有相同的地方就是少了shader變量。接下來(lái)我們開(kāi)始重構,在老版本基礎上我們重寫(xiě)了方案中的shader,后續再試試別的例子。
這個(gè)東西叫做半成品渲染模型,就是建模過(guò)程在base+cb上面。能實(shí)現base+cb的渲染器也就是能調包,調好了也就是給方案提供樣式而已。不然的話(huà)方案根本就沒(méi)法作為一個(gè)項目開(kāi)源。
opengl如果沒(méi)有考慮游戲應用場(chǎng)景的話(huà),
調了顏色改了紋理總有個(gè)方案接受唄,做完這個(gè)項目,可以抽機會(huì )試試。
實(shí)際上是否使用這個(gè)中心貼圖是反應模型是否使用這個(gè)模型設計思想,可以在源碼中結合光照質(zhì)量和熱敏的參數來(lái)驗證這個(gè)模型使用是否合理。一旦設計思想支持到硬件上,肯定得使用。
我覺(jué)得你說(shuō)的是最后計算法則是的,這個(gè)是alias的過(guò)程,已知一個(gè)頂點(diǎn)位置和所有顏色,
具體方案應該寫(xiě)成serialization,當一個(gè)頂點(diǎn)位置發(fā)生改變時(shí),在其不同的bin的頂點(diǎn)對應所對應的頂點(diǎn)是可以被替換的。比如控制頂點(diǎn)位置需要用serialization取self相似值(int64),serialization取與另一個(gè)頂點(diǎn)bin中相鄰的頂點(diǎn)位置即可,這樣就避免了顏色相同的pass統一存放模型文件,然后和原來(lái)的模型文件合并。
文章實(shí)時(shí)采集(如何利用機器學(xué)習等算法進(jìn)行車(chē)輛檢索?-樂(lè )題庫)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 159 次瀏覽 ? 2021-11-09 12:00
文章實(shí)時(shí)采集地理位置,對車(chē)輛牌照或行駛證號進(jìn)行標注,然后利用機器學(xué)習等算法進(jìn)行車(chē)輛辨識。產(chǎn)品相關(guān)功能的實(shí)現基于地理位置交互,在車(chē)輛信息采集基礎上實(shí)現用戶(hù)在周邊范圍內的車(chē)輛檢索。具體技術(shù)難點(diǎn)如下:地理位置引擎結構:1)點(diǎn)云和直接柵格建立圖12)點(diǎn)云變換為柵格后對車(chē)牌進(jìn)行分類(lèi)進(jìn)行采集:采集車(chē)牌區域邊界圖以及選取車(chē)牌所在柵格進(jìn)行搜索確定周邊車(chē)輛牌照數量。
搜索固定列和非固定列數據,以此保證數據采集的準確性。查詢(xún)方法的設計(機器學(xué)習):根據車(chē)牌來(lái)檢索的特征進(jìn)行內容特征抽取,在柵格上采用排序方式進(jìn)行檢索,詳細參考別人的代碼。車(chē)牌檢索過(guò)程:車(chē)牌檢索過(guò)程比較耗時(shí),根據搜索到的牌照數量控制采集個(gè)數。具體代碼如下:。
http://
快兩個(gè)月了。
看圖說(shuō)話(huà)了解一下。
硬說(shuō)本地的話(huà),加密狗+p2p+長(cháng)連接+fiddler+github上的各種依賴(lài),比如collection/alienbase/collection/trusted-atkins/javahub·github。相當麻煩不建議自己實(shí)現?,F在有好些免費的地圖數據源,走p2p。但是數據準度相對不高而且數據需要自己采集。
地圖數據商,定制化生產(chǎn),
不建議自己寫(xiě)。各個(gè)數據源難用。
第一回答給川普了 查看全部
文章實(shí)時(shí)采集(如何利用機器學(xué)習等算法進(jìn)行車(chē)輛檢索?-樂(lè )題庫)
文章實(shí)時(shí)采集地理位置,對車(chē)輛牌照或行駛證號進(jìn)行標注,然后利用機器學(xué)習等算法進(jìn)行車(chē)輛辨識。產(chǎn)品相關(guān)功能的實(shí)現基于地理位置交互,在車(chē)輛信息采集基礎上實(shí)現用戶(hù)在周邊范圍內的車(chē)輛檢索。具體技術(shù)難點(diǎn)如下:地理位置引擎結構:1)點(diǎn)云和直接柵格建立圖12)點(diǎn)云變換為柵格后對車(chē)牌進(jìn)行分類(lèi)進(jìn)行采集:采集車(chē)牌區域邊界圖以及選取車(chē)牌所在柵格進(jìn)行搜索確定周邊車(chē)輛牌照數量。
搜索固定列和非固定列數據,以此保證數據采集的準確性。查詢(xún)方法的設計(機器學(xué)習):根據車(chē)牌來(lái)檢索的特征進(jìn)行內容特征抽取,在柵格上采用排序方式進(jìn)行檢索,詳細參考別人的代碼。車(chē)牌檢索過(guò)程:車(chē)牌檢索過(guò)程比較耗時(shí),根據搜索到的牌照數量控制采集個(gè)數。具體代碼如下:。
http://
快兩個(gè)月了。
看圖說(shuō)話(huà)了解一下。
硬說(shuō)本地的話(huà),加密狗+p2p+長(cháng)連接+fiddler+github上的各種依賴(lài),比如collection/alienbase/collection/trusted-atkins/javahub·github。相當麻煩不建議自己實(shí)現?,F在有好些免費的地圖數據源,走p2p。但是數據準度相對不高而且數據需要自己采集。
地圖數據商,定制化生產(chǎn),
不建議自己寫(xiě)。各個(gè)數據源難用。
第一回答給川普了
文章實(shí)時(shí)采集(如何使用騰訊云大數據組件來(lái)完成實(shí)時(shí)監控系統的設計)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 132 次瀏覽 ? 2021-11-07 14:10
本文介紹如何使用騰訊云大數據組件完成實(shí)時(shí)監控系統的設計與實(shí)現。通過(guò)實(shí)時(shí)采集,分析云服務(wù)器(CVM)及其App應用的CPU、內存等資源消耗數據,通過(guò)短信、電話(huà)、微信等方式實(shí)時(shí)反饋監控報警信息等,有效保證系統的穩定運行。使用基于云的Kafka、Flink、ES等組件,大大減少了開(kāi)發(fā)運維人員的投入。
一、解決方案描述(一)概述
本方案結合騰訊云CKafka、流計算Oceanus(Flink)、Elasticsearch、Prometheus等,通過(guò)Filebeat實(shí)時(shí)采集系統和應用監控數據,傳輸到CKafka,再連接CKafka數據流計算 Oceanus (Flink) ,經(jīng)過(guò)簡(jiǎn)單的業(yè)務(wù)邏輯處理,輸出到 Elasticsearch,最后通過(guò) Kibana 頁(yè)面查詢(xún)結果。方案中使用Promethus監控流計算Oceanus作業(yè)運行狀態(tài)等系統指標,使用云Grafana監控CVM或業(yè)務(wù)應用指標。
(二)方案結構二、前期準備
在實(shí)施本方案前,請確保已創(chuàng )建并配置好相應的大數據組件。
(一)創(chuàng )建私網(wǎng)VPC
私有網(wǎng)絡(luò )(VPC)是您在騰訊云上自定義的邏輯隔離的網(wǎng)絡(luò )空間。搭建CKafka、流計算Oceanus、Elasticsearch集群等服務(wù)時(shí),選擇同一個(gè)VPC。具體創(chuàng )建步驟請參考幫助文檔()。
(二)創(chuàng )建CKafka實(shí)例
Kafka建議選擇最新的2.4.1版本,與Filebeat 采集工具有更好的兼容性。
購買(mǎi)完成后,創(chuàng )建一個(gè)Kafka主題:topic-app-info
(三)創(chuàng )建流計算Oceanus集群
流計算 Oceanus 是大數據產(chǎn)品生態(tài)系統的實(shí)時(shí)分析工具。它是基于A(yíng)pache Flink構建的企業(yè)級實(shí)時(shí)大數據分析平臺,具有一站式開(kāi)發(fā)、無(wú)縫連接、亞秒級延遲、低成本、安全穩定等特點(diǎn)。流計算Oceanus旨在實(shí)現企業(yè)數據價(jià)值最大化,加速企業(yè)實(shí)時(shí)數字化建設。
在Streaming Oceanus控制臺的【集群管理】->【新建集群】頁(yè)面創(chuàng )建集群。具體步驟請參考幫助文檔()。
(四)創(chuàng )建 Elasticsearch 實(shí)例
在 Elasticsearch 控制臺中,點(diǎn)擊左上角的【新建】,創(chuàng )建集群。具體步驟請參考幫助文檔()。
(五)創(chuàng )建云監控Prometheus實(shí)例
為了顯示自定義的系統指標,需要購買(mǎi) Promethus 服務(wù)。只需要自定義業(yè)務(wù)指標的同學(xué)可以省略這一步。
進(jìn)入云監控控制臺,點(diǎn)擊左側的【Prometheus監控】,新建一個(gè)Prometheus實(shí)例。具體步驟請參考幫助文檔()。
(六)創(chuàng )建獨立的 Grafana 資源
單機Grafana需要在灰度發(fā)布的Grafana管理頁(yè)面()單獨購買(mǎi),實(shí)現業(yè)務(wù)監控指標的展示。
(七)安裝和配置 Filebeat
Filebeat是一個(gè)輕量級的日志數據采集工具,通過(guò)監控指定位置的文件來(lái)采集信息。在需要監控該VPC下的主機信息和應用信息的云服務(wù)器上安裝Filebeat。安裝方法一:下載Filebeat并安裝。下載地址(); 方法二:使用【Elasticsearch管理頁(yè)面】-->【beats管理】中提供的Filebeat。本例使用方法一。下載到CVM并配置Filebeat,在filebeat.yml文件中添加如下配置項:
# 監控日志文件配置- type: logenabled: truepaths: - /tmp/test.log #- c:\programdata\elasticsearch\logs\*
# 監控數據輸出項配置output.kafka:version: 2.0.0 # kafka版本號hosts: ["xx.xx.xx.xx:xxxx"] # 請填寫(xiě)實(shí)際的IP地址+端口topic: 'topic-app-info' # 請填寫(xiě)實(shí)際的topic
請根據實(shí)際業(yè)務(wù)需求配置相應的Filebeat.yml文件,參考Filebeat官方文檔()。
注:示例中使用的是2.4.1的CKafka版本,此處配置版本:2.0.0。不兼容的版本可能會(huì )出現“ERROR [kafka] kafka/client.go:341 Kafka (topic=topic-app-info): drop invalid message”錯誤
三、項目實(shí)現
接下來(lái)通過(guò)一個(gè)案例來(lái)介紹如何通過(guò)流計算Oceanus實(shí)現個(gè)性化監控。
(一)Filebeat 采集 數據
1、進(jìn)入Filebeat根目錄,啟動(dòng)Filebeat獲取數據采集。在示例中,采集 顯示了 top 命令中顯示的 CPU、內存等信息。還可以采集jar應用日志、JVM使用情況、監聽(tīng)端口等,詳情請參考Filebeat官網(wǎng)
()。
# filebeat啟動(dòng)
./filebeat -e -c filebeat.yml
# 監控系統信息寫(xiě)入test.log文件
top -d 10 >>/tmp/test.log
2、 進(jìn)入CKafka頁(yè)面,點(diǎn)擊左側【消息查詢(xún)】,查詢(xún)對應的主題消息,驗證數據是否為采集。
Filebeat采集中Kafka的數據格式:
{ "@timestamp": "2021-08-30T10:22:52.888Z", "@metadata": { "beat": "filebeat", "type": "_doc", "version": "7.14.0" }, "input": { "type": "log" }, "host": { "ip": ["xx.xx.xx.xx", "xx::xx:xx:xx:xx"], "mac": ["xx:xx:xx:xx:xx:xx"], "hostname": "xx.xx.xx.xx", "architecture": "x86_64", "os": { "type": "linux", "platform": "centos", "version": "7(Core)", "family": "redhat", "name": "CentOSLinux", "kernel": "3.10.0-1062.9.1.el7.x86_64", "codename": "Core" }, "id": "0ea734564f9a4e2881b866b82d679dfc", "name": "xx.xx.xx.xx", "containerized": false }, "agent": { "name": "xx.xx.xx.xx", "type": "filebeat", "version": "7.14.0", "hostname": "xx.xx.xx.xx", "ephemeral_id": "6c0922a6-17af-4474-9e88-1fc3b1c3b1a9", "id": "6b23463c-0654-4f8b-83a9-84ec75721311" }, "ecs": { "version": "1.10.0" }, "log": { "offset": 2449931, "file": { "path": "/tmp/test.log" } }, "message": "(B[m16root0-20000S0.00.00:00.00kworker/1:0H(B[m[39;49m[K"}
(二)創(chuàng )建 Flink SQL 作業(yè)
使用流計算 Oceanus 處理 CKafka 訪(fǎng)問(wèn)的數據并存儲在 Elasticsearch 中。
1、定義源
根據 Filebeat 中的 json 消息格式構建 Flink Table Source。
CREATE TABLE DataInput ( `@timestamp` VARCHAR, `host` ROW, `log` ROW, `message` VARCHAR) WITH ( 'connector' = 'kafka', -- 可選 'kafka','kafka-0.11'. 注意選擇對應的內置 Connector 'topic' = 'topic-app-info', -- 替換為您要消費的 Topic 'scan.startup.mode' = 'earliest-offset', 'properties.bootstrap.servers' = '10.0.0.29:9092', 'properties.group.id' = 'oceanus_group2', -- 必選參數, 一定要指定 Group ID 'format' = 'json', 'json.ignore-parse-errors' = 'true', -- 忽略 JSON 結構解析異常 'json.fail-on-missing-field' = 'false' -- 如果設置為 true, 則遇到缺失字段會(huì )報錯 設置為 false 則缺失字段設置為 null);
2、定義接收器
CREATE TABLE es_output ( `id` VARCHAR, `ip` ARRAY, `path` VARCHAR, `num` INTEGER, `message` VARCHAR, `createTime` VARCHAR) WITH ( 'connector.type' = 'elasticsearch', 'connector.version' = '6', 'connector.hosts' = 'http://10.0.0.175:9200', 'connector.index' = 'oceanus_test2', 'connector.document-type' = '_doc', 'connector.username' = 'elastic', 'connector.password' = 'yourpassword', 'update-mode' = 'upsert', -- 可選無(wú)主鍵的 'append' 模式,或有主鍵的 'upsert' 模式 'connector.key-null-literal' = 'n/a', -- 主鍵為 null 時(shí)的替代字符串,默認是 'null' 'format.type' = 'json' -- 輸出數據格式, 目前只支持 'json');
3、處理業(yè)務(wù)數據
INSERT INTO es_outputSELECT host.id as `id`, host.ip as `ip`, log.file.path as `path`, log.`offset` as `num`, message, `@timestamp` as `createTime`from DataInput;
4、配置作業(yè)參數
【內置連接器】選擇flink-connector-elasticsearch6和flink-connector-kafka
注:根據實(shí)際版本選擇
5、查詢(xún)ES數據
在ES控制臺的Kibana頁(yè)面查詢(xún)數據,或者輸入同一子網(wǎng)的CVM,使用如下命令查詢(xún):
# 查詢(xún)索引 username:password請替換為實(shí)際賬號密碼curl -XGET -u username:password http://xx.xx.xx.xx:xxxx/oceanus_test2/_search -H 'Content-Type: application/json' -d'{ "query": { "match_all": {}}, "size": 10}'
更多訪(fǎng)問(wèn)方式請參考訪(fǎng)問(wèn)ES集群()。
(三)系統指示燈監控
本章主要實(shí)現系統信息監控,對Flink作業(yè)的運行狀態(tài)進(jìn)行監控和告警。
Prometheus 是一個(gè)非常靈活的時(shí)間序列數據庫,通常用于監控數據的存儲、計算和報警。流計算 Oceanus 建議用戶(hù)使用騰訊云監控提供的 Prometheus 服務(wù),避免部署和運維成本。同時(shí)還支持騰訊云通知模板,可以輕松通過(guò)短信、電話(huà)、郵件、企業(yè)微信機器人等方式將報警信息發(fā)送到不同的收件人。
監控配置
流計算 Oceanus 作業(yè)監控
除了流計算Oceanus控制臺自帶的監控信息外,還可以配置目前支持任務(wù)級細粒度監控、作業(yè)級監控、集群Flink作業(yè)列表監控。
1、 流計算Oceanus作業(yè)詳情頁(yè)面,點(diǎn)擊【作業(yè)參數】,在【高級參數】中添加如下配置:
pipeline.max-parallelism: 2048metrics.reporters: promgatewaymetrics.reporter.promgateway.host: xx.xx.xx.xx # Prometheus實(shí)例地址metrics.reporter.promgateway.port: 9090 # Prometheus實(shí)例端口metrics.reporter.promgateway.needBasicAuth: truemetrics.reporter.promgateway.password: xxxxxxxxxxx # Prometheus實(shí)例密碼metrics.reporter.promgateway.interval: 10 SECONDS
2、 在任意一個(gè)流計算Oceanus作業(yè)中,點(diǎn)擊【云監控】進(jìn)入云Prometheus實(shí)例,點(diǎn)擊鏈接進(jìn)入Grafana(這里不能輸入灰度的Grafana),并導入json文件。有關(guān)詳細信息,請參閱訪(fǎng)問(wèn) Prometheus 自定義監視器
()。
3、3、顯示的Flink任務(wù)監控效果如下,用戶(hù)也可以點(diǎn)擊【Edit】設置不同的Panels來(lái)優(yōu)化顯示效果。
報警配置
1、 進(jìn)入騰訊云監控界面,點(diǎn)擊左側【Prometheus監控】,點(diǎn)擊購買(mǎi)的實(shí)例進(jìn)入服務(wù)管理頁(yè)面,點(diǎn)擊左側【告警策略】,點(diǎn)擊【新建】,配置相關(guān)信息. 具體操作參考訪(fǎng)問(wèn)Prometheus自定義監控
()。
2、設置報警通知。選擇[選擇模板]或[新建]設置通知模板。
3、短信通知信息
(四)業(yè)務(wù)指標監控
使用Filebeat采集應用業(yè)務(wù)數據,通過(guò)流計算的Oceanus服務(wù)處理數據存儲在ES中,使用ES+Grafana監控業(yè)務(wù)數據。
1、Grafana 配置 ES 數據源。在灰度發(fā)布中進(jìn)入 Grafana 控制臺
(),進(jìn)入剛剛創(chuàng )建的Grafana服務(wù),找到網(wǎng)址打開(kāi)登錄,Grafana賬號為admin,登錄后點(diǎn)擊【配置】,點(diǎn)擊【添加源】,搜索elasticsearch,填寫(xiě)相關(guān)ES實(shí)例信息,并添加數據源。
2、 點(diǎn)擊左側【Dashboards】,點(diǎn)擊【Manage】,點(diǎn)擊右上角的【New Dashboard】,新建面板,編輯面板。
3、 顯示效果如下:
注:本辦公室僅為示例,無(wú)實(shí)際業(yè)務(wù)
四、總結
本方案同時(shí)嘗試了系統監控指標和業(yè)務(wù)監控指標兩種監控方案。如果只需要監控業(yè)務(wù)指標,可以省略Prometus相關(guān)操作。
此外,需要注意的是: 查看全部
文章實(shí)時(shí)采集(如何使用騰訊云大數據組件來(lái)完成實(shí)時(shí)監控系統的設計)
本文介紹如何使用騰訊云大數據組件完成實(shí)時(shí)監控系統的設計與實(shí)現。通過(guò)實(shí)時(shí)采集,分析云服務(wù)器(CVM)及其App應用的CPU、內存等資源消耗數據,通過(guò)短信、電話(huà)、微信等方式實(shí)時(shí)反饋監控報警信息等,有效保證系統的穩定運行。使用基于云的Kafka、Flink、ES等組件,大大減少了開(kāi)發(fā)運維人員的投入。
一、解決方案描述(一)概述
本方案結合騰訊云CKafka、流計算Oceanus(Flink)、Elasticsearch、Prometheus等,通過(guò)Filebeat實(shí)時(shí)采集系統和應用監控數據,傳輸到CKafka,再連接CKafka數據流計算 Oceanus (Flink) ,經(jīng)過(guò)簡(jiǎn)單的業(yè)務(wù)邏輯處理,輸出到 Elasticsearch,最后通過(guò) Kibana 頁(yè)面查詢(xún)結果。方案中使用Promethus監控流計算Oceanus作業(yè)運行狀態(tài)等系統指標,使用云Grafana監控CVM或業(yè)務(wù)應用指標。
(二)方案結構二、前期準備
在實(shí)施本方案前,請確保已創(chuàng )建并配置好相應的大數據組件。
(一)創(chuàng )建私網(wǎng)VPC
私有網(wǎng)絡(luò )(VPC)是您在騰訊云上自定義的邏輯隔離的網(wǎng)絡(luò )空間。搭建CKafka、流計算Oceanus、Elasticsearch集群等服務(wù)時(shí),選擇同一個(gè)VPC。具體創(chuàng )建步驟請參考幫助文檔()。
(二)創(chuàng )建CKafka實(shí)例
Kafka建議選擇最新的2.4.1版本,與Filebeat 采集工具有更好的兼容性。
購買(mǎi)完成后,創(chuàng )建一個(gè)Kafka主題:topic-app-info
(三)創(chuàng )建流計算Oceanus集群
流計算 Oceanus 是大數據產(chǎn)品生態(tài)系統的實(shí)時(shí)分析工具。它是基于A(yíng)pache Flink構建的企業(yè)級實(shí)時(shí)大數據分析平臺,具有一站式開(kāi)發(fā)、無(wú)縫連接、亞秒級延遲、低成本、安全穩定等特點(diǎn)。流計算Oceanus旨在實(shí)現企業(yè)數據價(jià)值最大化,加速企業(yè)實(shí)時(shí)數字化建設。
在Streaming Oceanus控制臺的【集群管理】->【新建集群】頁(yè)面創(chuàng )建集群。具體步驟請參考幫助文檔()。
(四)創(chuàng )建 Elasticsearch 實(shí)例
在 Elasticsearch 控制臺中,點(diǎn)擊左上角的【新建】,創(chuàng )建集群。具體步驟請參考幫助文檔()。
(五)創(chuàng )建云監控Prometheus實(shí)例
為了顯示自定義的系統指標,需要購買(mǎi) Promethus 服務(wù)。只需要自定義業(yè)務(wù)指標的同學(xué)可以省略這一步。
進(jìn)入云監控控制臺,點(diǎn)擊左側的【Prometheus監控】,新建一個(gè)Prometheus實(shí)例。具體步驟請參考幫助文檔()。
(六)創(chuàng )建獨立的 Grafana 資源
單機Grafana需要在灰度發(fā)布的Grafana管理頁(yè)面()單獨購買(mǎi),實(shí)現業(yè)務(wù)監控指標的展示。
(七)安裝和配置 Filebeat
Filebeat是一個(gè)輕量級的日志數據采集工具,通過(guò)監控指定位置的文件來(lái)采集信息。在需要監控該VPC下的主機信息和應用信息的云服務(wù)器上安裝Filebeat。安裝方法一:下載Filebeat并安裝。下載地址(); 方法二:使用【Elasticsearch管理頁(yè)面】-->【beats管理】中提供的Filebeat。本例使用方法一。下載到CVM并配置Filebeat,在filebeat.yml文件中添加如下配置項:
# 監控日志文件配置- type: logenabled: truepaths: - /tmp/test.log #- c:\programdata\elasticsearch\logs\*
# 監控數據輸出項配置output.kafka:version: 2.0.0 # kafka版本號hosts: ["xx.xx.xx.xx:xxxx"] # 請填寫(xiě)實(shí)際的IP地址+端口topic: 'topic-app-info' # 請填寫(xiě)實(shí)際的topic
請根據實(shí)際業(yè)務(wù)需求配置相應的Filebeat.yml文件,參考Filebeat官方文檔()。
注:示例中使用的是2.4.1的CKafka版本,此處配置版本:2.0.0。不兼容的版本可能會(huì )出現“ERROR [kafka] kafka/client.go:341 Kafka (topic=topic-app-info): drop invalid message”錯誤
三、項目實(shí)現
接下來(lái)通過(guò)一個(gè)案例來(lái)介紹如何通過(guò)流計算Oceanus實(shí)現個(gè)性化監控。
(一)Filebeat 采集 數據
1、進(jìn)入Filebeat根目錄,啟動(dòng)Filebeat獲取數據采集。在示例中,采集 顯示了 top 命令中顯示的 CPU、內存等信息。還可以采集jar應用日志、JVM使用情況、監聽(tīng)端口等,詳情請參考Filebeat官網(wǎng)
()。
# filebeat啟動(dòng)
./filebeat -e -c filebeat.yml
# 監控系統信息寫(xiě)入test.log文件
top -d 10 >>/tmp/test.log
2、 進(jìn)入CKafka頁(yè)面,點(diǎn)擊左側【消息查詢(xún)】,查詢(xún)對應的主題消息,驗證數據是否為采集。
Filebeat采集中Kafka的數據格式:
{ "@timestamp": "2021-08-30T10:22:52.888Z", "@metadata": { "beat": "filebeat", "type": "_doc", "version": "7.14.0" }, "input": { "type": "log" }, "host": { "ip": ["xx.xx.xx.xx", "xx::xx:xx:xx:xx"], "mac": ["xx:xx:xx:xx:xx:xx"], "hostname": "xx.xx.xx.xx", "architecture": "x86_64", "os": { "type": "linux", "platform": "centos", "version": "7(Core)", "family": "redhat", "name": "CentOSLinux", "kernel": "3.10.0-1062.9.1.el7.x86_64", "codename": "Core" }, "id": "0ea734564f9a4e2881b866b82d679dfc", "name": "xx.xx.xx.xx", "containerized": false }, "agent": { "name": "xx.xx.xx.xx", "type": "filebeat", "version": "7.14.0", "hostname": "xx.xx.xx.xx", "ephemeral_id": "6c0922a6-17af-4474-9e88-1fc3b1c3b1a9", "id": "6b23463c-0654-4f8b-83a9-84ec75721311" }, "ecs": { "version": "1.10.0" }, "log": { "offset": 2449931, "file": { "path": "/tmp/test.log" } }, "message": "(B[m16root0-20000S0.00.00:00.00kworker/1:0H(B[m[39;49m[K"}
(二)創(chuàng )建 Flink SQL 作業(yè)
使用流計算 Oceanus 處理 CKafka 訪(fǎng)問(wèn)的數據并存儲在 Elasticsearch 中。
1、定義源
根據 Filebeat 中的 json 消息格式構建 Flink Table Source。
CREATE TABLE DataInput ( `@timestamp` VARCHAR, `host` ROW, `log` ROW, `message` VARCHAR) WITH ( 'connector' = 'kafka', -- 可選 'kafka','kafka-0.11'. 注意選擇對應的內置 Connector 'topic' = 'topic-app-info', -- 替換為您要消費的 Topic 'scan.startup.mode' = 'earliest-offset', 'properties.bootstrap.servers' = '10.0.0.29:9092', 'properties.group.id' = 'oceanus_group2', -- 必選參數, 一定要指定 Group ID 'format' = 'json', 'json.ignore-parse-errors' = 'true', -- 忽略 JSON 結構解析異常 'json.fail-on-missing-field' = 'false' -- 如果設置為 true, 則遇到缺失字段會(huì )報錯 設置為 false 則缺失字段設置為 null);
2、定義接收器
CREATE TABLE es_output ( `id` VARCHAR, `ip` ARRAY, `path` VARCHAR, `num` INTEGER, `message` VARCHAR, `createTime` VARCHAR) WITH ( 'connector.type' = 'elasticsearch', 'connector.version' = '6', 'connector.hosts' = 'http://10.0.0.175:9200', 'connector.index' = 'oceanus_test2', 'connector.document-type' = '_doc', 'connector.username' = 'elastic', 'connector.password' = 'yourpassword', 'update-mode' = 'upsert', -- 可選無(wú)主鍵的 'append' 模式,或有主鍵的 'upsert' 模式 'connector.key-null-literal' = 'n/a', -- 主鍵為 null 時(shí)的替代字符串,默認是 'null' 'format.type' = 'json' -- 輸出數據格式, 目前只支持 'json');
3、處理業(yè)務(wù)數據
INSERT INTO es_outputSELECT host.id as `id`, host.ip as `ip`, log.file.path as `path`, log.`offset` as `num`, message, `@timestamp` as `createTime`from DataInput;
4、配置作業(yè)參數
【內置連接器】選擇flink-connector-elasticsearch6和flink-connector-kafka
注:根據實(shí)際版本選擇
5、查詢(xún)ES數據
在ES控制臺的Kibana頁(yè)面查詢(xún)數據,或者輸入同一子網(wǎng)的CVM,使用如下命令查詢(xún):
# 查詢(xún)索引 username:password請替換為實(shí)際賬號密碼curl -XGET -u username:password http://xx.xx.xx.xx:xxxx/oceanus_test2/_search -H 'Content-Type: application/json' -d'{ "query": { "match_all": {}}, "size": 10}'
更多訪(fǎng)問(wèn)方式請參考訪(fǎng)問(wèn)ES集群()。
(三)系統指示燈監控
本章主要實(shí)現系統信息監控,對Flink作業(yè)的運行狀態(tài)進(jìn)行監控和告警。
Prometheus 是一個(gè)非常靈活的時(shí)間序列數據庫,通常用于監控數據的存儲、計算和報警。流計算 Oceanus 建議用戶(hù)使用騰訊云監控提供的 Prometheus 服務(wù),避免部署和運維成本。同時(shí)還支持騰訊云通知模板,可以輕松通過(guò)短信、電話(huà)、郵件、企業(yè)微信機器人等方式將報警信息發(fā)送到不同的收件人。
監控配置
流計算 Oceanus 作業(yè)監控
除了流計算Oceanus控制臺自帶的監控信息外,還可以配置目前支持任務(wù)級細粒度監控、作業(yè)級監控、集群Flink作業(yè)列表監控。
1、 流計算Oceanus作業(yè)詳情頁(yè)面,點(diǎn)擊【作業(yè)參數】,在【高級參數】中添加如下配置:
pipeline.max-parallelism: 2048metrics.reporters: promgatewaymetrics.reporter.promgateway.host: xx.xx.xx.xx # Prometheus實(shí)例地址metrics.reporter.promgateway.port: 9090 # Prometheus實(shí)例端口metrics.reporter.promgateway.needBasicAuth: truemetrics.reporter.promgateway.password: xxxxxxxxxxx # Prometheus實(shí)例密碼metrics.reporter.promgateway.interval: 10 SECONDS
2、 在任意一個(gè)流計算Oceanus作業(yè)中,點(diǎn)擊【云監控】進(jìn)入云Prometheus實(shí)例,點(diǎn)擊鏈接進(jìn)入Grafana(這里不能輸入灰度的Grafana),并導入json文件。有關(guān)詳細信息,請參閱訪(fǎng)問(wèn) Prometheus 自定義監視器
()。
3、3、顯示的Flink任務(wù)監控效果如下,用戶(hù)也可以點(diǎn)擊【Edit】設置不同的Panels來(lái)優(yōu)化顯示效果。
報警配置
1、 進(jìn)入騰訊云監控界面,點(diǎn)擊左側【Prometheus監控】,點(diǎn)擊購買(mǎi)的實(shí)例進(jìn)入服務(wù)管理頁(yè)面,點(diǎn)擊左側【告警策略】,點(diǎn)擊【新建】,配置相關(guān)信息. 具體操作參考訪(fǎng)問(wèn)Prometheus自定義監控
()。
2、設置報警通知。選擇[選擇模板]或[新建]設置通知模板。
3、短信通知信息
(四)業(yè)務(wù)指標監控
使用Filebeat采集應用業(yè)務(wù)數據,通過(guò)流計算的Oceanus服務(wù)處理數據存儲在ES中,使用ES+Grafana監控業(yè)務(wù)數據。
1、Grafana 配置 ES 數據源。在灰度發(fā)布中進(jìn)入 Grafana 控制臺
(),進(jìn)入剛剛創(chuàng )建的Grafana服務(wù),找到網(wǎng)址打開(kāi)登錄,Grafana賬號為admin,登錄后點(diǎn)擊【配置】,點(diǎn)擊【添加源】,搜索elasticsearch,填寫(xiě)相關(guān)ES實(shí)例信息,并添加數據源。
2、 點(diǎn)擊左側【Dashboards】,點(diǎn)擊【Manage】,點(diǎn)擊右上角的【New Dashboard】,新建面板,編輯面板。
3、 顯示效果如下:
注:本辦公室僅為示例,無(wú)實(shí)際業(yè)務(wù)
四、總結
本方案同時(shí)嘗試了系統監控指標和業(yè)務(wù)監控指標兩種監控方案。如果只需要監控業(yè)務(wù)指標,可以省略Prometus相關(guān)操作。
此外,需要注意的是:
文章實(shí)時(shí)采集(忙數據庫數據同步到數據倉庫的事情,不涉及具體細節)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2021-11-07 14:08
上個(gè)月一直在忙著(zhù)把數據庫數據同步到數據倉庫。我現在應該可以簡(jiǎn)單說(shuō)一下,不涉及具體細節,純粹是記錄我們團隊的所作所為。
背景
數據倉庫的分層建模理論中有一層數據叫做ODS(Operational Data Store),它往往存儲原創(chuàng )業(yè)務(wù)層數據,不做任何處理。這一層的數據來(lái)源很多,但大部分都會(huì )有來(lái)自業(yè)務(wù)數據庫的數據。來(lái)自業(yè)務(wù)數據庫采集的數據,然后導入HDFS,現在是數據倉庫的重要組成部分。
來(lái)自業(yè)務(wù)數據庫采集的數據分為兩種形式:
通過(guò)JDBC協(xié)議,使用select *方式從數據庫中提取所有數據并同步到HDFS。數據格式可以轉成文本然后以L(fǎng)oad的形式導入,也可以直接通過(guò)DataX、Sqoop等數據傳輸工具登陸HDFS。數據庫將數據更改消息發(fā)送到某個(gè)消息中間件,然后使用某個(gè)流處理工具將數據更改消息一一重現。
第一種方法的實(shí)現簡(jiǎn)單,但缺點(diǎn)也很明顯:
如果選擇第二種方式,實(shí)現比較復雜,目前HDFS上層計算引擎大多不支持數據更新、刪除等SQL原語(yǔ),導致需要分布式數據庫(參考文章:) 或者使用CDC(Change Data Capture)+merge方法(參考文章:)。
遇到的困難
在我們的團隊中,一些數據是直接從外部系統訪(fǎng)問(wèn)的。它只提供某種形式的數據更新消息,類(lèi)似于MySQL的binlog,但是使用的協(xié)議完全不同,細節不詳。消息收錄四種不同的數據更新操作:插入(插入一條新數據)、非主鍵更新(根據主鍵更新一條數據的非主鍵字段)、主鍵更新(更新一條數據的主鍵字段基于主鍵))和delete(刪除一條數據)。
之前我們使用 Kudu 來(lái)接受這部分數據:使用 Spark Streaming 從 Kafka 中一一讀取數據,對 Kudu 中的數據進(jìn)行插入、非主鍵更新、刪除、主鍵更新等操作。數據更新操作。主鍵更新操作比較復雜,分為四個(gè)步驟:將舊主鍵數據讀入內存,更新內存中舊主鍵數據,刪除舊主鍵數據,插入新主鍵數據。
當數據量很小的時(shí)候,所有的問(wèn)題都不是問(wèn)題。當數據量很大的時(shí)候,尤其是主鍵更新的消息很多的時(shí)候,上面描述的過(guò)程就有問(wèn)題了。例如,每次主鍵更新都需要與 Kudu 交互四次。
所以我們參考美團的文章實(shí)現CDC(Change Data Capture)+merge來(lái)處理數據。
同步
目前網(wǎng)上所有的文章都只提到了插入、非主鍵更新和刪除的操作,但是對于主鍵和非主鍵的一些字段的更新并沒(méi)有很好的答案。而這也是本月工作的核心。讀者可以思考如何處理主鍵更新操作,以及如何更新一些不是主鍵的字段。
經(jīng)驗
經(jīng)過(guò)一個(gè)多月的努力,這項工作即將結束,為此增加了很多課程。目前我們注意到,主流分布式數據庫在遇到數百億表的實(shí)時(shí)更新操作時(shí),仍然存在很多問(wèn)題,尤其是消息中大量的主鍵更新操作。與流處理相比,成熟的批量計算引擎和HDFS存儲在遇到大規模數據處理時(shí)更加可靠。 查看全部
文章實(shí)時(shí)采集(忙數據庫數據同步到數據倉庫的事情,不涉及具體細節)
上個(gè)月一直在忙著(zhù)把數據庫數據同步到數據倉庫。我現在應該可以簡(jiǎn)單說(shuō)一下,不涉及具體細節,純粹是記錄我們團隊的所作所為。
背景
數據倉庫的分層建模理論中有一層數據叫做ODS(Operational Data Store),它往往存儲原創(chuàng )業(yè)務(wù)層數據,不做任何處理。這一層的數據來(lái)源很多,但大部分都會(huì )有來(lái)自業(yè)務(wù)數據庫的數據。來(lái)自業(yè)務(wù)數據庫采集的數據,然后導入HDFS,現在是數據倉庫的重要組成部分。
來(lái)自業(yè)務(wù)數據庫采集的數據分為兩種形式:
通過(guò)JDBC協(xié)議,使用select *方式從數據庫中提取所有數據并同步到HDFS。數據格式可以轉成文本然后以L(fǎng)oad的形式導入,也可以直接通過(guò)DataX、Sqoop等數據傳輸工具登陸HDFS。數據庫將數據更改消息發(fā)送到某個(gè)消息中間件,然后使用某個(gè)流處理工具將數據更改消息一一重現。
第一種方法的實(shí)現簡(jiǎn)單,但缺點(diǎn)也很明顯:
如果選擇第二種方式,實(shí)現比較復雜,目前HDFS上層計算引擎大多不支持數據更新、刪除等SQL原語(yǔ),導致需要分布式數據庫(參考文章:) 或者使用CDC(Change Data Capture)+merge方法(參考文章:)。
遇到的困難
在我們的團隊中,一些數據是直接從外部系統訪(fǎng)問(wèn)的。它只提供某種形式的數據更新消息,類(lèi)似于MySQL的binlog,但是使用的協(xié)議完全不同,細節不詳。消息收錄四種不同的數據更新操作:插入(插入一條新數據)、非主鍵更新(根據主鍵更新一條數據的非主鍵字段)、主鍵更新(更新一條數據的主鍵字段基于主鍵))和delete(刪除一條數據)。
之前我們使用 Kudu 來(lái)接受這部分數據:使用 Spark Streaming 從 Kafka 中一一讀取數據,對 Kudu 中的數據進(jìn)行插入、非主鍵更新、刪除、主鍵更新等操作。數據更新操作。主鍵更新操作比較復雜,分為四個(gè)步驟:將舊主鍵數據讀入內存,更新內存中舊主鍵數據,刪除舊主鍵數據,插入新主鍵數據。
當數據量很小的時(shí)候,所有的問(wèn)題都不是問(wèn)題。當數據量很大的時(shí)候,尤其是主鍵更新的消息很多的時(shí)候,上面描述的過(guò)程就有問(wèn)題了。例如,每次主鍵更新都需要與 Kudu 交互四次。
所以我們參考美團的文章實(shí)現CDC(Change Data Capture)+merge來(lái)處理數據。
同步
目前網(wǎng)上所有的文章都只提到了插入、非主鍵更新和刪除的操作,但是對于主鍵和非主鍵的一些字段的更新并沒(méi)有很好的答案。而這也是本月工作的核心。讀者可以思考如何處理主鍵更新操作,以及如何更新一些不是主鍵的字段。
經(jīng)驗
經(jīng)過(guò)一個(gè)多月的努力,這項工作即將結束,為此增加了很多課程。目前我們注意到,主流分布式數據庫在遇到數百億表的實(shí)時(shí)更新操作時(shí),仍然存在很多問(wèn)題,尤其是消息中大量的主鍵更新操作。與流處理相比,成熟的批量計算引擎和HDFS存儲在遇到大規模數據處理時(shí)更加可靠。


