流式处理
Kafka

Kakfa源码分析 - 0.10.0.1版本源码分析系列文章总纲目录

简介:Kafka 0.10.0.1版本源码分析总纲目录

1. 完整注释仓库

本系列博客所使用的Kafka版本是0.10.0.1,博主在Github中Fork了官方的仓库,在0.10.0.1-code-analyze分支有完整注释版的代码,仓库地址:

https://github.com/LennonChin/kafka

2. 基本使用

Kafka系列 01 - 基本概念

  • 1. Kafka介绍
  • 1.1. Topics / logs
  • 1.2. Distribution
  • 2. Kafka安装
  • 2.1. Kafka单机模式
  • 2.1.1. 简单示例
  • 2.2. Kafka完全分布式
  • 3. Kafka集群成员
  • 3.1. Broker
  • 3.2. 控制器
  • 3.2.1. 控制器的作用
  • 4. 分区
  • 4.1. 分区分配
  • 5. 副本机制
  • 6. 生产者
  • 7. 消费者
  • 8. 消息文件管理
  • 9. 消息文件存储
  • 10. 消息文件格式
  • 11. Kafka在Zookeeper中的节点说明
  • 11.1. /brokers节点结构说明
  • 11.2. /controller_epoch节点结构说明
  • 11.3. /controller节点结构说明
  • 11.4. /admin节点结构说明
  • 11.5. Consumer及Customer Group
  • 11.5.1. Consumer注册信息
  • 11.5.2. Consumer Owner
  • 11.6. Consumer Offset信息

Kafka系列 02 - 生产者的基本使用

  • 1. 生产者
  • 1.1. 同步发送消息
  • 1.2. 异步发送消息
  • 2. 生产者相关配置
  • 3. 消息顺序性
  • 4. 序列化器
  • 5. 消息分区
  • 5.1. 实现自定义分区策略

Kafka系列 03 - 消费者的基本使用

  • 1. 消费者
  • 2. 消费者的配置
  • 3. 轮询操作
  • 4. 偏移量的提交
  • 4.1. 自动提交
  • 4.2. 同步提交
  • 4.3. 异步提交
  • 4.4. 同步和异步组合提交
  • 4.5. 提交特定的偏移量
  • 5. 分区再均衡
  • 5.1. GroupCoordinator
  • 5.2. 再均衡监听器
  • 6. 从指定偏移量开始消费
  • 7. 反序列化器
  • 8. 消费者的退出

3. 环境准备

Kafka系列 04 - 源码阅读环境搭建

4. 生产者

Kafka系列 05 - 生产者源码分析 01:元数据更新

  • 1. 简介
  • 2. 集群数据的组织
  • 2.1. Node类
  • 2.2. TopicPartition类
  • 2.3. PartitionInfo类
  • 2.4. Cluster类
  • 2.5. Metadata类
  • 3. KafkaProducer的构建过程
  • 4. Sender线程类
  • 5. 元数据更新
  • 5.1. 更新请求的封装
  • 5.2. 更新请求的发送
  • 5.3. 更新请求的响应处理
  • 5.4. 集群元数据的解析和更新
  • 5.5. 元数据更新机制
  • 5.5.1. 周期性更新
  • 5.5.2. 失效时更新

Kafka系列 06 - 生产者源码分析 02:消息发送

  • 1. 消息发送
  • 1.1. 拦截器集合
  • 1.2. 消息数据的封装
  • 1.2.1. RecordAccumulator类
  • 1.2.2. RecordBatch结构
  • 1.2.3. 消息数据的存储
  • 1.2.3.1. 压缩器
  • 1.3. 消息数据的发送
  • 2. 发送消息请求的响应处理
  • 3. 网络I/O操作细节
  • 3.1. 消息分包
  • 3.2. 消息分界
  • 3.3. 时序保证
  • 3.4. 网络连接的异常检测和重连

5. 消费者

Kafka系列 07 - 消费者源码分析 01:KafkaConsumer的创建及主题订阅

  • 1. 简介
  • 2. KafkaConsumer的构建过程
  • 3. ConsumerCoordinator类
  • 3.1. Heartbeat和HeartbeatTask类
  • 3.2. CommitTask类
  • 4. 订阅主题
  • 4.1. SubscriptionState类
  • 4.1.1. TopicPartitionState类
  • 4.1.2. Subscribe操作

Kafka系列 08 - 消费者源码分析 02:Rebalance操作

  • 1. 轮询操作
  • 2. 定位GroupCoordinator
  • 2.1. GroupCoordinatorRequest请求发送
  • 2.2. GroupCoordinatorResponse响应处理
  • 3. Rebalance操作
  • 3.1. Rebalance准备
  • 3.2. JoinGroupRequest请求发送
  • 3.3. JoinGroupResponse响应处理
  • 3.4. 分区分配
  • 3.5. SyncGroupRequest请求发送
  • 3.6. SyncGroupResponse响应处理
  • 3.7. 响应传播

