Kafka的消息消费是以消费的group为单位;
同属一个group中的多个consumer分别消费topic的不同partition;
同组内consumer的变化, partition变化, coordinator...存到了__consumer_offsets里, , 它的key是 groupId
offset和group信息的写入: 实际上是普通的消息写入没有本质上的区别, 可参考Kafka是如何处理客户端发送的数据的..., 这里的方法是def store(delayedAppend: DelayedStore), 实现就是调用replicaManager.appendMessages来写入消息到log文件
__consumer_offsets...topic消息的加载
__consumer_offsets作为一个topic, 也是有多个partiton的, 每个partiton也是有多个复本的, partition也会经历leader的选举...offsetsCache.remove(groupTopicAndPartition)
从已经落地的log文件中清除: 实现就是向log里写一条payload为null的"墓碑"message作为标记