mirror of
https://github.com/alibaba/canal.git
synced 2026-11-04 00:30:15 +08:00
fixed adapter
This commit is contained in:
@@ -12,25 +12,26 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public class CanalClientConfig {
|
public class CanalClientConfig {
|
||||||
|
|
||||||
private String canalServerHost; // 单机模式下canal server的 ip:port
|
// 单机模式下canal server的ip:port
|
||||||
|
private String canalServerHost;
|
||||||
private String zookeeperHosts; // 集群模式下的zk地址, 如果配置了单机地址则以单机为准!!
|
// 集群模式下的zk地址,如果配置了单机地址则以单机为准!!
|
||||||
|
private String zookeeperHosts;
|
||||||
private String mqServers; // kafka or rocket mq 地址
|
// kafka or rocket mq 地址
|
||||||
|
private String mqServers;
|
||||||
private Boolean flatMessage = true; // 是否已flatMessage模式传输, 只适用于mq模式
|
// 是否已flatMessage模式传输,只适用于mq模式
|
||||||
|
private Boolean flatMessage = true;
|
||||||
private Integer batchSize; // 批大小
|
// 批大小
|
||||||
|
private Integer batchSize;
|
||||||
private Integer syncBatchSize = 1000; // 同步分批提交大小
|
// 同步分批提交大小
|
||||||
|
private Integer syncBatchSize = 1000;
|
||||||
private Integer retries; // 重试次数
|
// 重试次数
|
||||||
|
private Integer retries;
|
||||||
private Long timeout; // 消费超时时间
|
// 消费超时时间
|
||||||
|
private Long timeout;
|
||||||
private String mode = "tcp"; // 模式 tcp kafka rocketMQ
|
// 模式 tcp kafka rocketMQ
|
||||||
|
private String mode = "tcp";
|
||||||
private List<CanalAdapter> canalAdapters; // canal adapters 配置
|
// canal adapters 配置
|
||||||
|
private List<CanalAdapter> canalAdapters;
|
||||||
|
|
||||||
public String getCanalServerHost() {
|
public String getCanalServerHost() {
|
||||||
return canalServerHost;
|
return canalServerHost;
|
||||||
@@ -116,8 +117,6 @@ public class CanalClientConfig {
|
|||||||
|
|
||||||
private String instance; // 实例名
|
private String instance; // 实例名
|
||||||
|
|
||||||
private String topic; // mq topic
|
|
||||||
|
|
||||||
private List<Group> groups; // 适配器分组列表
|
private List<Group> groups; // 适配器分组列表
|
||||||
|
|
||||||
public String getInstance() {
|
public String getInstance() {
|
||||||
@@ -137,22 +136,13 @@ public class CanalClientConfig {
|
|||||||
public void setGroups(List<Group> groups) {
|
public void setGroups(List<Group> groups) {
|
||||||
this.groups = groups;
|
this.groups = groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTopic() {
|
|
||||||
return topic;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTopic(String topic) {
|
|
||||||
this.topic = topic;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Group {
|
public static class Group {
|
||||||
|
|
||||||
private String groupId; // group id
|
// group id
|
||||||
|
private String groupId = "default";
|
||||||
private List<OuterAdapterConfig> outerAdapters; // 适配器列表
|
private List<OuterAdapterConfig> outerAdapters; // 适配器列表
|
||||||
|
|
||||||
private Map<String, OuterAdapterConfig> outerAdaptersMap = new LinkedHashMap<>();
|
private Map<String, OuterAdapterConfig> outerAdaptersMap = new LinkedHashMap<>();
|
||||||
|
|
||||||
public String getGroupId() {
|
public String getGroupId() {
|
||||||
|
|||||||
@@ -37,8 +37,6 @@ public class AdapterCanalConfig extends CanalClientConfig {
|
|||||||
for (CanalAdapter canalAdapter : canalAdapters) {
|
for (CanalAdapter canalAdapter : canalAdapters) {
|
||||||
if (canalAdapter.getInstance() != null) {
|
if (canalAdapter.getInstance() != null) {
|
||||||
DESTINATIONS.add(canalAdapter.getInstance());
|
DESTINATIONS.add(canalAdapter.getInstance());
|
||||||
} else if (canalAdapter.getTopic() != null) {
|
|
||||||
DESTINATIONS.add(canalAdapter.getInstance());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,12 @@ package com.alibaba.otter.canal.adapter.launcher.loader;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import com.alibaba.otter.canal.client.adapter.support.CanalClientConfig;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@@ -12,6 +15,7 @@ import com.alibaba.otter.canal.adapter.launcher.common.SyncSwitch;
|
|||||||
import com.alibaba.otter.canal.adapter.launcher.config.SpringContext;
|
import com.alibaba.otter.canal.adapter.launcher.config.SpringContext;
|
||||||
import com.alibaba.otter.canal.client.CanalMQConnector;
|
import com.alibaba.otter.canal.client.CanalMQConnector;
|
||||||
import com.alibaba.otter.canal.client.adapter.OuterAdapter;
|
import com.alibaba.otter.canal.client.adapter.OuterAdapter;
|
||||||
|
import com.alibaba.otter.canal.client.adapter.support.CanalClientConfig;
|
||||||
import com.alibaba.otter.canal.client.adapter.support.Dml;
|
import com.alibaba.otter.canal.client.adapter.support.Dml;
|
||||||
import com.alibaba.otter.canal.client.adapter.support.MessageUtil;
|
import com.alibaba.otter.canal.client.adapter.support.MessageUtil;
|
||||||
import com.alibaba.otter.canal.protocol.FlatMessage;
|
import com.alibaba.otter.canal.protocol.FlatMessage;
|
||||||
@@ -180,6 +184,9 @@ public abstract class AbstractCanalAdapterWorker {
|
|||||||
*/
|
*/
|
||||||
private void batchSync(List<Dml> dmls, OuterAdapter adapter) {
|
private void batchSync(List<Dml> dmls, OuterAdapter adapter) {
|
||||||
// 分批同步
|
// 分批同步
|
||||||
|
if (dmls.size() <= canalClientConfig.getSyncBatchSize()) {
|
||||||
|
adapter.sync(dmls);
|
||||||
|
} else {
|
||||||
int len = 0;
|
int len = 0;
|
||||||
List<Dml> dmlsBatch = new ArrayList<>();
|
List<Dml> dmlsBatch = new ArrayList<>();
|
||||||
for (Dml dml : dmls) {
|
for (Dml dml : dmls) {
|
||||||
@@ -193,6 +200,7 @@ public abstract class AbstractCanalAdapterWorker {
|
|||||||
}
|
}
|
||||||
adapter.sync(dmlsBatch);
|
adapter.sync(dmlsBatch);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
if (!running) {
|
if (!running) {
|
||||||
|
|||||||
@@ -97,14 +97,14 @@ public class CanalAdapterLoader {
|
|||||||
|
|
||||||
CanalAdapterKafkaWorker canalKafkaWorker = new CanalAdapterKafkaWorker(canalClientConfig,
|
CanalAdapterKafkaWorker canalKafkaWorker = new CanalAdapterKafkaWorker(canalClientConfig,
|
||||||
canalClientConfig.getMqServers(),
|
canalClientConfig.getMqServers(),
|
||||||
canalAdapter.getTopic(),
|
canalAdapter.getInstance(),
|
||||||
group.getGroupId(),
|
group.getGroupId(),
|
||||||
canalOuterAdapterGroups,
|
canalOuterAdapterGroups,
|
||||||
canalClientConfig.getFlatMessage());
|
canalClientConfig.getFlatMessage());
|
||||||
canalMQWorker.put(canalAdapter.getTopic() + "-kafka-" + group.getGroupId(), canalKafkaWorker);
|
canalMQWorker.put(canalAdapter.getInstance() + "-kafka-" + group.getGroupId(), canalKafkaWorker);
|
||||||
canalKafkaWorker.start();
|
canalKafkaWorker.start();
|
||||||
logger.info("Start adapter for canal-client mq topic: {} succeed",
|
logger.info("Start adapter for canal-client mq topic: {} succeed", canalAdapter.getInstance() + "-"
|
||||||
canalAdapter.getTopic() + "-" + group.getGroupId());
|
+ group.getGroupId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ("rocketMQ".equalsIgnoreCase(canalClientConfig.getMode())) {
|
} else if ("rocketMQ".equalsIgnoreCase(canalClientConfig.getMode())) {
|
||||||
@@ -119,15 +119,15 @@ public class CanalAdapterLoader {
|
|||||||
canalOuterAdapterGroups.add(canalOuterAdapters);
|
canalOuterAdapterGroups.add(canalOuterAdapters);
|
||||||
CanalAdapterRocketMQWorker rocketMQWorker = new CanalAdapterRocketMQWorker(canalClientConfig,
|
CanalAdapterRocketMQWorker rocketMQWorker = new CanalAdapterRocketMQWorker(canalClientConfig,
|
||||||
canalClientConfig.getMqServers(),
|
canalClientConfig.getMqServers(),
|
||||||
canalAdapter.getTopic(),
|
canalAdapter.getInstance(),
|
||||||
group.getGroupId(),
|
group.getGroupId(),
|
||||||
canalOuterAdapterGroups,
|
canalOuterAdapterGroups,
|
||||||
canalClientConfig.getFlatMessage());
|
canalClientConfig.getFlatMessage());
|
||||||
canalMQWorker.put(canalAdapter.getTopic() + "-rocketmq-" + group.getGroupId(), rocketMQWorker);
|
canalMQWorker.put(canalAdapter.getInstance() + "-rocketmq-" + group.getGroupId(), rocketMQWorker);
|
||||||
rocketMQWorker.start();
|
rocketMQWorker.start();
|
||||||
|
|
||||||
logger.info("Start adapter for canal-client mq topic: {} succeed",
|
logger.info("Start adapter for canal-client mq topic: {} succeed", canalAdapter.getInstance() + "-"
|
||||||
canalAdapter.getTopic() + "-" + group.getGroupId());
|
+ group.getGroupId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,10 +28,9 @@ canal.conf:
|
|||||||
# username: root
|
# username: root
|
||||||
# password: 121212
|
# password: 121212
|
||||||
canalAdapters:
|
canalAdapters:
|
||||||
- instance: example
|
- instance: example # canal instance Name or mq topic name
|
||||||
# topic: example
|
|
||||||
groups:
|
groups:
|
||||||
- #groupId: g1
|
- groupId: g1
|
||||||
outerAdapters:
|
outerAdapters:
|
||||||
- name: logger
|
- name: logger
|
||||||
# - name: rdb
|
# - name: rdb
|
||||||
|
|||||||
Reference in New Issue
Block a user