Kafka源码分析之KafkaProducer

简介:         KafkaProducer是一个Kafka客户端实现,可以发布记录records至Kafka集群。KafkaProducer是线程安全的,多线程之间共享单独一个producer实例通常会比多个producer实例要快。

        KafkaProducer是一个Kafka客户端实现,可以发布记录records至Kafka集群。KafkaProducer是线程安全的,多线程之间共享单独一个producer实例通常会比多个producer实例要快。KafkaProducer包含一组缓存池空间,存储尚未传输到集群的记录records,同时,一个后台的I/O线程负责将这些记录转换成请求,并发送至集群。使用之后关闭producer失败将会导致这些资源泄露。

        我们看下KafkaProducer都有哪些成员变量,如下:

    // 客户端ID:clientId
    private String clientId;
    
    // 分区器Partitioner实例partitioner
    private final Partitioner partitioner;
    
    // 最大请求大小maxRequestSize
    private final int maxRequestSize;
    
    // 内存总计大小totalMemorySize
    private final long totalMemorySize;
    
    // 集群元数据Metadata实例metadata
    private final Metadata metadata;
    
    // 记录收集器RecordAccumulator实例accumulator
    private final RecordAccumulator accumulator;
    
    // 后台发送线程Sender实例sender
    private final Sender sender;
    
    // 指标度量
    private final Metrics metrics;
    
    // io线程ioThread
    private final Thread ioThread;
    
    // 压缩类型CompressionType实例compressionType
    private final CompressionType compressionType;
    
    private final Sensor errors;
    
    // 时间器
    private final Time time;
    
    // key序列化器keySerializer
    private final Serializer<K> keySerializer;
    
    // value序列化器valueSerializer
    private final Serializer<V> valueSerializer;
    
    // Producer配置信息ProducerConfig实例producerConfig
    private final ProducerConfig producerConfig;
    
    // 最大阻塞时间maxBlockTimeMs
    private final long maxBlockTimeMs;
    
    // 请求超时时间requestTimeoutMs
    private final int requestTimeoutMs;
        其中,比较重要的几个是:

        1、分区器Partitioner实例partitioner:由它负责计算分区,确定主题内的实际存储位置;

        2、集群元数据Metadata实例metadata:存储了整个集群的元数据信息,包括节点列表、主题列表、主题与分区列表映射等信息;

        3、记录收集器RecordAccumulator实例accumulator:通过KafkaProducer发送的消息不会立即被发送到集群,而是先缓存在客户端内存缓冲池中,等待后台I/O线程处理;

        4、后台发送线程Sender实例sender:一个后台工作的I/O线程,由它负责将客户端内存缓冲池中的数据发送到集群;


        KafkaProducer的构造方法

相关文章
|
消息中间件 Kafka
Kafka Producer整体架构概述及源码分析(下)
Kafka Producer整体架构概述及源码分析
146 0
|
消息中间件 缓存 Kafka
Kafka Producer整体架构概述及源码分析(上)
Kafka Producer整体架构概述及源码分析
231 0
Kafka Producer整体架构概述及源码分析(上)
|
消息中间件 存储 缓存
源码分析Kafka 消息拉取流程(文末两张流程图)
源码分析Kafka 消息拉取流程(文末两张流程图)
源码分析Kafka 消息拉取流程(文末两张流程图)
|
消息中间件 存储 设计模式
源码分析 Kafka 消息发送流程(文末附流程图)
源码分析 Kafka 消息发送流程(文末附流程图)
源码分析 Kafka 消息发送流程(文末附流程图)
|
消息中间件 存储 Java
深度剖析 Kafka Producer 的缓冲池机制【图解 + 源码分析】
上次跟大家分享的文章「Kafka Producer 异步发送消息居然也会阻塞?」中提到了缓冲池,后面再经过一番阅读源码后,发现了这个缓冲池设计的很棒,被它的设计思想优雅到了,所以忍不住跟大家继续分享一波。
447 0
深度剖析 Kafka Producer 的缓冲池机制【图解 + 源码分析】
|
消息中间件 存储 JSON
Kafka 分区重分配源码分析
上一篇跟大家描述了 Kafka 集群扩容的方案与过程,这次就跟大家详细描述 Kafka 分区重分配的实现细节。
207 0
Kafka 分区重分配源码分析
|
消息中间件 缓存 算法
从源码分析如何优雅的使用 Kafka 生产者(下)
在上文 设计一个百万级的消息推送系统 中提到消息流转采用的是 Kafka 作为中间件。 其中有朋友咨询在大量消息的情况下 Kakfa 是如何保证消息的高效及一致性呢? 正好以这个问题结合 Kakfa 的源码讨论下如何正确、高效的发送消息。
|
消息中间件 缓存 Java
从源码分析如何优雅的使用 Kafka 生产者(上)
在上文 设计一个百万级的消息推送系统 中提到消息流转采用的是 Kafka 作为中间件。 其中有朋友咨询在大量消息的情况下 Kakfa 是如何保证消息的高效及一致性呢? 正好以这个问题结合 Kakfa 的源码讨论下如何正确、高效的发送消息。
|
消息中间件 Kafka Shell
【kafka源码】Topic的创建源码分析(附视频)
【kafka源码】Topic的创建源码分析(附视频)
【kafka源码】Topic的创建源码分析(附视频)
|
消息中间件 Kafka
从源码分析如何优雅的使用 Kafka 生产者
前言 在上文 设计一个百万级的消息推送系统 中提到消息流转采用的是 Kafka 作为中间件。 其中有朋友咨询在大量消息的情况下 Kakfa 是如何保证消息的高效及一致性呢? 正好以这个问题结合 Kakfa 的源码讨论下如何正确、高效的发送消息。
783 0