fixed adapter

This commit is contained in:
agapple
2018-11-21 22:49:22 +08:00
parent cc97f3b331
commit aa89453bf6
5 changed files with 53 additions and 58 deletions

View File

@@ -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() {

View File

@@ -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());
} }
} }
} }

View File

@@ -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) {

View File

@@ -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());
} }
} }
} }

View File

@@ -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