写在前面
通过前面对producer、服务端源码的剖析,consumer很多地方和前面类似,这里简单概述即可kafka版本:kafka-0.10.0.1。
学习计划:四月份完成kafka源码的分析,也算对kafka的基础知识点有了简单的回顾。
五月份:回到Flink篇章,这次重点了解资源调度、webui等相关基本的知识点,目的为后面自己编写Flink代码,如何分析调优,观察执行情况准备;一个小的任务:Flink从kafka写入Redis,数据一致性保证的测试。
1、consumer 初始化
阶段 1:Find Group Coordinator
查找 Group Coordinator的方式:
- 先根据消费组 groupid的 hash值计算它所应该在__consumer_offsets中的分区编号;
- 找到对应的分区号后,再寻找此分区 leader所在的 broker节点,则此节点即为自己的
Group Coordinator;
注:注意这里是消费组的 groupid
阶段 2:join the group
- 此阶段的重要操作之一:选举消费组的 leader
虽然也是 hashMap,但是仍然是随机 - 此阶段的重要操作之二:选举分区分配策略 (
这个策略不知道是不是和kafka版本有关,笔者使用的是kafka-0.10.0.1,似乎是由leader节点决定
)
最终选举的分配策略基本上可以被看作各个消费者支持的最多的策略ÿ