Kafkaソースコード分析のKafkaProducer

1998 ワード

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の構造方法