Kafkaソースコード分析のKafkaProducer
1998 ワード
KafkaProducerはKafkaクライアント実装であり、記録recordsをKafkaクラスタに公開することができる.KafkaProducerはスレッドが安全であり、マルチスレッド間で単独のproducerインスタンスを共有することは、通常、複数のproducerインスタンスよりも速い.KafkaProducerは、クラスタに転送されていないレコードrecordsを格納するキャッシュプール領域のセットを含み、バックグラウンドのI/Oスレッドがこれらのレコードを要求に変換し、クラスタに送信する責任を負う.使用後にproducerを閉じるのに失敗すると、これらのリソースが漏洩します.
KafkaProducerには、次のようなメンバー変数があります.
1、パーティションPartitionerインスタンスpartitioner:パーティションの計算を担当し、トピック内の実際の記憶場所を決定する.
2、クラスタメタデータMetadataインスタンスmetadata:ノードリスト、トピックリスト、トピックとパーティションリストマッピングなどの情報を含むクラスタ全体のメタデータ情報を格納する.
3、レコードコレクターRecordAccumulatorインスタンスaccumulator:KafkaProducerによって送信されたメッセージはすぐにクラスタに送信されるのではなく、クライアントメモリバッファにキャッシュされ、バックグラウンドI/Oスレッド処理を待つ;
4、バックグラウンド送信スレッドSenderインスタンスsender:バックグラウンドで動作するI/Oスレッドで、クライアントメモリバッファのデータをクラスタに送信する.
KafkaProducerの構造方法
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の構造方法