Kafka中的Consumer
KafkaKafka的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:核心设计与实践原理