github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/proto/EntryProtocol.proto (about) 1 /* 2 * Copyright (C) 2010-2101 Alibaba Group Holding Limited. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 syntax = "proto3"; 18 package com.alibaba.otter.canal.protocol; 19 20 option java_package = "com.alibaba.otter.canal.protocol"; 21 option java_outer_classname = "CanalEntry"; 22 option optimize_for = SPEED; 23 24 /**************************************************************** 25 * message model 26 *如果要在Enum中新增类型,确保以前的类型的下标值不变. 27 ****************************************************************/ 28 message Entry { 29 /**协议头部信息**/ 30 Header header = 1; 31 ///**打散后的事件类型**/ [default = ROWDATA] 32 oneof entryType_present{ 33 EntryType entryType = 2; 34 } 35 36 /**传输的二进制数组**/ 37 bytes storeValue = 3; 38 } 39 40 /**message Header**/ 41 message Header { 42 /**协议的版本号**/ //[default = 1] 43 oneof version_present { 44 int32 version = 1; 45 } 46 47 48 /**binlog/redolog 文件名**/ 49 string logfileName = 2; 50 51 /**binlog/redolog 文件的偏移位置**/ 52 int64 logfileOffset = 3; 53 54 /**服务端serverId**/ 55 int64 serverId = 4; 56 57 /** 变更数据的编码 **/ 58 string serverenCode = 5; 59 60 /**变更数据的执行时间 **/ 61 int64 executeTime = 6; 62 63 /** 变更数据的来源**/ //[default = MYSQL] 64 oneof sourceType_present { 65 Type sourceType = 7; 66 } 67 68 69 /** 变更数据的schemaname**/ 70 string schemaName = 8; 71 72 /**变更数据的tablename**/ 73 string tableName = 9; 74 75 /**每个event的长度**/ 76 int64 eventLength = 10; 77 78 /**数据变更类型**/ // [default = UPDATE] 79 oneof eventType_present { 80 EventType eventType = 11; 81 } 82 83 84 /**预留扩展**/ 85 repeated Pair props = 12; 86 87 /**当前事务的gitd**/ 88 string gtid = 13; 89 } 90 91 /**每个字段的数据结构**/ 92 message Column { 93 /**字段下标**/ 94 int32 index = 1; 95 96 /**字段java中类型**/ 97 int32 sqlType = 2; 98 99 /**字段名称(忽略大小写),在mysql中是没有的**/ 100 string name = 3; 101 102 /**是否是主键**/ 103 bool isKey = 4; 104 105 /**如果EventType=UPDATE,用于标识这个字段值是否有修改**/ 106 bool updated = 5; 107 108 /** 标识是否为空 **/ //[default = false] 109 oneof isNull_present { 110 bool isNull = 6; 111 } 112 113 114 /**预留扩展**/ 115 repeated Pair props = 7; 116 117 /** 字段值,timestamp,Datetime是一个时间格式的文本 **/ 118 string value = 8; 119 120 /** 对应数据对象原始长度 **/ 121 int32 length = 9; 122 123 /**字段mysql类型**/ 124 string mysqlType = 10; 125 } 126 127 message RowData { 128 129 /** 字段信息,增量数据(修改前,删除前) **/ 130 repeated Column beforeColumns = 1; 131 132 /** 字段信息,增量数据(修改后,新增后) **/ 133 repeated Column afterColumns = 2; 134 135 /**预留扩展**/ 136 repeated Pair props = 3; 137 } 138 139 /**message row 每行变更数据的数据结构**/ 140 message RowChange { 141 142 /**tableId,由数据库产生**/ 143 int64 tableId = 1; 144 145 146 /**数据变更类型**/ //[default = UPDATE] 147 oneof eventType_present { 148 EventType eventType = 2; 149 } 150 151 152 /** 标识是否是ddl语句 **/ // [default = false] 153 oneof isDdl_present { 154 bool isDdl = 10; 155 } 156 157 158 /** ddl/query的sql语句 **/ 159 string sql = 11; 160 161 /** 一次数据库变更可能存在多行 **/ 162 repeated RowData rowDatas = 12; 163 164 /**预留扩展**/ 165 repeated Pair props = 13; 166 167 /** ddl/query的schemaName,会存在跨库ddl,需要保留执行ddl的当前schemaName **/ 168 string ddlSchemaName = 14; 169 } 170 171 /**开始事务的一些信息**/ 172 message TransactionBegin{ 173 174 /**已废弃,请使用header里的executeTime**/ 175 int64 executeTime = 1; 176 177 /**已废弃,Begin里不提供事务id**/ 178 string transactionId = 2; 179 180 /**预留扩展**/ 181 repeated Pair props = 3; 182 183 /**执行的thread Id**/ 184 int64 threadId = 4; 185 } 186 187 /**结束事务的一些信息**/ 188 message TransactionEnd{ 189 190 /**已废弃,请使用header里的executeTime**/ 191 int64 executeTime = 1; 192 193 /**事务号**/ 194 string transactionId = 2; 195 196 /**预留扩展**/ 197 repeated Pair props = 3; 198 } 199 200 /**预留扩展**/ 201 message Pair{ 202 string key = 1; 203 string value = 2; 204 } 205 206 /**打散后的事件类型,主要用于标识事务的开始,变更数据,结束**/ 207 enum EntryType{ 208 ENTRYTYPECOMPATIBLEPROTO2 = 0; 209 TRANSACTIONBEGIN = 1; 210 ROWDATA = 2; 211 TRANSACTIONEND = 3; 212 /** 心跳类型,内部使用,外部暂不可见,可忽略 **/ 213 ENTRYHEARTBEAT = 4; 214 GTIDLOG = 5; 215 } 216 217 /** 事件类型 **/ 218 enum EventType { 219 EVENTTYPECOMPATIBLEPROTO2 = 0; 220 INSERT = 1; 221 UPDATE = 2; 222 DELETE = 3; 223 CREATE = 4; 224 ALTER = 5; 225 ERASE = 6; 226 QUERY = 7; 227 TRUNCATE = 8; 228 RENAME = 9; 229 /**CREATE INDEX**/ 230 CINDEX = 10; 231 DINDEX = 11; 232 GTID = 12; 233 /** XA **/ 234 XACOMMIT = 13; 235 XAROLLBACK = 14; 236 /** MASTER HEARTBEAT **/ 237 MHEARTBEAT = 15; 238 } 239 240 /**数据库类型**/ 241 enum Type { 242 TYPECOMPATIBLEPROTO2 = 0; 243 ORACLE = 1; 244 MYSQL = 2; 245 PGSQL = 3; 246 }