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

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