我是Kafka的新手,我对消费者的理解是基本上有两种类型的实施方式。
1)The High level consumer/consumer group
2)Simple Consumer
关于高级抽象的最重要的部分是当Kafka不关心处理偏移时使用,而Simple消费者提供了对偏移管理更好的控制。令我困惑的是,如果我想在多线程环境中运行使用者并且还希望控制偏移量。如果我使用消费者组,这意味着我必须读取存储在zookeeper中的最后一个偏移量?这是我唯一的选择。
答案 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
以在为特定消费者分配主题/分区时接收通知。
消费者运行后,您可以使用seek
,seekToBeginning
和seekToEnd
来获取特定偏移量的消息。 seek
会影响该使用者的下一个poll
,并存储在下一次提交中(例如commitSync
,commitAsync
或auto.commit.interval过去时(如果已启用)。 )
消费者javadocs提到了更具体的情况:http://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html
一旦分配了分区,您就可以将Kafka提供的组管理与通过搜索(..)手动管理偏移相结合。