Kafka技术内幕之Producer概述

通过上一篇我们基本了解了Kafka的相关概念,本篇我们将介绍Kafka的Producer。

最新版本的生产者程序使用KafkaProducer对象代表一个生产者的客户端进程。生产者要发送消息,并不是直接发送给服务端,而是先在客户端把消息放入队列中,然后由一个消息发送线程从队列中拉取消息,以批量的方式发送消息给服务器。在Kafka中,RecordAccumulator负责缓存生产者客户端的消息,发送线程Sender负责读取记录收集器的批量消息,通过网络发送给服务端。为了保证客户端网络请求的快速响应,Kafka使用选择器(Selector)处理网络连接和读写处理,使用网络连接(NetworkClient)处理客户端网络请求。

整个客户端请求如下图所示:

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

2. 对传入的Key和Value进行序列化

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

4. 将消息存储在RecordAccumulator中进行缓存

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

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

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

服务端处理及响应如下图所示:

1. 服务端的Acceptor专门用来接收客户端的请求连接

2. Acceptor接收到请求后转交给Processor处理

3. Processor中会有一个Request处理器,KafkaRequestHandler

4.KafkaRequestHandler会调用KafkaApis张的业务来处理请求

5. KafkaApis将处理的结果返回到RequestChannel的Response集合中,在转交给Processor,最后返回给客户端

本文从整体角度分析了Kafka Producer流程,下一篇我们将介绍kafka partition(分区)。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180919G1B3YP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券