Kafka的consumer分析

吃可爱长大的小学妹 提交于 2020-08-09 13:59:18

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:默认的分区消费策略

无论多少个分区,只有一个消费者,那么所有分区都分配给这个消费者,每次新的消费者加入消费者组都会触发新的分配

分配策略:

  1. 按照topic进行一组来分配给订阅了这个topic的consumer group中的consumer

  2. n=分区数/消费者数量,m=分区数%消费者数量,第一个消费者分配n+m个分区,后面的分配n个分区

  • roundrobin:负载均衡的方式

    按照消费者组里的消费者进行平均分配,可以通过配置:partition.assignment.strategy,负载均衡也要看是否订阅了这个topic,每次新的消费者加入消费者组都会触发新的分配

  • Sticky:粘性策略

    kafka的v0.11版本引入的:class org.apache.kafka.clients.consumer.StickyAssignor

    主要实现的目录

    • 分区的分配要尽可能的均匀

    • 分区的分配尽可能的和上次分配保持一致

    • 当两者冲突时,第一个目标优先第二个目标

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!