拉取(pull)模式
kafka采用 拉取(pull) 模式从 broker(kafka服务器节点) 中获取数据 ,由消费者记录消费状态,每个消费者互相独立地顺序拉取每个分区的消息。
有两个消费者(不同消费者组)拉取同一个topic消息,消费者A的消费进度是3,消费者B的消费进度是6。消费者拉取的最大上限通过最高水位(watermark)控制
生产者最新写入的消息如果还没有达到备份数量,对消费者是不可见的。
消费者 控制偏移量 的优点
消费者可以按照任意的顺序消费消息。
比如,消费者可以重置到旧的偏移量,重新处理之前已经消费过的消息;或者直接跳到最近的位置,从当前的时刻开始消费。
pull 缺点
如果 kafka 没有数据,消费者还在 pull 消息,一直返回空数据。
对此,Kafka 的消费者在消费数据时会传入 timeout时长,如果当前没有数据可供消费,consumer 会等待timeout时长
为什么不采用 推送(push)模式?
kafka没有采用 broker 推送(push)消息给消费者,这种方式有缺点:
broker 推送(push)消息过快,消费者来不及处理;推送过慢,浪费时间
broker 推送(push)消息给消费者后,还需要记住该消费者已经消费到第几条消息,当有多个消费者时,broker需要分别记录各个消费者消费到第几条记录,这不可取
