我正在尝试使用 kafka-clients v.0.10.2.1 为kafka主题创建具有不同消费者组的多个消费者。尽管我无法检索消费者组提交的最后一个偏移量。
目前,我的“消费者”属性如下所示:
Properties cproperties = new Properties();
cproperties.put(ConsumerConfig.GROUP_ID_CONFIG, groupID);
cproperties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, my-broker));
cproperties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
cproperties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
cproperties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, taskDecoder.getClass());
cproperties.put(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG, "60000");
并且没有属性Auto-reset-offset,我无法从该主题使用该属性,但是我无法使用此配置,我需要在Zookeeper上注册的使用者组。 因此,我也需要在zookeeper / consumers上创建一个消费者组。
答案 0 :(得分:0)
您需要将属性auto.offset.reset
包含到earliest
(或latest
中,具体取决于您要实现的目标),以避免在找不到偏移量时引发异常(可能是因为数据已删除)。
由于您已禁用自动提交功能,因此您还需要确保手动提交偏移量。
cproperties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");
为此,您可以使用commitSync()
这会将偏移量提交给Kafka。使用此API提交的偏移量 将在每次重新平衡后的第一个提取中使用,以及 启动。因此,如果您需要将偏移量存储在除 Kafka,请勿使用此API。提交的偏移量应为 您的应用程序将使用的下一条消息,即 lastProcessedMessageOffset +1。
这仅向Kafka提交偏移量。使用此提交的偏移量 每次重新平衡后,API将在首次获取时使用, 启动。因此,如果您需要将偏移量存储在除 Kafka,请勿使用此API。
这是一个异步调用,不会阻塞。任何错误 遇到的问题要么传递给回调(如果提供),要么 丢弃。
请注意,如果不提交偏移量,则将auto.offset.reset
设置为none
会引发异常。
当Kafka中没有初始偏移量或当前偏移量时该怎么办 服务器上不再存在偏移量(例如,因为该数据 已被删除):
最早的:将偏移量自动重置为最早的偏移量
最新:将偏移量自动重置为最新的偏移量
无:如果未找到消费者组的先前偏移量,则会向消费者抛出异常
其他任何地方:向消费者抛出异常。