Kafka的consumer分析
kafka里consumer采用的是pull的方式从broker里取数据 push推的方式很难适应消费速率不同的消费者,消息发送速率是有broker决定的,典型的问题表现是消费端拒绝访问和网络堵塞 pull的方式的消费速率是由consumer来确定,如果kafka的topic里没有数据,consumer会长期获取空数据,kafka会在消费时传入一个timeout,如果拉取没有数据,就会等待timeout时长后再返回 Kafka消费分区访问策略: 一个consumer group中有多个consumer,一个topic里有多个partition,这就涉及了partition的分配问题,确定那个partition由哪个consumer来消费 kafka有三种分配策略:range(范围模式,默认的),roundrobin(均衡),sticky(粘性方式v0.11新增) range:默认的分区消费策略 无论多少个分区,只有一个消费者,那么所有分区都分配给这个消费者,每次新的消费者加入消费者组都会触发新的分配 分配策略: 按照topic进行一组来分配给订阅了这个topic的consumer group中的consumer n=分区数/消费者数量,m=分区数%消费者数量,第一个消费者分配n+m个分区,后面的分配n个分区 roundrobin:负载均衡的方式 按照消费者组里的消费者进行平均分配