kafka源码调试初识

一、kafka 总入口

kafka.scala
1 读取配置文件 server.properties生成类KafkaServer的实例kafkaServerStartable定义了kafka最重要的变量 kafkaserver
KafkaServer定义了一下变量
2 捕捉ctrl+c 设置钩子函数(新的线程启动) kafkaServerStartable.shutdown=>kafkaserver.shutdown
3 kafkaServerStartable.startup=>kafkaserver.startup
4 kafkaServerStartable.awaitShutdown=>kafkaserver.awaitShutdown
5 捕捉到任何异常则程序退出
二、 kafkaserver.StartUp()

1 初始化KafkaScheduler (默认10个Threads),等待指派任务

2 根据配置文件server.properties, 初始化ZkUtils,新建zkClient session,注册了事件监听器,以下路径若不存在则新建

路径/consumers,这个路径用于消费者的client.id存储对应消费的offset的路径.
路径/brokers/ids,这个路径用于存储所有的broker id的路径.
路径/brokers/topics,用于存储每个broker对应的topics的信息,
路径/config/changes
路径/config/topics,
路径/config/clients,
路径/admin/delete_topics,用于存储删除的topic的信息.
路径/brokers/seqid
路径/isr_change_notification,这个用于在kafka的副本broker发生变化时用于通知的存储路径

3 生成cluster id

4 初始化性能监控类 Metrics,ClusterResourceListener监听这个类,有回调函数
6 初始化配额类QuotaManagers,供client端的consumer和producer限制速度,
7 日志管理类LogManager,
加载recovery-point-offset-checkpoint文件,获取topic/partition offset
KafkaScheduler 启动定时任务,
1) kafka-log-retention
2) kafka-log-flusher
3) kafka-recovery-point-checkpoint

4) kafka-delete-logs

8 获取brokeId

9 初始化MetadataCache,broker用来缓存当前集群中所有分区状态的组件,KafkaController通过向集群中的broker发送UpdateMetad异步更新
10 提供安全验证的类 CredentialProvider

5 初始化类,SocketServer ,

Acceptor接收NIO请求,创建socket连接,并且分配给Processor处理

每个broker都有一个socket连接,一个Acceptor接口NIO请求分配(RequestChannel)给多个processor(跟硬件能够提供的线程数有关)

6 初始化ReplicaManager,负责接收controller的command以完成replica的管理工作,写入highwatermark

开启定时任务,

1)将落后太多的副本从ISR列表中移除

2)ISR列表变化后, 更新集群内每台broker上的metadata

7 初始化KafkaController: 负责管理整个集群中分区和副本的状态
最复杂的类,各种注册,后面再详细的看
8 AdminManager
9 初始化GroupCoodinator
 记录消费者组的信息
 通过心跳消息检测消费者状态
 针对JoinGroupRequest和SyncGroupRequest进行消费者组中分区的分配
 维护消费的offset信息
10  KafkaApis 用于处理对kafka的消息请求的中心转发组件,对外提供服务
        case ApiKeys.PRODUCE => handleProducerRequest(request)
        case ApiKeys.FETCH => handleFetchRequest(request)
        case ApiKeys.LIST_OFFSETS => handleOffsetRequest(request)
        case ApiKeys.METADATA => handleTopicMetadataRequest(request)
        case ApiKeys.LEADER_AND_ISR => handleLeaderAndIsrRequest(request)
        case ApiKeys.STOP_REPLICA => handleStopReplicaRequest(request)
        case ApiKeys.UPDATE_METADATA_KEY => handleUpdateMetadataRequest(request)
        case ApiKeys.CONTROLLED_SHUTDOWN_KEY => handleControlledShutdownRequest(request)
        case ApiKeys.OFFSET_COMMIT => handleOffsetCommitRequest(request)
        case ApiKeys.OFFSET_FETCH => handleOffsetFetchRequest(request)
        case ApiKeys.GROUP_COORDINATOR => handleGroupCoordinatorRequest(request)
        case ApiKeys.JOIN_GROUP => handleJoinGroupRequest(request)
        case ApiKeys.HEARTBEAT => handleHeartbeatRequest(request)
        case ApiKeys.LEAVE_GROUP => handleLeaveGroupRequest(request)
        case ApiKeys.SYNC_GROUP => handleSyncGroupRequest(request)
        case ApiKeys.DESCRIBE_GROUPS => handleDescribeGroupRequest(request)
        case ApiKeys.LIST_GROUPS => handleListGroupsRequest(request)
        case ApiKeys.SASL_HANDSHAKE => handleSaslHandshakeRequest(request)
        case ApiKeys.API_VERSIONS => handleApiVersionsRequest(request)
        case ApiKeys.CREATE_TOPICS => handleCreateTopicsRequest(request)
        case ApiKeys.DELETE_TOPICS => handleDeleteTopicsRequest(request)
        case requestId => throw new KafkaException("Unknown api code " + requestId)          

12  KafkaRequestHandlerPool,用于对kafka的请求进行处理的实例


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值