Apache Kafka Consumer组和Simple Consumer

时间:2013-07-31 19:54:41

标签: apache-kafka

我是Kafka的新手,我对消费者的理解是基本上有两种类型的实施方式。
1)The High level consumer/consumer group
2)Simple Consumer

关于高级抽象的最重要的部分是当Kafka不关心处理偏移时使用,而Simple消费者提供了对偏移管理更好的控制。令我困惑的是,如果我想在多线程环境中运行使用者并且还希望控制偏移量。如果我使用消费者组,这意味着我必须读取存储在zookeeper中的最后一个偏移量?这是我唯一的选择。

2 个答案:

答案 0 :(得分:6)

在大多数情况下,高级消费者API不允许您直接控制偏移量。

首次创建消费者群组时,您可以告诉它是否从kafka使用auto.offset.reset属性存储的最旧或最新消息开始。

您还可以通过将auto.commit.enable设置为false来控制高级别消费者何时向zookeeper提交新的偏移量。

由于高级消费者将偏移量存储在zookeeper中,您的应用程序可以直接访问zookeeper并操纵偏移量 - 但它将在高级消费者API之外。

您的问题有点令人困惑,但您可以在多线程环境中使用简单的使用者。这就是高级消费者所做的事情。

答案 1 :(得分:0)

在Apache Kafka 0.9和0.10中,消费者组管理完全在Kafka应用程序中由Broker(用于协调)和主题(用于状态存储)处理。

当消费者群体首次订阅某个主题时,auto.offset.reset的设置决定了消费者开始使用消息的位置(http://kafka.apache.org/documentation.html#newconsumerconfigs

您可以注册ConsumerRebalanceListener以在为特定消费者分配主题/分区时接收通知。

消费者运行后,您可以使用seekseekToBeginningseekToEnd来获取特定偏移量的消息。 seek会影响该使用者的下一个poll,并存储在下一次提交中(例如commitSynccommitAsync或auto.commit.interval过去时(如果已启用)。 )

消费者javadocs提到了更具体的情况:http://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html

一旦分配了分区,您就可以将Kafka提供的组管理与通过搜索(..)手动管理偏移相结合。