增量全量同步能否一起開,不建議一起開啟,有小概率產生數據一致性問題,例如ABC三個先后間隔很短的時刻,全量在A時刻完成了數據抽取,B時刻數據有更新且立即被增量同步到了目標端,C時刻全量完成了入庫,則B時刻更新的數據將會丟失。
保證數據一致性嚴格的操作順序:暫停被同步表的業務,不再產生與被同步表相關的binlog;等待增量同步通道追平;停止增量同步,開啟全量同步;全量同步完成后繼續開啟增量同步。
常用操作順序:記錄當前增量同步的位點信息;停止增量同步,開啟全量同步;全量同步完成后從之前記錄 的位點信息繼續進行增量同步(最終一致性)。
特別注意問題:由于分布式數據庫的特性,udal禁止對分片鍵做update操作;部分業務為了繞過這種限制,設計對分片鍵的update實際上由兩部分組成:一個片中的delete語句+另一個片中的insert語句,當同步場景為udal->oracle時由于時序問題可能會導致數據不一致;解決方式:
1) 避免出現update分片鍵的情況
2) 將分片鍵和原主鍵一起作為新的聯合主鍵
(需要更改業務)
3) 使用自增的序列作為主鍵
全量同步速度不理想,建議參數和優化:同步速度空表大于有記錄的表,無索引的表大于有索引的表,目標表索引越多,速度越慢,建議索引在同步完成后重建。
#全量批次大小 syncall.manager.batchSize = 200 #jdbc,batch入庫一次處理的數據量 syncall.manager.batchOfInsertUpdate = 10000 # 同步表線程池大小(并發核對目標表的個數) syncall.manager.taskpoolsize = 1 #初始化table信息線程池大小 syncall.manager.initpoolsize = 10 # 批次任務線程池大小(并發批次任務個數)大于或等于querypoolsize syncall.manager.jobpoolsize = 40 # 抽取數據線程池大小(抽取并發度控制)小于或等于jobpoolsize syncall.manager.querypoolsize = 20 # 初始化時建立物理連接的個數 druid.initialSize=10 # 最小連接池數量 druid.minIdle=6 # 最大連接池數量 druid.maxActive=500 # 獲取連接時最大等待時間,單位毫秒。 druid.maxWait=60000 # 申請連接時檢測連接是否有效 druid.test.OnBorrow=true |
問題1:Access denied for user (udal--udal)。
報錯如下: create connection SQLException, url: jdbc:mysql://133.0.xxx.xxx:xxx/stt_iss_161, errorCode 1044, state 42000 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Access denied for user sla@% to database stt_iss_161 |
報錯原因:
賬號或密碼不對,由于源端和目標端的分片數據庫密碼不一樣,在初始化時,兩端的密碼賬號會被程序默認設成一致。
解決辦法:
需要在初始化完成后,將數據源配置 和 增量管理菜單修改為各自的賬號密碼。
問題2:部署pg到kafka的時候時間相差8小時。
異常現象:
PG端時間類型的字段,帶default current_timestamp 時,生成的數據。投遞到目標kafka時時間會增加8小時。
異常原因:
pg數據庫中的表字段類型為`TIMESTAMP WITHOUT TIME ZONE`,未使用時區,跨idc工具投遞中會默認為格林威治時間。
解決辦法:
將pg數據庫中的表字段類型改為`TIMESTAMP WITH TIME ZONE`,使用時區。
問題3:node節點無法自動創建
異常原因及解決辦法:
node機器的用戶密碼過期導致,密碼重置后正常。
問題4:teledb同步到kafka show master status has an error!
異常報錯: java.io.IOException: ErrorPacket [errorNumber=1227, fieldCount=-1, message=Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation, sqlState=42000, sqlStateMarker=#] with command: show master status at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:194) at java.lang.Thread.run(Thread.java:748) |
解決辦法:
為idc用戶賦予權限
GRANT super,REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO idc@%;
問題5:全量同步性能差
異常現象:
全量同步,表包含大字段等類型,每條記錄的大小遠超普通表,出現同步性能差/無法同步現象,例如全量日志中取樣數據大小日志如下:<<<<<< avg one record use [451.274 KB] space ,one batch data use [881.395 MB] space, memory limit is [10 GB] , set data queue size to [11] >>>>>>
調整方法:
調整全量參數,降低每批次數據的大小和數據緩存隊列大小
syncall.manager.batchSize=50
syncall.manager.jobpoolsize=100
syncall.stream.dataQueue=100
使用優化的jvm啟動腳本,例如launch_performance.sh腳本來啟動manager,分配足夠多的內存放到manager目錄下 chmod +x launch_performance.sh 然后指定內存啟動,例如 sh launch_performance.sh memory 60g 60g。
更多精彩干貨分享
點擊下方名片關注
IT那活兒
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129887.html
摘要:最近在學習各大互聯網公司是如何處理數據一致性的。目前已知的有這么幾種數據庫做到情況下的強一致性淘寶淘寶頂級科學家陽振坤微博號阿里正祥,發出一則消息。然后因為數據庫是的,內部把改動到了北美,君就可以看到消息了。 最近在學習各大互聯網公司是如何處理數據一致性的。因為之前從事的不是這個方向的工作,所以并非什么經驗之談,只是一些學習筆記。所有資料來自互聯網。 Consistent => Ev...
摘要:最近在學習各大互聯網公司是如何處理數據一致性的。目前已知的有這么幾種數據庫做到情況下的強一致性淘寶淘寶頂級科學家陽振坤微博號阿里正祥,發出一則消息。然后因為數據庫是的,內部把改動到了北美,君就可以看到消息了。 最近在學習各大互聯網公司是如何處理數據一致性的。因為之前從事的不是這個方向的工作,所以并非什么經驗之談,只是一些學習筆記。所有資料來自互聯網。 Consistent => Ev...
摘要:另外對于需要盡量減少應用重啟的系統也可以優先考慮這種方式來保障數據一致性。只需要保證這三類程序都是停止的,那么就可以保證沒有同步服務以外的程序對數據進行修改,從而保障數據一致性。在《跨云遷移過程中的數據同步及一致性校驗實踐(一)》中我們主要介紹了跨云遷移中數據同步階段的存儲組件MySQL、文件存儲和對象存儲的數據遷移過程,本文將重點圍繞跨云遷移的數據規整階段(清理測試時產生的臟數據)和數據割...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20