主頁 >  其他 > Java開發之實時計算--Flink

Java開發之實時計算--Flink

2022-01-25 07:25:33 其他

簡介

  • 介紹計算框架對java開發的重要性
  • 介紹flink的架構
  • 介紹flink的編程模型:DataStream、DataSet、Table API、SQL
  • 介紹flink的部署

計算框架

每個Java開發一定要懂至少一個流行的計算框架,因為現在的資料量越來越大,光靠資料庫或者手寫代碼去實作難度已經越來越大,不僅涉及到資源調度,還要考慮分布式,并且還要考慮高可用、容錯等等,因此我們需要借助現有的分布式計算框架來實作我們大規模分布式計算的目的,不僅能簡化我們的程式設計,使我們更關注業務,并且也能防止重復造輪子,
隨著資料規模的不斷增加,相應的計算框架也在不停的升級迭代中,計算框架經歷了如下幾個階段:

  • 第一代批量計算框架MapReduce,計算模型檢查,延遲高,
  • 第二代流式計算Storm、Spark,實時計算的控制有限,記憶體要求高,
  • 第三代批流一體計算Flink,批處理和流處理統一結合,控制靈活,
    flink可以說是繼承了歷代計算引擎的各種優點,拋棄各種缺點而造就的高性能實時計算框架,這也是目前flink框架比對火熱的原因,本文將主要介紹flink各個基本概念,讓開發能直接上手使用,

Flink架構

flink適應場景

  • 事件驅動應用
    在這里插入圖片描述
    根據到來的資料和事件條件觸發計算的流程操作,

  • 流批分析:
    在這里插入圖片描述
    流式計算和批處理

  • 資料管道 & ETL
    在這里插入圖片描述
    也是我們常說的ETL工具,也是目前我做資料抽取經常用到的工具,

集群架構

在這里插入圖片描述

JobManager

Flink集群由一個JobManager行程和多個TaskManager行程組成,實際運行的JobManager只有一個,在高可用的環境下,可以存在多個JobManager,但是只有一個leader角色,其他都處于standby狀態,待leader宕機時再轉變成leader角色繼續服務,
JobManager負責任務的劃分、資源調度、分布式的協調等,其中又有3給主要組件組成:

  • ResourceManager
    ResourceManager 負責 Flink 集群中的資源調度、回收、分配 - 它管理任務槽(task slots),這是 Flink 集群中資源調度的單位,后面會詳細講解任務槽的概念,
  • Dispatcher
    Dispatcher 用來接受客戶端提叫過來的計算程式,并為每個提交的作業啟動一個新的 JobMaster,此外,還提供一個web界面用于查看執行情況、日志、監控指標等,
  • JobMaster
    JobMaster 負責管理單個任務集(JobGraph)的執行,Flink 集群中可以同時運行多個作業,每個作業都有自己的 JobMaster,

TaskManager

TaskManager負責執行作業中的任務,并且快取資料以及與其他taskmanger交換資料,
在TaskManager 中資源調度的最小單位是槽,TaskManager 中槽的數量表示并發處理任務的數量,請注意一個槽中可以執行多個算子,.

任務和算子鏈

多個算子操作可以形成算子鏈,例如:map().keyBy().windows().apply().sink(),有5個算子,其中map、keyBy().windows().apply()、sink形成3個任務,每個任務由單獨的執行緒執行,在執行程序中又將任務劃分為具體的子任務,每個子任務負責部分資料的執行,如圖所示:
在這里插入圖片描述
圖的上半部分為任務視角,下半部分為行程視角,請仔細揣摩,

槽和資源劃分

