Canal原始碼分析 資料傳輸協議

2021-08-20 08:59:30 字數 2595 閱讀 1599

canal的資料傳輸有兩塊,一塊是進行binlog訂閱時,binlog轉換為我們所定義的message,第二塊是client與server進行tcp互動時,傳輸的tcp協議。

這塊是binlog的乙個儲存。主要的格式如下:

entry

header

version

[協議的版本號,default = 1]

logfilename

[binlog檔名]

logfileoffset

[binlog position]

serverid

[服務端serverid]

serverencode

[變更資料的編碼]

executetime

[變更資料的執行時間]

sourcetype

[變更資料的**,default = mysql]

schemaname

[變更資料的schemaname]

tablename

[變更資料的tablename]

eventlength

[每個event的長度]

eventtype

[insert/update/delete型別,default = update]

props

[預留擴充套件]

gtid

[當前事務的gitd]

entrytype

[事務頭begin/事務尾end/資料rowdata/heartbeat/gtidlog]

storevalue

[byte資料,可展開,對應的型別為rowchange]

rowchange

tableid

[tableid,由資料庫產生]

eventtype

[資料變更型別,default = update]

isddl

[標識是否是ddl語句,比如create table/drop table]

sql[ddl/query的sql語句]

rowdatas

[具體insert/update/delete的變更資料,可為多條,1個binlog event事件可對應多條變更,比如批處理]

beforecolumns

[字段資訊,增量資料(修改前,刪除前),column型別的陣列]

aftercolumns

[字段資訊,增量資料(修改後,新增後),column型別的陣列]

props

[預留擴充套件]

props

[預留擴充套件]

ddlschemaname

[ddl/query的schemaname,會存在跨庫ddl,需要保留執行ddl的當前schemaname]

column

index

[字段下標]

sqltype

[jdbc type]

name

[欄位名稱(忽略大小寫),在mysql中是沒有的]

iskey

[是否為主鍵]

updated

[是否發生過變更]

isnull

[值是否為null]

props

[預留擴充套件]

value

[字段值,timestamp,datetime是乙個時間格式的文字]

length

[對應資料物件原始長度]

mysqltype

[欄位mysql型別]

這塊主要定義了client和server互動的協議。

packet

magic_number [default = 17]

version [default = 1]

type [packettype,型別]

compression [壓縮,default = none]

body [具體內容]

主要的型別和對應的body,都可以在canalprotocal.proto裡面檢視到。

enum

packettype

//心跳

message heartbeat

//握手

message handshake

// client authentication

message clientauth

//服務端響應

message ack

//客戶端提交

message clientack

// subscription

message sub

// unsubscription

message unsub

// pullrequest

message get

//訊息

message messages

// tbd when new packets are required

message dump

// 客戶端回滾

message clientrollback

Flume資料傳輸事務分析

本文基於thriftsource,memorychannel,hdfssink三個元件,對flume資料傳輸的事務進行分析,如果使用的是其他元件,flume事務具體的處理方式將會不同。一般情況下,用memorychannel就好了,我們公司用的就是這個,filechannel速度慢,雖然提供日誌級別...

原始碼分析Canal專欄

canal 是阿里開源的基於 mysql binlog 資料同步元件,是網際網路架構中資料異構的重磅元件,本專欄將從原始碼的角度 其實現原理 實現細節,有利於更好的駕馭好canal。1 資料異構之 canal 初探 技巧篇 2 一文詳解 canal instance 設計理念與定製開發思路 3 ca...

C SFTP資料傳輸

我們有些客戶公司的資料比較重要,為了安全集團公司內部都使用的是區域網,但是有時候又不得不予外界網際網路做資料互動,所以有些不重要的系統是放在外界網際網路的,這樣以來內部系統和外部系統的資料互動就成為了問題,這樣以來就使用到了sftp伺服器來作為資料傳輸的中介。下面不說了,直接上c 此處使用了第三方動...