京東雲開發者|mysql基於binlake同步ES積壓解決方案

来源:https://www.cnblogs.com/Jcloud/archive/2022/11/08/16866957.html
-Advertisement-
Play Games

1 背景與目標 1.1 背景 國際財務泰國每月月初賬單任務生成,或者重算賬單數據,數據同步方案為mysql通過binlake同步ES數據,在同步過程中發現計費事件表,計費結果表均有延遲,ES數據與Mysql數據不一致,導致業務頁面查詢數據不准確,部分核心計算通過ES校驗失敗 1.2目標 解決binl ...


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進行分析,同時針對積壓推薦倆種方案,並從性能合理利用及擴展性分析,簡要介紹方案二並行有序消費策略,希望能夠幫助大家,如有問題,請隨時指出!

作者:任洪波

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 各位好啊,我是會編程的蝸牛,作為java開發者,我們平常肯定會接觸Linux操作系統,其實除了一般的部署應用外,它還可以幫助我們生成密碼。解決我們平常自己想各種複雜密碼的煩惱,以後我會講一講如何安全地保存我們的密碼。 ...
  • 安裝Docker Docker 分為 CE 和 EE 兩大版本。CE 即社區版(免費,支持周期 7 個月),EE 即企業版,強調安全,付費使用,支持周期 24 個月。 Docker CE 分為 stable test 和 nightly 三個更新頻道。 官方網站上有各種環境下的 安裝指南,這裡主要介 ...
  • 一、Installing RabbitMQ-3.10.2 on CentOS 7.9 1 地址 https://www.rabbitmq.com https://github.com/rabbitmq/rabbitmq-server https://github.com/rabbitmq/rabbi ...
  • 蘋果電腦哪款系統活動監控器好用呢?iStat Menus for mac是一款Mac OS電腦硬體信息監控軟體,提供的信息包括 CPU 使用情形、記憶體用量、硬碟使用情形、網路傳輸、機器溫度、風扇轉速等等。在新版本中,您還可以自由的對iStat Menus顯示的信息進行設置,將您關註的系統信息放在頂部 ...
  • redis集群搭建 一、安裝redis 源碼安裝: 1.下載源碼包: wget http://download.redis.io/releases/redis-6.0.7.tar.gz 2.解壓到指定目錄下: tar xf redis-6.0.7.tar.gz -C /usr/local/ 二、編譯 ...
  • 背景 建議至少提交兩份測試報告(從一、二選擇兩個測試case) 一、任選一(建議結合業務選擇,簡單線上業務選tpcb,複雜線上業務選tpcc,偏分析業務選tpch) tpcc tpcb tpch 二、任選一(建議結合業務場景選擇) 並行計算,選擇 RDS PG 12 進行測試 GIS,選擇 RDS ...
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者:YeJinrong/葉金榮 意外發現USER()和CURRENT_USER()的一點不同。 某次在用 ALTER USER 想要修改賬戶密碼時,發 ...
  • 2022年11月7日,Taier1.3版本正式發佈! Taier 是一個大數據分散式可視化的DAG任務調度系統,旨在降低ETL開發成本、提高大數據平臺穩定性,大數據開發人員可以在 Taier 直接進行業務邏輯的開發,而不用關心任務錯綜複雜的依賴關係與底層的大數據平臺的架構實現,將工作的重心更多地聚焦 ...
一周排行
    -Advertisement-
    Play Games
  • 隨著Aspire發佈preview5的發佈,Microsoft.Extensions.ServiceDiscovery隨之更新, 服務註冊發現這個屬於老掉牙的話題解決什麼問題就不贅述了,這裡主要講講Microsoft.Extensions.ServiceDiscovery(preview5)以及如何 ...
  • 概述:通過使用`SemaphoreSlim`,可以簡單而有效地限制非同步HTTP請求的併發量,確保在任何給定時間內不超過20個網頁同時下載。`ParallelOptions`不適用於非同步操作,但可考慮使用`Parallel.ForEach`,儘管在非同步場景中謹慎使用。 對於併發非同步 I/O 操作的數量 ...
  • 1.Linux上安裝Docken 伺服器系統版本以及內核版本:cat /etc/redhat-release 查看伺服器內核版本:uname -r 安裝依賴包:yum install -y yum-utils device-mapper-persistent-data lvm2 設置阿裡雲鏡像源:y ...
  • 概述:WPF界面綁定和渲染大量數據可能導致性能問題。通過啟用UI虛擬化、非同步載入和數據分頁,可以有效提高界面響應性能。以下是簡單示例演示這些優化方法。 在WPF中,當你嘗試綁定和渲染大量的數據項時,性能問題可能出現。以下是一些可能導致性能慢的原因以及優化方法: UI 虛擬化: WPF提供了虛擬化技術 ...
  • 引言 上一章節介紹了 TDD 的三大法則,今天我們講一下在單元測試中模擬對象的使用。 Fake Fake - Fake 是一個通用術語,可用於描述 stub或 mock 對象。 它是 stub 還是 mock 取決於使用它的上下文。 也就是說,Fake 可以是 stub 或 mock Mock - ...
  • 為.net6在CentOS7上面做準備,先在vmware虛擬機安裝CentOS 7.9 新建CentOS764位的系統 因為CentOS8不更新了,所以安裝7;簡單就一筆帶過了 選擇下載好的操作系統的iso文件,下載地址https://mirrors.aliyun.com/centos/7.9.20 ...
  • 經過前面幾篇的學習,我們瞭解到指令的大概分類,如:參數載入指令,該載入指令以 Ld 開頭,將參數載入到棧中,以便於後續執行操作命令。參數存儲指令,其指令以 St 開頭,將棧中的數據,存儲到指定的變數中,以方便後續使用。創建實例指令,其指令以 New 開頭,用於在運行時動態生成並初始化對象。方法調用指... ...
  • LiteDB 是一個輕量級的嵌入式 NoSQL 資料庫,其設計理念與 MongoDB 類似,但它是完全使用 C# 開發的,因此與 C# 應用程式的集成非常順暢。與 SQLite 相比,LiteDB 提供了 NoSQL(即鍵值對)的數據存儲方式,並且是一個開源且免費的項目。它適用於桌面、移動以及 We ...
  • 1 開源解析和拆分文檔 第三方的工具去對文件解析拆分,去將我們的文件內容給提取出來,並將我們的文檔內容去拆分成一個小的chunk。常見的PDF word mark down, JSON、HTML。都可以有很好的一些模塊去把這些文件去進行一個東西去提取。 優勢 支持豐富的文檔類型 每種文檔多樣化選擇 ...
  • OOM是什麼?英文全稱為 OutOfMemoryError(記憶體溢出錯誤)。當程式發生OOM時,如何去定位導致異常的代碼還是挺麻煩的。 要檢查OOM發生的原因,首先需要瞭解各種OOM情況下會報的異常信息。這樣能縮小排查範圍,再結合異常堆棧、heapDump文件、JVM分析工具和業務代碼來判斷具體是哪 ...