1. 完整注释仓库
本系列博客所使用的Kafka版本是0.10.0.1,博主在Github中Fork了官方的仓库,在0.10.0.1-code-analyze分支有完整注释版的代码,仓库地址:
https://github.com/LennonChin/kafka
2. 基本使用
- 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信息
- 1. 生产者
- 1.1. 同步发送消息
- 1.2. 异步发送消息
- 2. 生产者相关配置
- 3. 消息顺序性
- 4. 序列化器
- 5. 消息分区
- 5.1. 实现自定义分区策略
- 1. 消费者
- 2. 消费者的配置
- 3. 轮询操作
- 4. 偏移量的提交
- 4.1. 自动提交
- 4.2. 同步提交
- 4.3. 异步提交
- 4.4. 同步和异步组合提交
- 4.5. 提交特定的偏移量
- 5. 分区再均衡
- 5.1. GroupCoordinator
- 5.2. 再均衡监听器
- 6. 从指定偏移量开始消费
- 7. 反序列化器
- 8. 消费者的退出
3. 环境准备
4. 生产者
- 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. 失效时更新
- 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. 副本同步情况检测
- 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. 服务端-身份认证与权限控制
- 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. 服务端认证
- 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脚本
推荐阅读
Java多线程 46 - ScheduledThreadPoolExecutor详解(2)
ScheduledThreadPoolExecutor用于执行周期性或延时性的定时任务,它是在ThreadPoolExe...