Kafka消费者消费方式

consumer消费方式


pull模式,consumer从Broker中主动拉取数据
  • pull模式不足之处:
    如果 kafka 没有数据,消费者可能会陷入循环中,一直返回空数据。针对这一点,Kafka 的消费者在消费数据时会传入一个时长参数 timeout,如果当前没有 数据可供消费,consumer 会等待一段时间之后再返回,这段时长即为 timeout。
push模式,由Broker推送给consumer
  • push模式不足之处:
    push模式的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适 当的速率消费消息。

consumer分区分配策略

一个 consumer group 中有多个 consumer,一个 topic 有多个 partition,所以必然会涉及到 partition 的分配问题,即确定哪个 partition 由哪个 consumer 来消费。Kafka 有两种分配策略,RoundRobin和Range。

策略一:RoundRobin 轮询分配
  • 同一个topic下的多个partition会采用轮询的方式将不同的partition分配给同一个consumer group中的多个consumer。
  • 当消费者数量发生变化时会触发分配策略重新分配。
  • 注意点:
    该策略模式的使用前提是该消费者组中的所有消费者订阅的都是相同的topic。
    Kafka消费者消费方式
策略二:Range 按范围分配(默认策略)
  • 同一个topic下的partition数量除以消费者组中的消费这数量,得到的就是每个consumer消费的分区数。
  • 注意点:
    当同一个消费者组中的不同消费者订阅的是不同的topic,那么会导致将同一个topic下的所有partition都分配给某个consumer,如果不同topic的partition数量相差较大,会导致不同消费者消费的partition数相差较大,不利于资源的合理利用。

Kafka消费者消费方式