ホームページ >Java >&#&チュートリアル >Kafka メッセージ キューの主要な実装原則を分析する
#Kafka メッセージ キューのコア実装原則の分析
#1. トピックとパーティション
Kafka のデータはトピックに保存され、各トピックは複数のパーティションを持つことができます。パーティションは、Kafka におけるデータの物理ストレージ ユニットであり、各パーティションは、独立した順序付けされた不変のログ ファイルです。パーティショニングは、異なるパーティションに並行してデータの書き込みと読み取りを行うことができるため、Kafka の高スループットと高可用性の鍵となります。2. メッセージ プロデューサー
メッセージ プロデューサー (プロデューサー) は、Kafka トピックにデータを送信するクライアントです。 Kafka のプロデューサー API を実装している限り、プロデューサーは任意のアプリケーションにすることができます。プロデューサー API を使用すると、プロデューサーは特定のトピックおよびパーティションにデータを送信できます。プロデューサがパーティションを指定しない場合、Kafka は自動的にパーティションを選択します。3. メッセージ コンシューマ
メッセージ コンシューマ (コンシューマ) は、Kafka トピックからデータを読み取るクライアントです。コンシューマは、Kafka のコンシューマ API を実装している限り、任意のアプリケーションにすることができます。コンシューマ API を使用すると、コンシューマは特定のトピックとパーティションをサブスクライブできます。コンシューマがトピックにサブスクライブすると、トピックの先頭からデータの読み取りを開始します。各コンシューマは異なるパーティションからデータを読み取ることができるため、コンシューマはデータを並行して読み取ることができます。4. メッセージ ストレージ
Kafka はデータをディスクに保存します。各パーティションは独立したログ ファイルであり、ログ ファイルは複数のセグメントで構成されます。各セグメントのサイズは 1GB です。セグメントがいっぱいになると、Kafka は新しいセグメントを作成します。 Kafka は、ストレージ領域を節約するために古いセグメントを定期的に圧縮します。5. メッセージ レプリケーション
Kafka は、レプリケーションを通じてデータの信頼性を保証します。各パーティションのデータは複数のレプリカにコピーされます。レプリカは異なるサーバー上に存在することができます。 1 つのレプリカに障害が発生しても、他のレプリカがサービスを提供し続けることができます。6. メッセージの送信
コンシューマは Kafka からデータを読み取った後、消費の進行状況を Kafka に送信 (コミット) する必要があります。コミット操作は、コンシューマーの消費の進行状況を Kafka のメタデータに保存します。メタデータは ZooKeeper に保存されます。コミット操作により、コンシューマがデータを繰り返し消費することがなくなります。7. メッセージ オフセット
各メッセージにはオフセットがあります。オフセットは、パーティション内のメッセージの位置を識別する一意の識別子です。オフセットは、消費者の消費の進行状況を追跡するために使用できます。8. コンシューマ グループ
コンシューマ グループは、コンシューマの論理的なグループです。コンシューマ グループ内のコンシューマは、同じトピックからのデータを並行して使用できます。 1 つのコンシューマ グループのコンシューマがデータを消費する場合、他のコンシューマ グループのコンシューマはそのデータを消費しません。9. 負荷分散
Kafka は負荷分散を使用して、データが異なるパーティション間で均等に分散されるようにします。ロード バランサーは、データをさまざまなパーティションに分散する役割を果たします。ロード バランサーは、ラウンドロビン、ランダム、コンシステント ハッシュなどのさまざまな戦略に基づいてデータを分散できます。10. コード例
以下は、Kafka プロデューサおよびコンシューマ API の使用方法を示す簡単な Java コード例です:// 创建生产者 Properties producerProps = new Properties(); producerProps.put("bootstrap.servers", "localhost:9092"); producerProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); producerProps.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); KafkaProducer<String, String> producer = new KafkaProducer<>(producerProps); // 创建消费者 Properties consumerProps = new Properties(); consumerProps.put("bootstrap.servers", "localhost:9092"); consumerProps.put("group.id", "my-group"); consumerProps.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); consumerProps.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProps); // 订阅主题 consumer.subscribe(Collections.singletonList("my-topic")); // 发送消息 producer.send(new ProducerRecord<String, String>("my-topic", "hello, world")); // 接收消息 while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.key() + ": " + record.value()); } }
概要
Kafka は、分散型のスケーラブルなメッセージ キュー システムです。ログ収集、データ分析、リアルタイムストリーム処理など、さまざまなアプリケーションの構築に使用できます。 Kafka の中心となる実装原則には、トピック、パーティション、メッセージ プロデューサ、メッセージ コンシューマ、メッセージ ストレージ、メッセージ レプリケーション、メッセージ送信、メッセージ オフセット、コンシューマ グループ、ロード バランシングなどが含まれます。以上がKafka メッセージ キューの主要な実装原則を分析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。