0%

Kafka中的Consumer

Kafka的Consumer学习。

  • Consumer,消费者,负责订阅Kafka中的Topic,从订阅的主题上拉取消息
  • Consumer Group,消费组,每个消费者都有一个对应的消费组,消息发布到主题后,只会被投递给订阅它的每个消费组中的一个消费者
  • 如果所有消费者都属于同一个消费组,所有消息会被均衡的投递给每一个消费者,每条消息只会被一个消费者处理,相当于是点对点模式
  • 如果所有消费者都隶属于不同的消费组,所有消息都会被广播给所有消费者,每条消息都会被所有消费者处理,相当于发布订阅模式
  • 反序列化,Deserializer

消息消费

消息消费 一般有:推模式和拉模式,推模式是服务端主动将消息推送给消费者;拉模式是消费者主动向服务端发起请求来拉取消息。

  • Kafka的消费是基于拉模式的。
  • 消费者消费到的每条消息的类型为CnsumerRecord
  • ConsumerRecords表示一次拉取所获得的消息集,内部包含了若干ConsumerRecord

位移提交

消费者端调用poll方法时,返回的是还没有被消费的消息集,这就需要记录上一次消费时的消费位移,并且需要做持久化。旧的消费者客户端中,消费位移是存储在Zookeeper中,新的消费者客户端,消费位移存储在Kafka内部主题__consumer_offsets中,把消费位移持久化的动作称为提交。消费者再消费完消息之后需要执行消费位移的提交。

控制或关闭消费

KafkaConsumer提供了对消费速度进行控制的方法,pause和resume方法。

指定位移消费

Kafka中当消费者查找不到所记录的消费位移时,会根据消费者客户端参数auto.offset.reset的配置来决定从何处开始消费:

  • latest,从分区末尾开始消费消息
  • earliest,从起始处开始消费
  • none,找不到消费位移,会抛异常

seek方法可以指定分区和位移,来实现从指定的唯一处开始消费。

参考

  • Apache kafka实战
  • 深入理解Kafka:核心设计与实践原理
坚持原创技术分享,您的支持将鼓励我继续创作!
Fork me on GitHub