Kafka采用consumer采用pull(拉)模式从broker中读取数据。

push是broker集群推送消息给消费者
pull是消费者从broker集群中拉取消息

push(broker集群推送消息给消费者)

push方式的话能更及时的获取到数据,一有数据就推送消息.
但是push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。
假如说消费者每次只能处理100条数据,而broker集群每次push1000条数据,那么明显是不合适的,因为消费者只能消费100条.剩下900条来不及处理,然后broker集群又推过来1000条,这样消费者明显来不及处理.会越堆越多.
而让消费者每次从broker集群里面pull100条数据才是更合适的选择.消费者能消费多少,就从broker集群里面拉多少数据.

pull(消费者从broker集群中拉取消息)

pull是拉取数据这样的一个弊端是数据获取不及时,比如说broker已经有数据了,但是你消费者不知道有数据了,还在以指定的频率定期拉取数据,这样就会出现获取数据不及时的情况. 但是你拉取的频率不太长的话,这个弊端不明显.

pull模式不足之处是,如果kafka没有数据,消费者可能会陷入循环中,一直返回空数据。针对这一点,Kafka的消费者在消费数据时会传入一个时长参数timeout,如果当前没有数据可供消费,consumer会等待一段时间之后再返回,这段时长即为timeout。