Kafka原理
2022-05-16 13:34:13 0 举报
kafka源码学习
作者其他创作
大纲/内容
LEOlog end offset
kafka broker应用进程
2
直接发送数据
offset数据结构
每隔一段时间fsync到磁盘
partition 1follower
acceptor
每个batch发送给分区的leader副本所在的broker
写入内存
partitioner(选择分区)
poll()
提交过去的时候,key是group.id+topic+分区号,value就是当前offset的值,每隔一段时间,kafka内部会对这个topic进行compact
socket
partition 0leader
会员系统
KafkaConsumer(内存缓冲,工作子线程,网络连接)
生产
系统
HWHigh Water Mark
发送心跳
序列化组件
提交offset
每个consumer都发送JoinGroup请求到Coordinator,然后Coordinator从一个consumer group中选择一个consumer作为leader,把consumer group情况发送给这个leader,接着这个leader会负责制定分区方案,通过SyncGroup发给Coordinator接着Coordinator就把分区方案下发给各个consumer,他们会从指定的分区的leader broker开始进行socket连接以及消费消息
3
缓冲区里提取消息封装成一个一个的batch
kafka broker应用进程Coordinator
4
processor
消费partition1 的数据
选择Leader
ZooKeeeper集群
1
partition 0follower
follower1 LEO:5follower2 LEO:5
消费partition0 的数据
os cache
topic ->分区 ->broker
__consumer_offsets(内部topic)
handler线城池
batch
磁盘读
响应队列
同步数据
Sender线程会不停的轮询缓冲区内的HashMap,看batch是否满了,或者是看linger.ms时间是不是到了,然后就得发送数据去,发送的时候会根据各个batch的目标leader broker来进行分组
消费offset
Sender线程
请求队列
JoinGroup请求SyncGroup请求
网卡
ProducerRecord
拉取元数据
ISR列表
leader会维护follower的LEO
缓冲区
工作线程
下发分区方案
partition 0
0 条评论
回复 删除
下一页