Kafka系列 09 - 消费者源码分析 03:更新Offset、重置Position、自动任务和消息拉取

  • 1. 更新偏移量
  • 1.1. OffsetFetchRequest请求发送
  • 1.2. OffsetFetchResponse响应处理
  • 2. 重置Position
  • 2.1. ListOffsetRequest请求发送
  • 2.2. ListOffsetResponse响应处理
  • 3. 自动任务
  • 3.1. 自动心跳任务
  • 3.1.1. HeartbeatRequest请求发送
  • 3.1.2. HeartbeatResponse响应处理
  • 3.2. 自动提交offset任务
  • 3.2.1. OffsetCommitRequest请求发送
  • 3.2.2. OffsetCommitRespon响应处理
  • 4. 消息拉取
  • 4.1. FetchRequest请求发送
  • 4.2. FetchResponse响应处理

6. 服务端-网络层

Kafka系列 10 - 服务端源码分析 01:网络层和API层

  • 1. Kafka服务端网络层简介
  • 2. SocketServer
  • 3. AbstractServerThread类
  • 4. Acceptor类
  • 5. Processor类
  • 5.1. configureNewConnections()方法
  • 5.2. processNewResponses()
  • 5.2.1. unmute和mute操作
  • 5.2.2. 缓存响应
  • 5.2.3. 关闭连接
  • 5.3. poll()
  • 5.4. processCompletedReceives()
  • 5.5. processCompletedSends()
  • 5.6. processDisconnected()
  • 6. RequestChannel类
  • 6.1. RequestChannel.Request类
  • 6.2. RequestChannel.Response类
  • 7. KafkaRequestHandler类
  • 8. KafkaRequestHandlerPool线程池
  • 9. KafkaApis类
  • 10. 总结

7. 服务端-日志

Kafka系列 11 - 服务端源码分析 02:日志的存储构成(1)

  • 1. 存储结构概览
  • 2. OffsetIndex
  • 2.1. 索引项的追加
  • 2.2. 索引文件的扩容
  • 2.3. 索引项的查找
  • 2.4. 索引文件的裁剪
  • 3. Message
  • 4. ByteBufferMessageSet
  • 4.1. 消息集合的压缩
  • 4.2. 压缩消息的迭代
  • 4.3. 消息验证和offset分配
  • 5. FileMessageSet
  • 5.1. 日志的追加
  • 5.2. 日志的查找
  • 5.3. 将日志写出到指定Channel
  • 5.4. 日志的读取
  • 5.4.1. 读取为FileMessageSet分片
  • 5.4.2. 读取到指定的Buffer
  • 5.5. 日志文件的裁剪
  • 5.6. 日志文件的删除

Kafka系列 12 - 服务端源码分析 03:日志的存储构成(2)

  • 1. LogSegment
  • 1.1. 消息的追加
  • 1.2. 消息的读取
  • 1.3. 消息索引的重建
  • 2. Log
  • 2.1. 加载LogSegment
  • 2.2. 消息的追加
  • 2.2.1. 消息验证
  • 2.2.2. 清除验证未通过的消息
  • 2.2.3. 滚动Active Segment
  • 2.2.4. 数据刷盘
  • 2.3. 消息的读取

Kafka系列 13 - 服务端源码分析 04:日志的存储管理

  • 1. LogManager
  • 1.1. 定时任务
  • 1.1.1. KafkaScheduler任务调度器
  • 1.1.2. Log Retention定时任务
  • 1.1.3. Log Flusher定时任务
  • 1.1.4. RecoveryPoint Checkpoint定时任务
  • 1.2. 日志压缩
  • 1.2.1. LogCleaner类
  • 1.2.2. CleanerThread和ShutdownableThread类
  • 1.2.3. LogCleanerManager和Cleaner类
  • 1.2.4. 筛选需要压缩的日志
  • 1.2.5. 日志压缩过程
  • 1.2.5.1. 扫描消息并填充OffsetMap
  • 1.2.5.2. 计算可安全删除的时间段
  • 1.2.5.3. LogSegment分组
  • 1.2.5.4. 进行压缩
  • 1.3. 辅助操作
  • 1.3.1. 创建Log
  • 1.3.2. 获取Log
  • 1.3.3. 删除Log
  • 2. 日志系统的初始化

8. 服务端-延迟任务

Kafka系列 14 - 服务端源码分析 05:时间轮的实现

  • 1. 时间轮的基本概念
  • 1.1. 重复执行的任务
  • 1.2. 同一时刻多个执行任务
  • 1.3. 时间刻度不足的情况
  • 1.3.1. 增加时间刻度
  • 1.3.2. 使用Round
  • 1.3.3. 多层时间轮
  • 2. Kafka的时间轮实现
  • 2.1. TimingWheel类
  • 2.2. TimerTaskList、TimerTaskEntry和TimerTask类
  • 2.3. DelayedOperation类
  • 2.4. SystemTimer类
  • 2.5. DelayedOperationPurgatory类

