生产者和消费者客户端与服务端完成一次网络请求通信的具体步骤
- 生产者客户端应用程序产生消息
- 客户端连接对象将消息包装到请求中,发送给服务端
- 服务端连接对象负责接收请求,并将消息以文件形式存储
- 服务端返回响应结果给生产者客户端
- 消费者客户端应用程序消费消息
- 客户端连接对象将消息信息也包装到请求中,发送给服务端
- 服务端从文件存储系统中取出消息
- 服务端返回响应结果给消费者客户端
- 客户端将响应结果还原成消息,并开始处理消息
生产者发送消息并不是直接发给服务端,而是先在客户端把消息放入队列里面,然后由一个消息发送线程从队列中拉取消息,以批量的方式发送消息给服务端
涉及组件
- KafkaProducer 生产者客户端对象
- Kafka 的记录收集器 RecordAccumulator,负责缓存生产者发送来的消息
- Kafka 发送线程 Sender,负责读取 RecordAccumulator 的批量消息,通过网络发送给服务端 Kafka 选择器
- Selector 负责处理网络连接和读写处理,使用 NetworkClient 处理客户端网络请求
组件简介
-
KafkaProducer
- 将记录发布到 Kafka 集群的 Kafka 客户端,生产者是线程安全的
- 主要涉及 ack 解析(parseAcks)、异步发送(doSend)、计算分区(partition)等
-
RecordAccumulator
- 这个类充当一个队列,将要发送到服务器的实例记录累积到 MemoryRecords 中,累加器使用有限的内存,当内存耗尽时,追加调用将阻塞,除非被禁用
- 主要涉及批次大小计算和封装(append)、数据读取(ready)等
-
Sender
- 处理向 Kafka 集群发送生产请求的后台线程。该线程发出元数据请求以更新其集群视图,然后向适当的节点发送生成请求
- 等待其他线程唤醒来执行发送请求
-
Selector
- 用于进行非阻塞多连接网络 I/O 的 nioSelector 接口
- 这个 Selector 是 kafka 自己基于 Java NIO 封装的一个 Selector,线程不安全
- 主要涉及网络连接(connect)、通道注册(register)、存放请求(send)等
-
NetworkClient
- 用于异步 请求/响应 网络 I/O 的网络客户端
- 这是一个内部类,用于实现面向用户的生产者和消费者客户端,线程不安全
生产者发送消息代码在下一篇中详细解析
本文详细阐述了生产者和消费者与Kafka服务端进行网络请求通信的过程,包括消息包装、存储、响应以及关键组件的作用。KafkaProducer作为线程安全的生产者客户端,利用RecordAccumulator缓存消息,Sender线程批量发送。Selector和NetworkClient处理网络I/O,确保高效的数据传输。此外,文章还介绍了各个组件的主要功能和工作原理。
786

被折叠的 条评论
为什么被折叠?



