kafka教程-消费者获取消息(理论)

拉取(pull)模式

kafka采用 拉取(pull) 模式从 broker(kafka服务器节点) 中获取数据 ,由消费者记录消费状态,每个消费者互相独立地顺序拉取每个分区的消息。

有两个消费者(不同消费者组)拉取同一个topic消息,消费者A的消费进度是3,消费者B的消费进度是6。消费者拉取的最大上限通过最高水位(watermark)控制

生产者最新写入的消息如果还没有达到备份数量,对消费者是不可见的。

消费者 控制偏移量 的优点

消费者可以按照任意的顺序消费消息。
比如,消费者可以重置到旧的偏移量,重新处理之前已经消费过的消息;或者直接跳到最近的位置,从当前的时刻开始消费。

pull 缺点

如果 kafka 没有数据,消费者还在 pull 消息,一直返回空数据。

对此,Kafka 的消费者在消费数据时会传入 timeout时长,如果当前没有数据可供消费,consumer 会等待timeout时长

为什么不采用 推送(push)模式?

kafka没有采用 broker 推送(push)消息给消费者,这种方式有缺点:

  1. broker 推送(push)消息过快,消费者来不及处理;推送过慢,浪费时间

  2. broker 推送(push)消息给消费者后,还需要记住该消费者已经消费到第几条消息,当有多个消费者时,broker需要分别记录各个消费者消费到第几条记录,这不可取


原文出处:/show_1IXNL3fCOmO.html