Kafka Consumer在重新启动Kafka时停止使用消息

时间:2019-07-29 13:21:52

标签: apache-kafka kafka-consumer-api spring-kafka

我有一个集群 Zookeeper(版本3.4.13)(包含3个节点)和一个 Kafka(版本2.11-2.1.0)的集群包含2个节点。我正在使用 Spring Kafka 2.1.9.RELEASE 设置生产者/消费者。

我正在运行自己的Spring Boot应用程序的2节点集群,其中有特定主题的使用者。如果我同时停止两个Kafka节点,然后仅启动其中一个(可能不充当“组协调器”),则消费者停止使用队列中的消息(即使在一个Kafka节点启动并运行之后),直到我重新启动Spring Boot应用程序。

在此问题上找不到太多资源。需要了解造成这种情况的原因,即Kafka群集出现故障的地方,然后启动其中一个节点(也许应该自动选出领导者)。

以下是我的使用者配置:

Map<String, Object> properties = new HashMap<>();
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaServerUrl + ":" + kafkaServerPort +
            (StringUtils.isEmpty(additionalBrokers)?"":","+additionalBrokers));
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
properties.put(ConsumerConfig.GROUP_ID_CONFIG, "testGroup");
properties.put(JsonDeserializer.TRUSTED_PACKAGES, "com.test.model");
properties.put(JsonDeserializer.VALUE_DEFAULT_TYPE,"com.test.EMailConfig");

我希望,当仅再次启动一个Kafka群集节点时,使用者应该重新开始使用消息。

有人遇到过这样的问题吗?请发表您的建议。

以下是1个代理停止时来自describe命令的输出的屏幕截图: enter image description here

谢谢。

1 个答案:

答案 0 :(得分:0)

该问题无法重现。至少对我来说。这就是我所做的

  1. 使用docker image:https://codeload.github.com/wurstmeister/kafka-docker/zip/master
  2. 启动kafka(2.12.24.0)
  3. 从以下项目开始了最低限度的spring-kafka:https://codeload.github.com/wurstmeister/kafka-docker/zip/master

然后和邮递员一起给我发了一条短信;它针对该主题产生并且也立即被使用,随后关闭kafka节点,然后启动kafka节点。现在我重新发送了;它被生产并且消耗了罚款。

相关问题