Skip to content

Commit be0d945

Browse files
authored
当zk出现session time out可能会导致instance出现多个消费者,从而出现乱序 (#5270)
1 parent 5a968b3 commit be0d945

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

server/src/main/java/com/alibaba/otter/canal/server/CanalMQStarter.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.slf4j.MDC;
1616

1717
import java.util.Map;
18+
import java.util.Objects;
1819
import java.util.concurrent.ConcurrentHashMap;
1920
import java.util.concurrent.ExecutorService;
2021
import java.util.concurrent.Executors;
@@ -106,7 +107,10 @@ public synchronized void destroy() {
106107

107108
public synchronized void startDestination(String destination) {
108109
CanalInstance canalInstance = canalServer.getCanalInstances().get(destination);
109-
if (canalInstance != null) {
110+
CanalMQRunnable canalMQRunable = canalMQWorks.get(destination);
111+
//当zk出现session time out可能会导致instance出现多个消费者,从而出现乱序
112+
//因此当抢占成功的实例已经启动CanalMQRunnable时就不需要stop然后start了
113+
if (canalInstance != null && Objects.isNull(canalMQRunable)) {
110114
stopDestination(destination);
111115
CanalMQRunnable canalMQRunnable = new CanalMQRunnable(destination);
112116
canalMQWorks.put(canalInstance.getDestination(), canalMQRunnable);

0 commit comments

Comments
 (0)