每個TaskManager都是一個 JVM 行程,可以在單獨的執行緒中執行一個或多個子任務,為了控制一個 TaskManager 中接受多少個 任務,就有了所謂的槽,
每個槽平分TaskManager的托管記憶體,注意槽只分配給某個作業的任務,因此不同的作業任務執行時不會共用槽,也就形成了作業之間的資源隔離,但是一個作業的任務是可以公用槽的,槽只是隔離了記憶體使用,并沒有隔離CPU資源,
通過調整槽的數量,用戶可以定義子任務如何互相隔離,如果每個 TaskManager 有一個槽,這意味著每個 task 組都在單獨的 JVM 中運行,更多個槽意味著更多子任務共享同一 JVM,同一 JVM 中的 task 共享 TCP 連接(通過多路復用)和心跳資訊,它們還可以共享資料集和資料結構,從而減少了每個 task 的開銷,
在這里插入圖片描述
默認情況下,Flink 允許子任務共享槽,即便它們是不同的任務的子任務,但是必須是同一個作業,可以將整個作業的子任務都放入到一個槽中執行,允許槽共享有兩個主要優點:
Flink 集群所需的槽和作業中使用的最大并行度恰好一樣,無需計算程式總共包含多少個任務(具有不同并行度),
容易獲得更好的資源利用,如果沒有槽共享,非密集 子任務(source/map())將阻塞和密集型 子任務(window) 一樣多的資源,通過槽的共享,我們示例中的基本并行度從 2 增加到 6,可以充分利用分配的資源,同時確保繁重的子任務在 TaskManager 之間公平分配,
在這里插入圖片描述

Flink集群環境(flink on yarn)

flink有多種集群的執行環境,大家必須根據不同的任務需要,選擇適當的集群環境進行執行,

Flink Session 集群

集群生命周期:在 Flink Session 集群中,客戶端連接到一個預先存在的、長期運行的集群,該集群可以接受多個作業提交,即使所有作業完成后,集群(和 JobManager)仍將繼續運行直到手動停止 session 為止,因此,Flink Session 集群的壽命不受任何 Flink 作業壽命的約束,

資源隔離:TaskManager槽由 ResourceManager 在提交作業時分配,并在作業完成時釋放,由于所有作業都共享同一集群,因此在集群資源方面存在一些競爭 — 例如提交作業階段的網路帶寬,此共享設定的局限性在于,如果 TaskManager 崩潰,則在此 TaskManager 上運行 task 的所有作業都將失敗;類似的,如果 JobManager 上發生一些致命錯誤,它將影響集群中正在運行的所有作業,

其他注意事項:擁有一個預先存在的集群可以節省大量時間申請資源和啟動 TaskManager,有種場景很重要,作業執行時間短并且啟動時間長會對端到端的用戶體驗產生負面的影響 — 就像對簡短查詢的互動式分析一樣,希望作業可以使用現有資源快速執行計算,
任務提交方式:

./bin/flink run -t yarn-session \
  -Dyarn.application.id=application_XXXX_YY \
  ./examples/streaming/TopSpeedWindowing.jar

Flink pre-Job 集群

集群生命周期:在 Flink Job 集群中,可用的集群管理器(例如 YARN)用于為每個提交的作業啟動一個集群,并且該集群僅可用于該作業,在這里,客戶端首先從集群管理器請求資源啟動 JobManager,然后將作業提交給在這個行程中運行的 Dispatcher,然后根據作業的資源請求惰性的分配 TaskManager,一旦作業完成,Flink Job 集群將被拆除,

資源隔離:JobManager 中的致命錯誤僅影響在 Flink Job 集群中運行的一個作業,

其他注意事項:由于 ResourceManager 必須應用并等待外部資源管理組件來啟動 TaskManager 行程和分配資源,因此 Flink Job 集群更適合長期運行、具有高穩定性要求且對較長的啟動時間不敏感的大型作業,

以前,Flink Job 集群也被稱為 job (or per-job) 模式下的 Flink 集群,
Kubernetes 不支持 Flink Job 集群,

./bin/flink run -t yarn-per-job --detached ./examples/streaming/TopSpeedWindowing.jar

detached 引數表明任務一旦提交,客戶端行程就終止了,集群會繼續負責執行,
detached模型下如果需要繼續查詢任務執行情況,可以使用如下命令:

# 查詢集群上運行的任務
./bin/flink list -t yarn-per-job -Dyarn.application.id=application_XXXX_YY
# 取消正在運行的任務
./bin/flink cancel -t yarn-per-job -Dyarn.application.id=application_XXXX_YY <jobId>

Flink Application 集群

