Kafka消费者-客户端未在Zookeeper上注册消费者组的偏移量

时间:2018-07-17 19:41:40

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

我正在尝试使用 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上创建一个消费者组。

1 个答案:

答案 0 :(得分:0)

您需要将属性auto.offset.reset包含到earliest(或latest中,具体取决于您要实现的目标),以避免在找不到偏移量时引发异常(可能是因为数据已删除)。

由于您已禁用自动提交功能,因此您还需要确保手动提交偏移量。

cproperties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");

为此,您可以使用commitSync()

  

这会将偏移量提交给Kafka。使用此API提交的偏移量   将在每次重新平衡后的第一个提取中使用,以及   启动。因此,如果您需要将偏移量存储在除   Kafka,请勿使用此API。提交的偏移量应为   您的应用程序将使用的下一条消息,即   lastProcessedMessageOffset +1。

commitAsync()

  

这仅向Kafka提交偏移量。使用此提交的偏移量   每次重新平衡后,API将在首次获取时使用,   启动。因此,如果您需要将偏移量存储在除   Kafka,请勿使用此API。

     

这是一个异步调用,不会阻塞。任何错误   遇到的问题要么传递给回调(如果提供),要么   丢弃。

请注意,如果不提交偏移量,则将auto.offset.reset设置为none会引发异常。

  

当Kafka中没有初始偏移量或当前偏移量时该怎么办   服务器上不再存在偏移量(例如,因为该数据   已被删除):

     

最早的:将偏移量自动重置为最早的偏移量

     

最新:将偏移量自动重置为最新的偏移量

     

:如果未找到消费者组的先前偏移量,则会向消费者抛出异常

     

其他任何地方:向消费者抛出异常。

相关问题