原创 Flink Window&Time 原理

Flink 中可以使用一套 API 完成對有界數據集以及無界數據的統一處理,而無界數據集的處理一般會伴隨着對某些固定時間間隔的數據聚合處理。比如:每五分鐘統計一次系統活躍用戶、每十秒更新熱搜榜單等等 這些需求在 Flink 中都由 Wind

原创 如何優雅的升級 Flink Job?

Flink 作爲有狀態計算的流批一體分佈式計算引擎,會在運行過程中保存很多的「狀態」數據,並依賴這些數據完成任務的 Failover 以及任務的重啓恢復。 那麼,請思考一個問題:如果程序升級迭代調整了這些「狀態」的數據結構以及類型,Flin

原创 關於 Flink 狀態與容錯機制

Flink 作爲新一代基於事件流的、真正意義上的流批一體的大數據處理引擎,正在逐漸得到廣大開發者們的青睞。就從我自身的視角看,最近也是在數據團隊把一些原本由 Flume、SparkStreaming、Storm 編寫的流式作業往 Flink

原创 如何使用建造者模式構造複雜對象?

『建造者模式』是一種簡化複雜對象構建過程的設計模式,他的核心夙願是:把對象的構建和表述分離。 舉個栗子 每種食品包裝上都會有一個營養成分表,每份的含量、每罐的含量、每份卡路里、脂肪、碳水化合物、鈉等,還可能會有其他 N 種可選數據,大多數產

原创 工廠模式和抽象工廠的區別是什麼?

今天聊一聊大家最耳熟能詳的設計模式,『工廠模式』。實際上這個設計模式有三個變種,分別是『簡單工廠模式』、『工廠方法模式』以及『抽象工廠模式』,可能大部人所熟知的是前兩種,抽象工廠模式有一定的場景限制,很少出現在大家的視野中,不過今天我們一併

原创 你瞭解單例模式的最佳實踐嗎?

『單例模式』是一種創建型的設計模式,保證一個類只有一個實例,並提供一個訪問它的全局訪問點。 在一個系統中,一個類經常會被使用在不同的地方,通過單例模式,我們可以避免多次創建多個實例,從而節約系統資源。 單例模式往往有三個特徵,一個類只能有一

原创 被各種嵌套判斷噁心的你,想到狀態模式了嗎?

今天和大家聊『狀態模式』這個設計模式,也是由於業務上遇到了一個極其難以維護的訂單狀態,不得不去重構。 阿里規約其中就有一條: 簡單來說,狀態模式用於消除冗餘的大量『if else』判斷。 舉個例子 業務中有一個訂單表,其中訂單狀態大約有如

原创 金三銀四跳槽季,這些面試題你都會了嗎?

又是一季 “金三銀四” ,你面試了嗎? Q1:String、StringBuffer、StringBuilder 有什麼區別? Tips:首先要整理出 String 的基本特性,Immutable、不可變等特性,其次是後兩者與前者的區別,最

原创 Redis 哨兵模式(Sentinel)

上一篇我們介紹了 redis 主從節點之間的數據同步複製技術,通過一次全量複製和不間斷的命令傳播,可以達到主從節點數據同步備份的效果,一旦主節點宕機,我們可以選擇一個工作正常的 slave 成爲新的主節點,並讓其他 slave 去同步它。

原创 Redis 主從複製技術原理

基於前面介紹的 Redis 內容,Redis 只能作爲一個單機內存數據庫,一旦服務器宕機即不能提供服務,即便能通過持久化策略重啓恢復數據,往往也做不到百分之百還原。再一個就是,單機的 Redis 需要處理所有的客戶端請求,包括讀和寫操作,壓

原创 Redis 中的客戶端

Redis 是一個客戶端服務端的程序,服務端提供數據存儲等等服務,客戶端連接服務端並通過向服務端發送命令,讀取或寫入數據,簡單來說,客戶端就是某種工具,我們通過它與 Redis 服務端進行通訊並完成數據操作。 客戶端並不是 Redis 的核

原创 Redis 中的數據持久化策略(RDB)

Redis 是一個內存數據庫,所有的數據都直接保存在內存中,那麼,一旦 Redis 進程異常退出,或服務器本身異常宕機,我們存儲在 Redis 中的數據就憑空消失,再也找不到了。 Redis 作爲一個優秀的數據中間件,必定是擁有自己的持久化

原创 Redis 中的數據持久化策略(AOF)

上一篇文章,我們講的是 Redis 的一種基於內存快照的持久化存儲策略 RDB,本質上他就是讓 redis fork 出一個子進程遍歷我們所有數據庫中的字典,進行磁盤文件的寫入。 但其實這種方式是有缺點的,先不說阻塞式 save 調用會阻塞

原创 Redis 中的數據庫

前面我們花了很多的時間介紹了 redis 中基本的數據結構,及其內部的實現情況,這些都是非常基礎的東西,可能不經意間你就會用到他們,希望你花點時間瞭解一下。 接下來,我們將走近 redis 數據庫,學習各種操作 redis 的命令,並介紹它

原创 Redis 的底層數據結構(對象)

目前爲止,我們介紹了 redis 中非常典型的五種數據結構,從 SDS 到 壓縮列表,這都是 redis 最底層、最常用的數據結構,相信你也掌握的不錯。 但 redis 實際存儲鍵值對的時候,是基於對象這個基本單位的,並且往往一個對象下面對