Kafka消费者API简介

  • 旧版消费者

     当前kafka版本还保留着Scala版本的两套消费者,被称为旧版消费者。旧版消费者属于kafka核心模块,分别为SimpleConsumer(低级Low-Level)和ZookeeperConsumerConnector(高级High-Level)。

    低级API提供对消息更灵活的控制处理,但实现起来较为复杂,调用者需要先自己管理已消费的偏移量以及消费者平衡。

      旧版消费者常用场景:

               支持消息重复消费。

              添加事务管理机制,保证消费被处理且仅被处理一次。

              只消费指定分区或者指定分区的某些片段。

    高级API 提供了一种简单、方便的对外接口,屏蔽了底层实现细节。消费者无需管理已消费的偏移量,Kafka会将每个分区已消费的最后偏移量保存在Zookeeper的/consumer/${group.id}/offsets/${topicName}/${partitionId}节点中。

  • 新版消费者  

    在kafka0.9版本之后,通过Java语言对消费者进行重新实现,KafkaConsumer,被称为新版消费者。与旧版高级消费者的最大区别在于其不再强依赖于Zookeeper,消费者提交的偏移量也不再保存在zk中,而是保存在Kafka内部主题"__consumer_offsets"之中,该主题默认有50个分区(分区数由offsets.topic.num.partition设置),每个分区3个副本,通过groupId的Hashcode值与offsets.topic.num.partition值取模的方式确定某个消费组已消费的偏移量保存在该主题的哪个分区上。

//(50为 __consumer_offsets  partition 数量 offsets.topic.num.partition设置该值)
partition = Math.abs("groupId".hashCode()) % 50  

 

你可能感兴趣的:(Kafka)