在分析kafka消费者源码之前,我先提出以下问题,大家带着问题去看。
1.消费者如何知道需要消费的topic分区分布在集群的哪些broker上呢?
2.由于消费组内存在多个消费者消费同一topic的情况,那么消费者如何知道自己可以消费指定topic的哪些分区呢?
3.新的消费者加入消费组(第一次进行消费也属于这种情况),如何给消费者分配分区呢?
4.消费者宕机下线(长时间未发送心跳包),如何给消费者分配分区呢?
5.消费者主动退出消费组,比如调用unsubscrible()方法取消对主题的订阅,如何给消费者分配分区呢?
6.消费组对应的GroupCoorinator节点发生了变化,如何给消费者分配分区呢?
7.消费组内所订阅的任一topic的分区数量发生了变化,如何给消费者分配分区呢?
8.客户端是如何组装数据抓取请求的呢?
9.客户端的数据抓取请求发送到服务端后,服务端处理API入口代码在哪里?
10.服务端接收到客户端的抓取请求后,如何定位到指定的offset在哪个segment日志文件中呢?
11.服务端是如何根据客户端传递的offset等信息找到应该从segment的哪个position开始读取,应该读到哪里结束呢?
12.服务端读取到数据后,在返回客户端之前做了什么工作?
13.客户端收到服务端响应的数据,如何解压消息和组装结果集呢?如何知道采用哪种算法解压呢?
14.消费过程中如何进行权限验证呢?
15.消费过程中如何进行流量限制呢?