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、服务端处理及响应请求

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

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

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

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

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

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。