|
@@ -6,7 +6,7 @@ import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
-import com.alibaba.otter.canal.meta.FileMixedMetaManager;
|
|
|
|
|
|
+import org.apache.commons.lang.BooleanUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -39,7 +39,16 @@ import com.alibaba.otter.canal.parse.inbound.AbstractEventParser;
|
|
import com.alibaba.otter.canal.parse.inbound.group.GroupEventParser;
|
|
import com.alibaba.otter.canal.parse.inbound.group.GroupEventParser;
|
|
import com.alibaba.otter.canal.parse.inbound.mysql.LocalBinlogEventParser;
|
|
import com.alibaba.otter.canal.parse.inbound.mysql.LocalBinlogEventParser;
|
|
import com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser;
|
|
import com.alibaba.otter.canal.parse.inbound.mysql.MysqlEventParser;
|
|
-import com.alibaba.otter.canal.parse.index.*;
|
|
|
|
|
|
+import com.alibaba.otter.canal.parse.inbound.mysql.rds.RdsBinlogEventParserProxy;
|
|
|
|
+import com.alibaba.otter.canal.parse.inbound.mysql.tsdb.DefaultTableMetaTSDBFactory;
|
|
|
|
+import com.alibaba.otter.canal.parse.inbound.mysql.tsdb.TableMetaTSDB;
|
|
|
|
+import com.alibaba.otter.canal.parse.inbound.mysql.tsdb.TableMetaTSDBBuilder;
|
|
|
|
+import com.alibaba.otter.canal.parse.index.CanalLogPositionManager;
|
|
|
|
+import com.alibaba.otter.canal.parse.index.FailbackLogPositionManager;
|
|
|
|
+import com.alibaba.otter.canal.parse.index.MemoryLogPositionManager;
|
|
|
|
+import com.alibaba.otter.canal.parse.index.MetaLogPositionManager;
|
|
|
|
+import com.alibaba.otter.canal.parse.index.PeriodMixedLogPositionManager;
|
|
|
|
+import com.alibaba.otter.canal.parse.index.ZooKeeperLogPositionManager;
|
|
import com.alibaba.otter.canal.parse.support.AuthenticationInfo;
|
|
import com.alibaba.otter.canal.parse.support.AuthenticationInfo;
|
|
import com.alibaba.otter.canal.protocol.position.EntryPosition;
|
|
import com.alibaba.otter.canal.protocol.position.EntryPosition;
|
|
import com.alibaba.otter.canal.sink.entry.EntryEventSink;
|
|
import com.alibaba.otter.canal.sink.entry.EntryEventSink;
|
|
@@ -229,7 +238,18 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
|
|
private CanalEventParser doInitEventParser(SourcingType type, List<InetSocketAddress> dbAddresses) {
|
|
private CanalEventParser doInitEventParser(SourcingType type, List<InetSocketAddress> dbAddresses) {
|
|
CanalEventParser eventParser;
|
|
CanalEventParser eventParser;
|
|
if (type.isMysql()) {
|
|
if (type.isMysql()) {
|
|
- MysqlEventParser mysqlEventParser = new MysqlEventParser();
|
|
|
|
|
|
+ MysqlEventParser mysqlEventParser = null;
|
|
|
|
+ if (StringUtils.isNotEmpty(parameters.getRdsAccesskey())
|
|
|
|
+ && StringUtils.isNotEmpty(parameters.getRdsSecretkey())
|
|
|
|
+ && StringUtils.isNotEmpty(parameters.getRdsInstanceId())) {
|
|
|
|
+
|
|
|
|
+ mysqlEventParser = new RdsBinlogEventParserProxy();
|
|
|
|
+ ((RdsBinlogEventParserProxy) mysqlEventParser).setAccesskey(parameters.getRdsAccesskey());
|
|
|
|
+ ((RdsBinlogEventParserProxy) mysqlEventParser).setSecretkey(parameters.getRdsSecretkey());
|
|
|
|
+ ((RdsBinlogEventParserProxy) mysqlEventParser).setInstanceId(parameters.getRdsInstanceId());
|
|
|
|
+ } else {
|
|
|
|
+ mysqlEventParser = new MysqlEventParser();
|
|
|
|
+ }
|
|
mysqlEventParser.setDestination(destination);
|
|
mysqlEventParser.setDestination(destination);
|
|
// 编码参数
|
|
// 编码参数
|
|
mysqlEventParser.setConnectionCharset(Charset.forName(parameters.getConnectionCharset()));
|
|
mysqlEventParser.setConnectionCharset(Charset.forName(parameters.getConnectionCharset()));
|
|
@@ -273,6 +293,34 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
|
|
mysqlEventParser.setFallbackIntervalInSeconds(parameters.getFallbackIntervalInSeconds());
|
|
mysqlEventParser.setFallbackIntervalInSeconds(parameters.getFallbackIntervalInSeconds());
|
|
mysqlEventParser.setProfilingEnabled(false);
|
|
mysqlEventParser.setProfilingEnabled(false);
|
|
mysqlEventParser.setFilterTableError(parameters.getFilterTableError());
|
|
mysqlEventParser.setFilterTableError(parameters.getFilterTableError());
|
|
|
|
+ mysqlEventParser.setIsGTIDMode(BooleanUtils.toBoolean(parameters.getGtidEnable()));
|
|
|
|
+ // tsdb
|
|
|
|
+ boolean tsdbEnable = BooleanUtils.toBoolean(parameters.getTsdbEnable());
|
|
|
|
+ if (tsdbEnable) {
|
|
|
|
+ mysqlEventParser.setEnableTsdb(tsdbEnable);
|
|
|
|
+ mysqlEventParser.setTableMetaTSDBFactory(new DefaultTableMetaTSDBFactory() {
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void destory(String destination) {
|
|
|
|
+ TableMetaTSDBBuilder.destory(destination);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public TableMetaTSDB build(String destination, String springXml) {
|
|
|
|
+ try {
|
|
|
|
+ System.setProperty("canal.instance.tsdb.url", parameters.getTsdbJdbcUrl());
|
|
|
|
+ System.setProperty("canal.instance.tsdb.dbUsername", parameters.getTsdbJdbcUserName());
|
|
|
|
+ System.setProperty("canal.instance.tsdb.dbPassword", parameters.getTsdbJdbcPassword());
|
|
|
|
+
|
|
|
|
+ return TableMetaTSDBBuilder.build(destination, "classpath:spring/tsdb/mysql-tsdb.xml");
|
|
|
|
+ } finally {
|
|
|
|
+ System.setProperty("canal.instance.tsdb.url", "");
|
|
|
|
+ System.setProperty("canal.instance.tsdb.dbUsername", "");
|
|
|
|
+ System.setProperty("canal.instance.tsdb.dbPassword", "");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
eventParser = mysqlEventParser;
|
|
eventParser = mysqlEventParser;
|
|
} else if (type.isLocalBinlog()) {
|
|
} else if (type.isLocalBinlog()) {
|
|
LocalBinlogEventParser localBinlogEventParser = new LocalBinlogEventParser();
|
|
LocalBinlogEventParser localBinlogEventParser = new LocalBinlogEventParser();
|
|
@@ -291,8 +339,8 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
|
|
parameters.getDbUsername(),
|
|
parameters.getDbUsername(),
|
|
parameters.getDbPassword(),
|
|
parameters.getDbPassword(),
|
|
parameters.getDefaultDatabaseName()));
|
|
parameters.getDefaultDatabaseName()));
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
eventParser = localBinlogEventParser;
|
|
eventParser = localBinlogEventParser;
|
|
} else if (type.isOracle()) {
|
|
} else if (type.isOracle()) {
|
|
throw new CanalException("unsupport SourcingType for " + type);
|
|
throw new CanalException("unsupport SourcingType for " + type);
|