1. 程式人生 > >kafka備份機制——zk選舉leader,leader在broker裏負責備份

kafka備份機制——zk選舉leader,leader在broker裏負責備份

情況 協作 版本 遊戲 page 支持 .net col 模式

Kafka架構

技術分享

  如上圖所示,一個典型的kafka集群中包含若幹producer(可以是web前端產生的page view,或者是服務器日誌,系統CPU、memory等),若幹broker(Kafka支持水平擴展,一般broker數量越多,集群吞吐率越高),若幹consumer group,以及一個Zookeeper集群。Kafka通過Zookeeper管理集群配置,選舉leader,以及在consumer group發生變化時進行rebalance。producer使用push模式將消息發布到broker,consumer使用pull模式從broker訂閱並消費消息

利用 Apache Kafka 系統架構的設計思路

  • 示例:網絡遊戲

假設我們正在開發一個在線網絡遊戲平臺,這個平臺需要支持大量的在線用戶實時操作,玩家在一個虛擬的世界裏通過互相協作的方式一起完成每一個任務。由於遊戲當中允許玩家互相交易金幣、道具,我們必須確保玩家之間的誠信關系,而為了確保玩家之間的誠信及賬戶安全,我們需要對玩家的 IP 地址進行追蹤,當出現一個長期固定 IP 地址忽然之間出現異動情況,我們要能夠預警,同時,如果出現玩家所持有的金幣、道具出現重大變更的情況,也要能夠及時預警。此外,為了讓開發組的數據工程師能夠測試新的算法,我們要允許這些玩家數據進入到 Hadoop 集群,即加載這些數據到 Hadoop 集群裏面。

對於一個實時遊戲,我們必須要做到對存儲在服務器內存中的數據進行快速處理,這樣可以幫助實時地發出預警等各類動作。我們的系統架設擁有多臺服務器,內存中的數據包括了每一個在線玩家近 30 次訪問的各類記錄,包括道具、交易信息等等,並且這些數據跨服務器存儲。

我們的服務器擁有兩個角色:首先是接受用戶發起的動作,例如交易請求,其次是實時地處理用戶發起的交易並根據交易信息發起必要的預警動作。為了保證快速、實時地處理數據,我們需要在每一臺機器的內存中保留歷史交易信息,這意味著我們必須在服務器之間傳遞數據,即使接收用戶請求的這臺機器沒有該用戶的交易信息。為了保證角色的松耦合,我們使用 Kafka 在服務器之間傳遞信息 (數據)。

  • Kafka 特性

Kafka 的幾個特性非常滿足我們的需求:可擴展性、數據分區、低延遲、處理大量不同消費者的能力。這個案例我們可以配置在 Kafka 中為登陸和交易配置同一個主題。由於 Kafka 支持在單一主題內的排序,而不是跨主題的排序,所以我們為了保證用戶在交易前使用實際的 IP 地址登陸系統,我們采用了同一個主題來存儲登陸信息和交易信息。

當用戶登陸或者發起交易動作後,負責接收的服務器立即發事件給 Kafka。這裏我們采用用戶 id 作為消息的主鍵,具體事件作為值。這保證了同一個用戶的所有的交易信息和登陸信息被發送到 Kafka 分區。每一個事件處理服務被當作一個 Kafka 消費者來運行,所有的消費者被配置到了同一個消費者群組,這樣每一臺服務器從一些 Kafka 分區讀取數據,一個分區的所有數據被送到同一個事件處理服務器 (可以與接收服務器不同)。當事件處理服務器從 Kafka 讀取了用戶交易信息,它可以把該信息加入到保存在本地內存中的歷史信息列表裏面,這樣可以保證事件處理服務器在本地內存中調用用戶的歷史信息並做出預警,而不需要額外的網絡或磁盤開銷。

圖 1. 遊戲設計圖

技術分享

>為了多線程處理,我們為每一個事件處理服務器或者每一個核創建了一個分區。Kafka 已經在擁有 1 萬個分區的集群裏測試過。

  • 切換回 Kafka

上面的例子聽起來有點繞口:首先從遊戲服務器發送信息到 Kafka,然後另一臺遊戲服務器的消費者從主題中讀取該信息並處理它。然而,這樣的設計解耦了兩個角色並且允許我們管理每一個角色的各種功能。此外,這種方式不會增加負載到 Kafka。測試結果顯示,即使 3 個結點組成的集群也可以處理每秒接近百萬級的任務,平均每個任務從註冊到消費耗時 3 毫秒。

上面例子當發現一個事件可疑後,發送一個預警標誌到一個新的 Kafka 主題,同樣的有一個消費者服務會讀取它,並將數據存入 Hadoop 集群用於進一步的數據分析。

4.3 備份機制

備份機制是Kafka0.8版本的新特性,備份機制的出現大大提高了Kafka集群的可靠性、穩定性。有了備份機制後,Kafka允許集群中的節點掛掉後而不影響整個集群工作。一個備份數量為n的集群允許n-1個節點失敗。在所有備份節點中,有一個節點作為lead節點,這個節點保存了其它備份節點列表,並維持各個備份間的狀體同步。下面這幅圖解釋了Kafka的備份機制:

技術分享

參考:https://www.ibm.com/developerworks/cn/opensource/os-cn-kafka/

http://www.importnew.com/24677.html

kafka備份機制——zk選舉leader,leader在broker裏負責備份