Kafka系列 15 - 服务端源码分析 06:延迟任务案例

  • 1. KafkaApis请求派发
  • 2. 消息的生产请求
  • 2.1. handleProducerRequest(...)方法
  • 2.2. 消息写入
  • 2.3. DelayedProduce延迟任务
  • 2.4. 响应处理
  • 3. 消息的拉取请求
  • 3.1. handleFetchRequest(...)方法
  • 3.2. 消息拉取
  • 3.3. DelayedFetch延迟操作
  • 3.4. 响应处理
  • 4. 总结

9. 服务端-副本机制

Kafka系列 16 - 服务端源码分析 07:副本机制介绍

  • 1. 副本机制简介
  • 2. 副本和分区
  • 2.1. Replica类
  • 2.2. Partition类
  • 2.2.1. AR和ISR相关
  • 2.2.2. 分区副本的获取和创建
  • 2.2.3. 副本角色切换
  • 2.2.4. 副本数据写入
  • 2.2.5. 副本同步情况检测

Kafka系列 17 - 服务端源码分析 08:副本的管理

  • 1. ReplicaManager类
  • 2. 副本角色切换
  • 3. 消息追加和读取
  • 4. 消息同步
  • 4.1. 拉取线程管理器
  • 4.2. 拉取线程
  • 4.2.1. 构建FetchRequest请求
  • 4.2.2. 拉取流程
  • 4.2.2.1. 请求发送
  • 4.2.2.2. 响应处理
  • 4.2.2.3. 异常和错误处理
  • 5. 关闭副本
  • 6. 定时任务
  • 6.1. HighWatermark Checkpoint
  • 6.2. ISR Expiration
  • 6.3. ISR Change Propagation
  • 7. 元数据更新
  • 7.1. KafkaController的更新请求
  • 7.2. 客户端的更新请求

10. 服务端-KafkaController

Kafka系列 18 - 服务端源码分析 09:KafkaController基本组件

  • 1. KafkaController简介
  • 2. ControllerContext
  • 3. ControllerChannelManager
  • 4. ControllerBrokerRequestBatch

Kafka系列 19 - 服务端源码分析 10:分区与副本状态机及Leader副本选举器

  • 1. PartitionStateMachine状态机
  • 1.1. 分区状态初始化
  • 1.2. 分区状态的转换
  • 1.2.1. 前置状态检测
  • 1.2.2. 转换为NewPartition
  • 1.2.3. 转换为OnlinePartition
  • 1.2.4. 转换为OfflinePartition
  • 1.2.5. 转换为NonExistentPartition
  • 2. ReplicaStateMachine状态机
  • 2.1. 副本状态初始化
  • 2.2. 副本状态的转换
  • 2.2.1. 前置状态检测
  • 2.2.2. 转换为NewReplica
  • 2.2.3. 转换为ReplicaDeletionStarted
  • 2.2.4. 转换为ReplicaDeletionIneligible
  • 2.2.5. 转换为ReplicaDeletionSuccessful
  • 2.2.6. 转换为NonExistentReplica
  • 2.2.7. 转换为OnlineReplica
  • 2.2.8. 转换为OfflineReplica
  • 3. PartitionLeaderSelector选举器
  • 3.1. OfflinePartitionLeaderSelector
  • 3.2. ReassignedPartitionLeaderSelector
  • 3.3. PreferredReplicaPartitionLeaderSelector
  • 3.4. ControlledShutdownLeaderSelector
  • 3.5. NoOpLeaderSelector

Kafka系列 20 - 服务端源码分析 11:KafkaController相关的Zookeeper监听器

  • 1. Zookeeper Listener概览
  • 2. KafkaController相关Listener
  • 2.1. SessionExpirationListener
  • 2.2. ZookeeperLeaderElector
  • 2.2.1. LeaderChangeListener
  • 2.2.2. KafkaController Leader选举
  • 2.2.2.1. 递增Controller Epoch
  • 2.2.2.2. 注册监听器
  • 2.2.2.3. 初始化ControllerContext
  • 2.2.2.4. 启动状态机
  • 2.2.2.5. 处理副本重分配
  • 2.2.2.6. 处理优先副本选举
  • 2.2.2.7. 更新MetadataCache
  • 2.2.2.8. 启动分区自动均衡任务
  • 2.2.2.9. 启动TopicDeletionManager
  • 3. 总结

