From 21e9b325b1009d70f78da4ce8a76a292e7cb5e94 Mon Sep 17 00:00:00 2001 From: rewerma <29311598@qq.com> Date: Thu, 2 Jan 2020 17:03:13 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"=E4=BF=AE=E5=A4=8Dkafka=E6=B6=88?= =?UTF-8?q?=E8=B4=B9=E5=9B=9E=E6=BB=9A=E7=9A=84bug=20(#2521)"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 31acfc01019883c8066538d846e7d47de09bad8c. --- .../loader/AbstractCanalAdapterWorker.java | 5 ---- .../client/kafka/KafkaCanalConnector.java | 30 +++++++++---------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/loader/AbstractCanalAdapterWorker.java b/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/loader/AbstractCanalAdapterWorker.java index c2b37fbc..9a4eede9 100644 --- a/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/loader/AbstractCanalAdapterWorker.java +++ b/client-adapter/launcher/src/main/java/com/alibaba/otter/canal/adapter/launcher/loader/AbstractCanalAdapterWorker.java @@ -174,11 +174,6 @@ public abstract class AbstractCanalAdapterWorker { if (i == retry - 1) { connector.ack(); logger.error(e.getMessage() + " Error sync but ACK!"); - try { - Thread.sleep(500); - } catch (InterruptedException e1) { - // ignore - } return true; } else { connector.rollback(); diff --git a/client/src/main/java/com/alibaba/otter/canal/client/kafka/KafkaCanalConnector.java b/client/src/main/java/com/alibaba/otter/canal/client/kafka/KafkaCanalConnector.java index 8ac97dce..771a4ad0 100644 --- a/client/src/main/java/com/alibaba/otter/canal/client/kafka/KafkaCanalConnector.java +++ b/client/src/main/java/com/alibaba/otter/canal/client/kafka/KafkaCanalConnector.java @@ -61,11 +61,11 @@ public class KafkaCanalConnector implements CanalMQConnector { batchSize = 100; } properties.put("max.poll.records", batchSize.toString()); - properties.put("key.deserializer", StringDeserializer.class); + properties.put("key.deserializer", StringDeserializer.class.getName()); if (!flatMessage) { - properties.put("value.deserializer", MessageDeserializer.class); + properties.put("value.deserializer", MessageDeserializer.class.getName()); } else { - properties.put("value.deserializer", StringDeserializer.class); + properties.put("value.deserializer", StringDeserializer.class.getName()); } } @@ -183,13 +183,14 @@ public class KafkaCanalConnector implements CanalMQConnector { ConsumerRecords records = kafkaConsumer.poll(unit.toMillis(timeout)); + currentOffsets.clear(); + for (TopicPartition topicPartition : records.partitions()) { + currentOffsets.put(topicPartition.partition(), kafkaConsumer.position(topicPartition)); + } + if (!records.isEmpty()) { - currentOffsets.clear(); List messages = new ArrayList<>(); for (ConsumerRecord record : records) { - if (currentOffsets.get(record.partition()) == null) { - currentOffsets.put(record.partition(), record.offset()); - } messages.add(record.value()); } return messages; @@ -220,13 +221,14 @@ public class KafkaCanalConnector implements CanalMQConnector { ConsumerRecords records = kafkaConsumer2.poll(unit.toMillis(timeout)); + currentOffsets.clear(); + for (TopicPartition topicPartition : records.partitions()) { + currentOffsets.put(topicPartition.partition(), kafkaConsumer2.position(topicPartition)); + } + if (!records.isEmpty()) { - currentOffsets.clear(); List flatMessages = new ArrayList<>(); for (ConsumerRecord record : records) { - if (currentOffsets.get(record.partition()) == null) { - currentOffsets.put(record.partition(), record.offset()); - } String flatMessageJson = record.value(); FlatMessage flatMessage = JSON.parseObject(flatMessageJson, FlatMessage.class); flatMessages.add(flatMessage); @@ -246,14 +248,12 @@ public class KafkaCanalConnector implements CanalMQConnector { // 回滚所有分区 if (kafkaConsumer != null) { for (Map.Entry entry : currentOffsets.entrySet()) { - kafkaConsumer.seek(new TopicPartition(topic, entry.getKey()), currentOffsets.get(entry.getKey())); - kafkaConsumer.commitSync(); + kafkaConsumer.seek(new TopicPartition(topic, entry.getKey()), entry.getValue() - 1); } } if (kafkaConsumer2 != null) { for (Map.Entry entry : currentOffsets.entrySet()) { - kafkaConsumer2.seek(new TopicPartition(topic, entry.getKey()), currentOffsets.get(entry.getKey())); - kafkaConsumer.commitSync(); + kafkaConsumer2.seek(new TopicPartition(topic, entry.getKey()), entry.getValue() - 1); } } }