集群生命周期:Flink Application 集群是專用的 Flink 集群,僅從 Flink 應用程式執行作業,并且 main()方法在集群上而不是客戶端上運行,提交作業是一個單步驟程序:不需要先啟動 Flink 集群,然后將作業提交到現有的 session 集群;相反,將應用程式邏輯和依賴打包成一個可執行的作業 JAR 中,并且由flink集群(ApplicationClusterEntryPoint)負責呼叫 main()方法來提取 JobGraph,例如,這允許你像在 Kubernetes 上部署任何其他應用程式一樣部署 Flink 應用程式,因此,Flink Application 集群的壽命與 Flink 應用程式的壽命有關,

資源隔離:在 Flink Application 集群中,ResourceManager 和 Dispatcher 作用于單個的 Flink 應用程式,相比于 Flink Session 集群,它提供了更好的隔離,

Flink Job 集群可以看做是 Flink Application 集群”客戶端運行“的替代方案,
任務提交方式:

./bin/flink run-application -t yarn-application ./examples/streaming/TopSpeedWindowing.jar

Flink的編程模型

Flink的編程模型
我們常用的Flink編程API有DataStream、DataSet、Table、SQL,每種API的抽象級別如圖所示,最底層的Stateful Stream Processing是flink內部核心API,一般我們不會用到,之上就是我們常用的DataStream和DataSet API,分別代表流式和批處理的API,但隨著Flink的批流一體,已經基本都是用DataStream來代替DataSet來使用了,在此之上就是Table API,可以像操作資料庫表一樣來進行關聯、統計、聚合等操作,最上層就是我們比較熟悉的SQL陳述句了,可以用簡單的SQL陳述句完成資料的處理操作,

DataStream

常用算子

1、map
DataStream → DataStream
簡單的轉換操作,將一個輸入轉換成一個輸出,

DataStream<Integer> dataStream = //...
dataStream.map(new MapFunction<Integer, Integer>() {
    @Override
    public Integer map(Integer value) throws Exception {
        return 2 * value;
    }
});

2、flatMap
DataStream → DataStream
簡單的轉換操作,將一個輸入轉換成0個或多個輸出,

dataStream.flatMap(new FlatMapFunction<String, String>() {
    @Override
    public void flatMap(String value, Collector<String> out)
        throws Exception {
        for(String word: value.split(" ")){
            out.collect(word);
        }
    }
});

3、Filter
DataStream → DataStream
過濾操作,只保留回傳true的資料,

dataStream.filter(new FilterFunction<Integer>() {
    @Override
    public boolean filter(Integer value) throws Exception {
        return value != 0;
    }
});

4、KeyBy
DataStream → KeyedStream
磁區操作,根據指定的函式對所有資料進行磁區,函式回傳值相同的資料歸為一個磁區,
注意:由于結果取hash進行磁區,因此key必須要實作hashcode,且不能使用陣列,

dataStream.keyBy(value -> value.getSomeKey());
dataStream.keyBy(value -> value.f0);

5、Reduce
KeyedStream → DataStream
根據指定的操作將多個資料項合并成一個,

keyedStream.reduce(new ReduceFunction<Integer>() {
    @Override
    public Integer reduce(Integer value1, Integer value2) throws Exception {
        return value1 + value2;
    }
});

6、Window
KeyedStream → WindowedStream
將已經磁區的資料,根據時間視窗再進行劃分,例如:根據第一個欄位進行磁區,然后根據資料到來時間,每隔5秒形成一個子磁區,代碼如下:

dataStream
  .keyBy(value -> value.f0)
  .window(TumblingEventTimeWindows.of(Time.seconds(5))); 

在這里插入圖片描述
7、WindowAll
DataStream → AllWindowedStream
類似window操作,但是不需要提前磁區,可以作用于整個資料流(DataStream)上

dataStream.windowAll(TumblingEventTimeWindows.of(Time.seconds(5)));

8、Window Apply
WindowedStream → DataStream
AllWindowedStream → DataStream
對每個時間磁區進行具體操作,例如計算每個時間磁區內的總和:

windowedStream.apply(new WindowFunction<Tuple2<String,Integer>, Integer, Tuple, Window>() {
    public void apply (Tuple tuple,
            Window window,
            Iterable<Tuple2<String, Integer>> values,
            Collector<Integer> out) throws Exception {
        int sum = 0;
        for (value t: values) {
            sum += t.f1;
        }
        out.collect (new Integer(sum));
    }
});

