Kafka 源码分析
文章平均质量分 89
记录 kafka 源码调试学习。
0x13
coding...
展开
-
kafka 请求 Produce、二次Fetch 处理、ISR维护
Partition.checkEnoughReplicasReachOffset() => 校验从副本是否都同步成功 requiredOffset=1,当前是否主副本:Some(Log(dir=C:\workspace\kafkaData\data1\flinkin-01-0, topic=flinkin-01, partition=0, highWatermark=0, lastStableOffset=0, logStartOffset=0, logEndOffset=1))原创 2023-03-01 22:23:57 · 15882 阅读 · 0 评论 -
kafka 请求 OffsetForLeaderEpoch 处理、epoch机制、副本截断
2、如果消息写入了follower副本B,则follower副本B的LEO与leader副本的LEO是一致的,对应的offset是最新的,即使此后follow副本B宕机也不受影响。这个LastOffset有两种可能,一种是比follower发送的请求中的Leader Epoch大1的开始offset,另一种是如果当前leader epoch与请求中的leader epoch相等,那么就返回当前leader的LEO。而在主副本处理请求时,请求中是携带了 Controller 分配的 epoch 值的。原创 2023-03-01 22:27:09 · 1278 阅读 · 0 评论 -
kafka 日志管理器、分区机制
另外缓存文件的读写是使用MappedByteBuffer,底层是使用了页缓存PageCache,而操作系统使用LRU机制管理页缓存,同时由于Kafka写入索引文件是文件末尾追加写入,因此几乎所有索引查询都集中在尾部,如果在文件全文进行二分查找可能会碰到不在页缓存中的索引,导致缺页中断,阻塞等待从磁盘加载没有被缓存到page cache的数据。在创建主题时,不同 broker 节点的现有负载一样,所以多个分区到broker的分配,以及不同分区的多个副本到 broker 的分配都需要一些分配计算以均衡负载。原创 2023-03-01 22:32:05 · 543 阅读 · 0 评论 -
kafka 请求 UpdateMetadata 处理
集群 Controller 负责元数据的管理,保存有一个 event 事件队列,如果 event 事件是通知其他节点更新集群元数据的话就会广播元数据更新请求出去。NetworkClient.doSend() 发送集群内部请求 ApiKey=UPDATE_METADATA (org.apache.kafka.clients.NetworkClient)KafkaApis.handleUpdateMetadataRequest() => 更新元数据。// 主副本所在 brokerId。原创 2023-03-01 22:20:38 · 686 阅读 · 0 评论 -
Kafka CreateTopic 集群处理
Partition.makeLeader() 当前分区:LeaderAndIsrPartitionState(topicName='flinkin-30', partitionIndex=1, controllerEpoch=36, leader=1, leaderEpoch=0, isr=[1], zkVersion=0, replicas=[1], addingReplicas=[], removingReplicas=[], isNew=true)原创 2023-02-21 17:41:37 · 667 阅读 · 1 评论 -
kafka 各模块启动全流程 KafkaServer
KafkaScheduler.schedule() 执行定时任务 name=shutdown-idle-replica-alter-log-dirs-thread (kafka.utils.KafkaScheduler)KafkaScheduler.schedule() 执行定时任务 name=kafka-log-start-offset-checkpoint (kafka.utils.KafkaScheduler)原创 2023-03-01 22:38:05 · 1088 阅读 · 0 评论