Kafka系列 21 - 服务端源码分析 12:其他的Zookeeper监听器

  • 1. 概述
  • 2. BrokerChangeListener
  • 2.1. Broker的上线
  • 2.2. Broker因故障下线
  • 2.3. Broker的正常关闭
  • 3. TopicChangeListener
  • 4. DeleteTopicsListener
  • 4.1. TopicDeletionManager
  • 4.2. DeleteTopicsThread
  • 5. IsrChangeNotificationListener
  • 6. PartitionModificationsListener
  • 7. PreferredReplicaElectionListener
  • 8. PartitionsReassignedListener
  • 9. ReassignedPartitionsIsrChangeListener

11. 服务端-GroupCoordinator

Kafka系列 22 - 服务端源码分析 13:GroupCoordinator相关组件

  • 1. GroupCoordinator简介
  • 2. MemberMetadata
  • 3. GroupMetadata
  • 4. GroupTopicPartition和OffsetAndMetadata
  • 5. GroupMetadataManager
  • 5.1. GroupMetadata池管理
  • 5.1.1. 获取GroupMetadata
  • 5.1.2. 添加GroupMetadata
  • 5.1.3. 移除GroupMetadata
  • 5.2. OffsetAndMetadata池管理
  • 5.2.1. 获取OffsetAndMetadata
  • 5.2.2. 添加OffsetAndMetadata
  • 5.2.3. 定时清理OffsetAndMetadata
  • 5.3. GroupCoordinatorRequest的处理
  • 5.4. GroupCoordinator的迁移
  • 5.5. SyncGroupRequest的处理
  • 5.6. OffsetCommitRequest的处理
  • 5.7. OffsetFetchRequest的处理
  • 5.8. ListGroupsRequest的处理

Kafka系列 23 - 服务端源码分析 14:GroupCoordinator功能详解

  • 1. GroupState
  • 2. GroupCoordinator概览
  • 3. HeartbeatRequest的处理
  • 3.1. DelayedHeartbeat延迟任务
  • 4. JoinGroupRequest的处理
  • 4.1. DelayedJoin延迟任务
  • 5. LeaveGroupRequest的处理

12. 服务端-身份认证与权限控制

Kafka系列 24 - 服务端源码分析 15:身份认证

  • 1. 概览和配置
  • 1.1. SASL/PLAIN认证的配置
  • 1.2. 权限控制的配置
  • 1.2.1. 添加权限
  • 1.2.2. 查看权限
  • 1.2.3. 移除权限
  • 2. 身份认证
  • 2.1. 客户端认证
  • 2.1.1. 配置信息装载
  • 2.1.2. 身份认证的接入
  • 2.1.3. Authenticator的构建
  • 2.1.4. 身份认证的主要流程
  • 2.2. 服务端认证

Kafka系列 25 - 服务端源码分析 16:权限控制

  • 1. 权限控制的接入
  • 2. 权限验证器
  • 2.1. 权限验证器的初始化
  • 2.2. 权限修改的监听
  • 3. 权限验证

13. 服务端-监控

Kafka系列 26 - 服务端源码分析 17:JMX和Metrics简介

  • 1. JMX的使用
  • 1.1. MBean的使用
  • 1.2. DynamicMBean的使用
  • 2. Yammer Metrics的实现

Kafka系列 27 - 服务端源码分析 18:Kafka中的Metrics和监控

  • 1. Kafka的Metrics
  • 1.1. Log类中的Gauge度量
  • 1.2. ReplicaManager类中的Meter度量
  • 1.3. Request类中的Histogram度量
  • 1.4. BrokerChangeListener中的Timer度量
  • 2. Kafka的监控
  • 2.1. 基础规范类
  • 2.2. Total实现类
  • 2.3. Count实现类
  • 2.4. Rate实现类
  • 2.5. Max实现类
  • 2.6. Min实现类
  • 2.7. Avg实现类
  • 2.8. Percentiles实现类
  • 2.9. Kafka的封装
  • 3. 监控Selector指标

14. 服务端-脚本工具

Kafka系列 28 - 服务端源码分析 19:Kafka脚本工具

  • 1. Kafka脚本工具概览
  • 2. kafka-server-start.sh脚本
  • 3. kafka-server-stop.sh脚本
  • 4. kafka-topics.sh脚本
  • 4.1. Topic的创建
  • 4.2. Topic的修改
  • 4.3. Topic的列举
  • 4.4. Topic的查看
  • 4.5. Topci的删除
  • 5. kafka-preferred-replica-election.sh脚本
  • 6. kafka-reassign-partitions脚本
  • 7. kafka-console-producer.sh脚本
  • 8. kafka-console-consumer.sh脚本
  • 9. kafka-consumer-groups.sh脚本
  • 10. DumpLogSegments工具
  • 11. kafka-producer-perf-test.sh脚本
  • 12. kafka-consumer-perf-test.sh脚本
  • 13. kafka-mirror-maker.sh脚本