KafkaProducer 技术内幕

在 kafka0.10 之前,kafka 仅仅是一个消息系统,负责消息的发送与接收,解决应用解耦、异步消息、高流量问题。但在 0.10 之后 kafka 提供了流处理和连接器的功能,它也从分布消息系统逐渐转变为流式处理平台。

Kafka 使用 KafkaProducer 对象代表一个生产者的客户端进程。生产者要发送消息,并不是直接发送给服务端,而是先在客户端把消息放入队列中,然后由一个消息发送线程从队列中拉取消息,以批量的方式发送消息给服务器。

在 Kafka 中,RecordAccumulator 负责缓存生产者客户端的消息,发送线程 Sender 负责读取记录收集器的批量消息,通过网络发送给服务端。为了保证客户端网络请求的快速响应,Kafka 使用选择器(Selector)处理网络连接和读写处理,使用网络连接(NetworkClient)处理客户端网络请求。

一,客户端与服务端

1、客户端请求

1,当调用 KafkaProducer 的 send 方法时,首先调用的是 ProducerInterceptor,即生产者拦截器,对消息进行预处理

2,对传入的 key 和 value 进行序列化

3,对消息进行分区,将消息发送到指定的分区

4,对消息存储在 RecordAccumulator 中进行缓存

5,发送线程 Sender 轮训 RecordAccumulator 中的队列

6,在 Sender 中将消息组装成 ClientRequest 对象,通过 NetworkClient、KafkaChannel 发送到服务器

7,服务器端接收到消息后,通过 NetworkReceive 返回给客户端响应消息

2、服务端处理及响应请求

本章节需登录后查看完整内容,当前为预览。

登录后阅读全文

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。