// applying an AllWindowFunction on non-keyed window stream
allWindowedStream.apply (new AllWindowFunction<Tuple2<String,Integer>, Integer, Window>() {
    public void apply (Window window,
            Iterable<Tuple2<String, Integer>> values,
            Collector<Integer> out) throws Exception {
        int sum = 0;
        for (value t: values) {
            sum += t.f1;
        }
        out.collect (new Integer(sum));
    }
});

引數介紹:

  • tuple: 代表上一步的key
  • windows: 代表當前視窗
  • values: 代表當前視窗內的所有資料
  • out: 用于輸出資料

9、WindowReduce
WindowedStream → DataStream
在每個時間視窗磁區上進行reduce操作,也就是合并操作,例如求和、取平均等等操作,

windowedStream.reduce (new ReduceFunction<Tuple2<String,Integer>>() {
    public Tuple2<String, Integer> reduce(
    	Tuple2<String, Integer> value1, 
    	Tuple2<String, Integer> value2) throws Exception {
        return new Tuple2<String,Integer>(value1.f0, value1.f1 + value2.f1);
    }
});

10、Union
DataStream* → DataStream
將所有流的資料合并起來,形成一個流,如果相同的流合并會導致資料重復一遍,只能對相同型別資料的流進行合并,

dataStream.union(otherStream1, otherStream2, ...);

11、Window Join
DataStream,DataStream → DataStream
Join two data streams on a given key and a common window.
將2個流根據指定條件join起來,類似于資料庫中2個表的join操作,然后再形成時間視窗:

dataStream.join(otherStream)
    .where(<key selector>).equalTo(<key selector>)
    .window(TumblingEventTimeWindows.of(Time.seconds(3)))
    .apply (new JoinFunction () {...});

12、Interval Join
KeyedStream,KeyedStream → DataStream
將2給KeyedStream流用相同的key在指定的時間間隔內join起來,2個流的時間間隔滿足條件:
e1.timestamp + lowerBound <= e2.timestamp <= e1.timestamp + upperBound.

// join后的流滿足條件:
// key1 == key2 && leftStream.Timestamp - 2s < rightStream.Timestamp < leftStream.Timestamp + 2s
leftStream.intervalJoin(rightStream)
    .between(Time.milliseconds(-2), Time.milliseconds(2)) // 指定時間誤差上限和下限
    .upperBoundExclusive(true) // 可選引數:不包含上限
    .lowerBoundExclusive(true) // 可選引數:不包含下限
    .process(new IntervalJoinFunction() {...});

13、Window CoGroup
DataStream,DataStream → DataStream
與join類似,但是它在一個流中沒有找到與另一個匹配的資料還是會輸出,

dataStream.coGroup(otherStream)
    .where(0).equalTo(1)
    .window(TumblingEventTimeWindows.of(Time.seconds(3)))
    .apply (new CoGroupFunction () {...});

14、Connect
DataStream,DataStream → ConnectedStream
connect類似于union操作,將2給流的資料合并,但是union只能對同型別的流進行操作,而connect可以對不同型別的流進行合并,此外,可以在2給流之間共享狀態,

DataStream<Integer> someStream = //...
DataStream<String> otherStream = //...

ConnectedStreams<Integer, String> connectedStreams = someStream.connect(otherStream);

15、CoMap, CoFlatMap
ConnectedStream → DataStream
類似map和flatMap操作,但是只能作用于ConnectedStream上,也即是在執行過connect的流上操作,

connectedStreams.map(new CoMapFunction<Integer, String, Boolean>() {
    @Override
    public Boolean map1(Integer value) { // 第一個流的map操作
        return true;
    }

    @Override
    public Boolean map2(String value) { // 第二個流的map操作
        return false;
    }
});
connectedStreams.flatMap(new CoFlatMapFunction<Integer, String, String>() {

   @Override
   public void flatMap1(Integer value, Collector<String> out) { // 第一個流的flatMap操作
       out.collect(value.toString());
   }

   @Override
   public void flatMap2(String value, Collector<String> out) { // 第二個流的flatMap操作
       for (String word: value.split(" ")) {
         out.collect(word);
       }
   }
});

16、Iterate
DataStream → IterativeStream → ConnectedStream #
迭代計算,多用于圖計算、機器學習等特殊領域,

