内容简述:
分析Kafka生产者发送消息的主流程
暂不涉及事务型发送
名词解释:
生产者专有:
- KafkaProducer
消息生产者 - ProducerRecord
消息载体 - ProducerInterceptor
发送消息拦截器 - ClusterAndWaitTime
Cluster: Kafka集群对象, 记录集群leader信息 - KeySerializer && ValueSerializer
消息Key\值的序列化器,消息会序列化为二进制数组进行发送 - Partitioner
分区选择器,决定消息发送到哪个分区 - RecordAccumulator
消息收集器,内部使用Deque来缓存要发送的消息 - Sender
发送者线程,负责把Accumulator存储的消息推给Kafka结点
生产者与消息者共用:
- NetworkClient
网络客服端,是消息生产者或消费者与kafka服务器结点进行通讯的中介 - InFlightRequests
记录发记录发送中的请求列表,可用于:1) 控制同时最大发送请求,2) 拉取元数据时,可以选择发送中的消息数量最小的结点 - KafkaChannel
每个kafkaChannel对应着一个kafka结点的java.nio.channels.Channel,负责与kafka进行安全认证,读写网络数据,关闭channel,记录channel状态等 - kafka.common.network.Selector
kafka实现的"多路复用器",内部使用java.nio.chanel.Selector注册网络通道,注册通道连接、读写、关闭等网络io事件,并记录着kafka结点与KafkaChannel的对应关系
发送流程图
时序图:
- 投递消息到消息收集器
2. Sender线程从消息收集器读取消息并发送到网络