京東雲開發者|mysql基於binlake同步ES積壓解決方案
- 2022 年 11 月 8 日
- 筆記
- elasticsearch, MySQL, 技術分享, 數據庫
1 背景與目標
1.1 背景
國際財務泰國每月月初賬單任務生成,或者重算賬單數據,數據同步方案為mysql通過binlake同步ES數據,在同步過程中發現計費事件表,計費結果表均有延遲,ES數據與Mysql數據不一致,導致業務頁面查詢數據不準確,部分核心計算通過ES校驗失敗
1.2目標
解決binlake到JMQ積壓同步ES延遲問題
2 當前業務流程
2.1 流程圖
現有業務基本流程如下圖,包含運營端和外部數據接入,整體操作到數據存儲流程
2.2 數據流
3 問題分析
3.1 問題現象
jmq積壓,報警
國內站截圖如下
3.2 篩查分析
普及:JMQ默認生產者發送消息QPS受到主題的broker數量影響,(8w/s)/broker
3.2.1 MQ積壓分析
1)分析原因一、ES寫入量大,導致ES寫入QPS瓶頸
ES寫入瓶頸需要進行壓測,才能確定實際是否達到瓶頸;
通過查詢集群負載,寫入隊列有無積壓,cpu高不高,來定位
以下為調整MQ批量消費大小後的ES監控
寫入隊列無積壓,CPU不高,寫入QPS沒有達到瓶頸
2)分析原因二、ES寫入慢導致消費積壓
ES解析服務解析慢,瓶頸在ES解析處
根據當前系統CPU、負載信息定位是否服務器性能滿負荷,是否擴容
無報警信息,整體運行平穩,基本排除業務資源達到瓶頸問題引起寫入慢
MQ消費端消費慢,瓶頸在消費並發處
當前主題分片數3,隊列數為15,默認最大並發數為15*10,報警當時入隊數500~700/s
定位問題,為MQ消費慢,其根本原因為受到ES-Parse業務系統處理速度影響
3.3 臨時處理方案
開啟mq並行消費策略,寫入QPS顯著增加
4 如何提升消費速率,提升寫入ES速率
造成問題原因核心點是MQ積壓,業務系統消費慢,MQ入隊數大於出隊數,導致積壓
4.1 原理分析
4.1.1 存儲流程解析
第一步:binlake訂閱mysql binlog
第二步:發MQ,JMQ數據傳輸
第三步:消費JMQ數據,ES Paser數據解析,
第四步:數據存儲
4.1.2 binlake基本原理
4.1.3 binlake發送MQ過程
4.1.4 JMQ消費原理
JMQ消費默認就是批量消費
消費原理如下圖
批量消費與並行消費原理如下圖
通過分析,在未開啟並行消費前提下,當前主題最大處並發的消費處理能力即是隊列數
4.2 提升消費速率的幾種方案
4.2.1MQ增加消費速度方法
擴容,增加並發消費能力
針對MQ默認情況下,一切擴容都能解決問題,增大分片數,增加隊列數
需要額外資源,申請擴容新的broker,同時考慮增加消費端實例
增加批量大小
首先保證,業務系統(ES-Parse)消費MQ消息,處理10條和處理100條速度基本一樣
實踐:國際財務針對此方法進行代碼邏輯改造
開啟並行數
理論上增加(並行數/批量數)的倍數並發處理能力
要求數據無序,針對亂序,數據存儲,不影響業務
4.2.2 並行有序的方案
1)實現數據冪等性,增加緩存,並行消費策略
方案流程
基礎實現流程:
1)根據binlake發送mq,在mq端開啟並行消費,確保並行消費
2)根據業務單號對,單號加鎖(如麥哲倫對運單號加鎖,即對單號加分佈式鎖),根據對應的ID獲取ES數據。
3)校驗數據是否有效,若查詢無數據,則直接新增;若查詢的數據狀態大於當前數據狀態,則直接拋棄,若查詢狀態小於當前數據狀態,則直接更新數據
4)更新緩存並釋放鎖
優點
- 指定資源情況下,增大消費端並發
- 可以開啟並行消費,且保證順序消費
- 可以使得資源充分利用,增加消費性能
缺點
- 增加毫秒級緩存額外開銷
實踐:麥哲倫運單中心針對此方案實現binlake數據同步ES
2)binlake主題分發子主題,顯示增大並發策略
優點:
- 邏輯相對簡單,不需要開發複雜邏輯,無需引入額外中間件
- 預估轉發消息速率即是實際處理速率
提升速率計算:
- 原主題單線程處理一條數據存儲到ES時間為es_time,舉例為50ms,每秒吞吐量是20條
- 現單線程轉發MQ一條數據時間為trans_time,舉例為20ms,每秒轉發吞吐量50條
- 假設轉發topic為N個子主題,則吞吐量理論為n*20實際小於轉發吞吐量50,此處多子主題對cpu核數競爭
- 提升吞吐量為=(1000ms/trans_time )轉發吞吐量 – (1000ms/es_time)原有吞吐量
缺點
- 擴展性不好,實際結果有待驗證,小於預估值
實踐:跨境赤道分發中心實現類似功能實踐,消息轉發,其他MQ實現
3)倆種方案對比
主題較少一個倆個主題情況下,且業務處理比較耗時情況下,不想額外開發,可選方案二
長期方案選擇方案一,並行消費策略,可伸縮性,可擴展,支持動態擴容
5.總結
針對MQ積壓問題,並行消費可以是解決問題的一大利器,本文從binlake同步ES進行分析,同時針對積壓推薦倆種方案,並從性能合理利用及擴展性分析,簡要介紹方案二並行有序消費策略,希望能夠幫助大家,如有問題,請隨時指出!