// 定義一個迭代流
IterativeStream<Long> iteration = initialStream.iterate();
// 定義每個迭代的具體操作,每個迭代都會執行
DataStream<Long> iterationBody = iteration.map (/*do something*/);
// 定義繼續迭代的資料需要滿足的條件,滿足條件的資料會繼續下一次迭代,
DataStream<Long> feedback = iterationBody.filter(new FilterFunction<Long>(){
    @Override
    public boolean filter(Long value) throws Exception {
        return value > 0;
    }
});
// 指定繼續迭代的條件
iteration.closeWith(feedback);
// 繼續處理跳過迭代的資料
DataStream<Long> output = iterationBody.filter(new FilterFunction<Long>(){
    @Override
    public boolean filter(Long value) throws Exception {
        return value <= 0;
    }
});

在實作特殊演算法的時候可能需要用到迭代計算,具體細節可以參考:
https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/dataset/iterations/
https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/datastream/overview/#iterations
這里暫不具體介紹迭代計算,感興趣的同學可以百度一下,

DataSet

Table API

SQL

參考檔案

Flink官方檔案

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/420477.html

標籤:其他

上一篇:ElasticSearch

下一篇:返回列表

標籤雲
其他(135980) Python(24228) JavaScript(15073) Java(14739) C(11147) 區塊鏈(8215) AI(6935) 基礎類(6313) MySQL(5230) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4207) Linux(4118) PHP(3814) C#(3716) 爪哇(3561) html(3374) C語言(3288) C++語言(3117) sql(3024) R(2776) 熊猫(2774) Java相關(2746) 数组(2739) 疑難問題(2699) 反应(2482) 單片機工控(2479) css(2105) 数据框(1968) Web開發(1951) 节点.js(1938) VBA(1919) 網絡通信(1793) 蟒蛇-3.x(1774) 數據庫相關(1767) VB基礎類(1755) .NETCore(1671) ASP.NET(1650) 開發(1646) 系統維護與使用區(1617) C++(1582) 列表(1581) 基礎和管理(1579) json(1568) JavaEE(1566) 安卓(1523) HtmlCss(1519) 專題技術討論區(1515) Windows客戶端使用(1484) 扑(1469) iOS(1432) 查询(1408) .NET技术(1404) 打字稿(1376) Unity3D(1366) VCL組件開發及應用(1353) sql-server(1287) Qt(1283) 细绳(1226) HTML(CSS)(1220)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • Java開發之實時計算--Flink

    簡介介紹計算框架對java開發的重要性介紹flink的架構介紹flink的基本概念:常用算子、checkpoint、state、window介紹flink的編程模型:DataStream、DataSet、Table API、SQL介紹flink的部署計算框架每個Java開發一定要懂至少一個流行的計算框架,因為現在的資料量越來越大,光靠資料庫或者手寫代碼去實作難度已經越來越大,不僅涉及到資源調度,還要考慮分布式,并且還要考慮高可用、容錯等等,因此我們需要借助現有的分布式計算框架來實作我們大規...

    uj5u.com 2022-01-25 07:25:33 more
  • ElasticSearch

    介紹了ElasticSearch的基本概念,以及相關使用,并結合專案中的業務進行了總結。...

    uj5u.com 2022-01-25 07:25:08 more
  • hive中多表full join主鍵重復問題

    目錄0. 其他1. 問題描述2. 問題復現2.1. 建表陳述句2.2. 插入資料2.3. 查詢SQL以及問題3. 問題原因4. 問題解決0. 其他1. 問題描述在Hive中(其他類似SQL,比如PostgreSQL可能也存在此問題),當對多張表(3張及以上)進行full join時,會存在每張表的主鍵都是唯一,但當full join后,會發現主鍵可能有重復。2. 問題復現2.1. 建表陳述句create table realtime_dw......

    uj5u.com 2022-01-25 07:24:53 more
  • RabbitMQ 超詳細入門篇

    RabbitMQ 入門篇????MQ 的基本概念:什么是 MQ ?MQ全稱為Message Queue即訊息佇列"訊息佇列" 是在訊息的傳輸程序中保存訊息的容器它是典型的:生產者————消費者模型生產者不斷向訊息佇列中生產訊息 ———————— 消費者不斷的從佇列中獲取訊息.這樣的好處: 生產者只需要關注發訊息,消費者只需要關注收訊息,二者沒有業務邏輯的侵入,這樣就實作了生產者和消費者的解耦.為什么要使用 MQ?或者說MQ 有什么好處,MQ 主要可以實作三種功能:服務解耦...

    uj5u.com 2022-01-25 07:23:56 more
  • 九章云極DataCanvas公司榮獲機器之心三大獎項,助力產業數智化升級

    近日,國內領先的前沿科技媒體和產業服務平臺機器之心發布了「AI 中國」機器之心 2021 年度榜單。九章云極DataCanvas公司憑借在人工智能領域優秀的技術、豐富的AI解決方案、智能化場景的創新應用以及適合國內市場的商業模式,入選 “最佳人工智能公司 TOP 30”、“最具商業價值解決方案TOP30”、“最具創新價值落地案例TOP30”。圖片來源:機器之心作為人工智能技術及產業發展的風向標,機器之心「AI中國」年度評選自2017年設立,已連續舉辦5屆,成為國內人工智能界的權威年度獎項之一。本次榜單...

    uj5u.com 2022-01-25 07:22:09 more
  • 2021—很有意義的一年

    最大的改變2021年,對于我來說,最大的改變應該就是有在努力想要提高自己的溝通能力。我的溝通能力和表達能力對于我來說,就是一個永遠搬不動的大山,擋在我前進的路上。其實,我知道自己的弱點,也想要改變,但是就是不付諸行動,也不知咋改變這種現狀。直到離開學校,開始步入社會,進入了一個完全陌生的圈子。很慶幸的是,遇到了一個特別好的導師,他給了我很多的幫助,給我提了很多建議,不管是作業上、生活上、還是人生發展,都是很寶貴的建議。由于我的性格,我有時候不敢在群里發言,導師經常鼓勵我要多在群上發言,這樣可以克服交流的...

    uj5u.com 2022-01-25 07:21:57 more
  • Centos7下安裝Jdk1.8

    Centos7下安裝Jdk1.8官網下載jdk-8u202-linux-x64.tar.gz下載后使用檔案傳輸工具SecureFX上傳服務器/opt/software目錄。(這里是在/opt/目錄下創建了software、module檔案夾)# 解壓包存放目錄$ mkdir -p /opt/module# 壓縮包存放目錄$ mkdir -p /opt/software查看當前linux是否裝有java$ java -version如果有則卸載原裝版本java#查看和ope...

    uj5u.com 2022-01-25 07:21:48 more
  • ByteV打造3D海上風電監控平臺 ——助力風電能源可持續發展

    ByteV自主研發了3D海上風電監控平臺有著豐富的組態化可供選擇,本文將介紹如何運用ByteV豐富的2D、3D組態搭建可視化解決方案。風電廠是指采用風力發電形式的電廠。風電廠在生產的程序中,風力發電的原理是比較簡單的。風能是可再生能源,同時也屬于清潔能源。隨著我國經濟技術的不斷提高,風電廠生產產業規模不斷擴大,并且數量也大幅度增加。通過風能發電不僅可以減少能源的消耗,同時也會減少發電程序對環境的污染。海上風電是可再生能源發展的重要領域,是推動風電技術進步以及產業升級的重要力量,是促進能源結構調整的重要...

    uj5u.com 2022-01-25 07:21:24 more
  • 第一次理事會會議內容摘要2022.1.23

    北京時間2022年1月23日星期日上午,DBC新年的第一次線上會議在Discord上圓滿召開。中國、美國、日本等理事代表都參與了會議。會議主要圍繞社區提案如何更好地獲得理事會的審核與通過展開,同時對Swap老鏈上DBC的方式進行了深入討論,核心內容總結如下:1.理事會的權利與義務是審核與批復對DBC生態有利的提案,代表社區合理規劃、運用國會資金使得生態健康發展——但目前的情況是,很多提案提交reddit后,因為網路限制和語言障礙等原因,很少得到國內理事的投票與關注。討論后提出的......

    uj5u.com 2022-01-25 07:20:38 more
  • 用戶畫像資料指標體系之其他常見標簽劃分

    趙宏田 老師的 用戶畫像·方法論與工程化解決方案 一書讀后筆記主要記錄的是該書中 用戶畫像之資料指標體系 一章...

    uj5u.com 2022-01-25 07:20:28 more