Kafka 生产者:发送消息的组件(四)

本文详细阐述了生产者和消费者与Kafka服务端进行网络请求通信的过程,包括消息包装、存储、响应以及关键组件的作用。KafkaProducer作为线程安全的生产者客户端,利用RecordAccumulator缓存消息,Sender线程批量发送。Selector和NetworkClient处理网络I/O,确保高效的数据传输。此外,文章还介绍了各个组件的主要功能和工作原理。

生产者和消费者客户端与服务端完成一次网络请求通信的具体步骤

  • 生产者客户端应用程序产生消息
  • 客户端连接对象将消息包装到请求中,发送给服务端
  • 服务端连接对象负责接收请求,并将消息以文件形式存储
  • 服务端返回响应结果给生产者客户端
  • 消费者客户端应用程序消费消息
  • 客户端连接对象将消息信息也包装到请求中,发送给服务端
  • 服务端从文件存储系统中取出消息
  • 服务端返回响应结果给消费者客户端
  • 客户端将响应结果还原成消息,并开始处理消息

  生产者发送消息并不是直接发给服务端,而是先在客户端把消息放入队列里面,然后由一个消息发送线程从队列中拉取消息,以批量的方式发送消息给服务端

涉及组件

  • 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 的网络客户端
    • 这是一个内部类,用于实现面向用户的生产者和消费者客户端,线程不安全

生产者发送消息代码在下一篇中详细解析

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值