全量資料接入——設計方案
全量資料接入的過程本質上是資料叢集件複雜的事件同步與時間相應的過程,涉及到觸發、反饋、反饋狀態檢查、分批等。因此,需要有一個事件控制組件作為基礎。
一、事件控制組件
1.1 使用zk同步資料
zk路徑規劃:
${zk_base}/${event_group}/${date}/${event_name}/${event_version}.info
說明:${event_version}.info可用於傳遞資訊,由指令碼自行解析
1.2 行為定義
1、觸發事件(trigger)
輸入引數:event_group、event_name、date、event_version
輸出引數:觸發是否成功(true/false)
說明:觸發事件
2、刪除事件(fade)
輸入引數:event_group、event_name、date、event_version
輸出引數:刪除是否成功(true/false)
說明:刪除已發生事件
3、監聽事件(listen)
輸入引數:監聽配置
輸出引數:事件是否發生(true/false)
說明:
(1)監聽事件是否被觸發
(2)監聽配置包含:內部事件/外部事件、事件監聽指令碼(僅外部事件)、{event_group、event_name、date、event_version}(僅內部事件)、timeout、指令碼垂直觸發/水平觸發、正向觸發/反向觸發、關聯響應事件行為、多個被監聽事件的OR/AND邏輯等
(3)時間監聽指令碼輸出引數應符合元件框架格式
4、響應事件(respond)
輸入引數:事件響應指令碼
輸出引數:事件響應成功或失敗(true/false)
說明:輸出引數應符合元件框架格式
1.3 交付形式
以二方庫的形式交付,在元件的基礎上封裝成服務
鏈式呼叫:listen(event0/script)->respond(script)->trigger(event1)-> fade(event4)
說明:
(1)通過配置實現熱載入
(2)成功則繼續,失敗則退出
二、資料接入服務
2.1 切換索引
下文outer_listen表示外部監聽,inner_listen表示內部監聽
1、sn觸發“監聽開始”事件
定時任務->trigger($
2、index_server收集sn機器資訊
定時任務->inner_listen(${hostname}_want_to_pull)
說明:index_server記錄參與分發/切換的機器列表,${hostname}_want_to_pull中攜帶希望pull的索引版本資訊
1、索引構建完成
outer_listen(index_build_done)->trigger(index_data_publish)
2、sn機器拉取資料
inner_listen(index_data_publish)->respond(pull_index_data_script)-> trigger(\${hostname}_pull_done)
說明:每個機器觸發和自己機器名相關聯的事件,方便index_server處理
3、index_server檢查資料分發狀態
inner_listen(\${hostname}_pull_done)->respond(check_distribution_condition)
說明:監聽所有機器列表中的機器,檢查是否合法
4、index_server觸發分批切換
接上一步->respond(switch_index)-> trigger(\${hostname0}_switch)-> respond(check_switch_condition)->trigger(\${hostname1}_switch)-> respond(check_switch_condition)->……->done
說明:index_server完成分組等邏輯後,開始切換
2.2 切索引上線
1、sn機器裝conf包
說明:conf檔案中寫明需要的索引版本資訊(zk路徑表示)
2、重啟sn服務
3、sn啟動時自動檢查本地索引版本是否匹配
4、若不匹配,使用新的conf拉取索引,並觸發切換
三、問題彙總
1、需要索引目錄中攜帶版本資訊