日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

數據消費框架原理

更新時間:

Tunnel Client為通道服務的自動化數據消費框架。使用通道服務前,需要了解Tunnel Client的自動化數據處理流程、自動化的負載均衡和良好的水平擴展性以及自動化的資源清理和容錯處理。

背景信息

Tunnel Client可以解決全量和增量數據處理時的常見問題,例如負載均衡、故障恢復、Checkpoint、分區信息同步確保分區信息消費順序等。使用Tunnel Client后,您只需要關心每條記錄的處理邏輯。

Tunnel Client的代碼詳情請參見Github

自動化數據處理流程

Tunnel Client通過每一輪的定時心跳探測(Heartbeat)進行活躍Channel的探測,Channel和ChannelConnect狀態的更新,和數據處理任務的初始化、運行和結束等。

  1. Tunnel Client資源的初始化

    1. 將Tunnel Client狀態由Ready置為Started。

    2. 根據TunnelWorkerConfig中的HeartbeatTimeout和ClientTag(客戶端標識)等配置進行ConnectTunnel操作,并和Tunnel服務端進行聯通,以獲取當前Tunnel Client對應的ClientId。

    3. 初始化ChannelDialer,用于新建ChannelConnect。

      每一個ChannelConnect都會和一個Channel一一對應,ChannelConnect上會記錄有數據消費的位點。

    4. 根據用戶傳入的處理數據的Callback和TunnelWorkerConfig中CheckpointInterval(向服務端記數據位點的間隔)包裝出一個帶自動記Checkpoint功能的數據處理器。

    5. 初始化TunnelStateMachine,用于進行Channel狀態機的自動化處理。

  2. 固定間隔進行Heartbeat

    心跳的間隔由TunnelWorkerConfig中的heartbeatIntervalInSec參數決定。

    1. 進行Heartbeat請求,從Tunnel服務端獲取最新可用的Channel列表,Channel中會包含有ChannelId、Channel的版本和Channel的狀態信息。

    2. 將服務端獲取到的Channel列表和本地內存中的Channel列表進行Merge,然后進行ChannelConnect的新建和update,規則如下:

      • Merge:基于本輪從服務端獲取的最新Channel列表,對于相同ChannelId,認定版本號更大的為最新狀態,直接進行覆蓋,對于未出現的Channel,則直接插入。

      • 新建ChannelConnect:如果此Channel未新建其對應的ChannelConnect,則會新建一個WAIT狀態的ChannelConnect,如果對應的Channel狀態為OPEN狀態,則同時會啟動該ChannelConnect上處理數據的循環流水線任務(ReadRecords&&ProcessRecords),處理詳情請參見代碼中的ProcessDataPipeline類。

      • Update已有ChannelConnect:Merge完成后,如果Channel對應的ChannelConnect存在,則根據相同ChannelId的Channel狀態來更新ChannelConnect的狀態,例如Channel為CLOSE狀態也需要將ChannelConnect的狀態置為Closed,進而終止處理任務的流水線任務,詳情請參見代碼中的ChannelConnect.notifyStatus方法。

  3. Channel狀態自動機說明

    在心跳模式下,Tunnel服務端會根據保持心跳的Tunnel Client數量,調度可以消費的分區到不同Tunnel Client上,以達到負載均衡的目的。

    Tunnel服務端通過Channel狀態機來驅動每個Channel的消費以及進行負載均衡,如下圖所示。

    Tunnel服務端和Tunnel Client通過一個心跳和Channel版本號更新機制進行狀態變換通信。

    1. 每個Channel最初均處于WAIT狀態。

    2. 增量類型Channel需要等待父分區上Channel消費完畢轉為TERMINATED后才可以轉為可消費狀態OPEN。

    3. OPEN狀態的分區會調度到各個Tunnel Client上。

    4. 在需要負載均衡時,Tunnel服務端和Tunnel Client有一個Channel狀態OPEN->CLOSING->CLOSED的調度協議,Tunnel Client在消費完一個全量Channel split或者發生了分裂的增量Channel后,會將Channel匯報為TERMINATED。

    Channel 狀態自動機

自動化的負載均衡和良好的水平擴展性

  • 運行多個Tunnel Client對同一個Tunnel(TunnelId相同)進行消費時,在Tunnel Client執行Heartbeat時,Tunnel服務端會自動對Channel資源進行重分配,讓活躍的Channel盡可能的均攤到每一個Tunnel Client上,達到對資源進行負載均衡的目的。

  • 在水平擴展性方面,可以通過增加Tunnel Client的數量來完成,Tunnel Client可以在同一個機器或者不同機器上。

自動化的資源清理和容錯處理

  • 資源清理:當Tunnel Client沒有被正常shutdown時(例如異常退出或者手動結束),會自動進行資源回收,包括釋放線程池、自動調用在Channel上注冊的shutdown方法、關閉Tunnel連接等。

  • 容錯處理:當Tunnel Client出現Heartbeat超時等非參數類錯誤時,表格存儲會自動Renew Connect,以保證數據消費可以穩定的進行持續同步。