Kafka は、プロデューサーとコンシューマーの間でデータを確実に配信できるようにする分散パブリッシュ/サブスクライブ メッセージング システムです。高スループット、低遅延、耐障害性を備えています。
Kafka は次のコンポーネントで構成されます:
プロデューサーが Kafka クラスターにデータを送信すると、データは 1 つ以上のパーティションに書き込まれます。データが失われないように、各パーティションには複数のコピーがあります。コンシューマは任意のレプリカからデータを読み取ることができます。
Kafka は、「オフセット」と呼ばれるメカニズムを使用して、コンシューマーがデータを読み取る場所を追跡します。オフセットは、コンシューマがパーティション内で読み取ったデータ量を表す整数です。コンシューマーがデータを読み取ると、オフセットが ZooKeeper に保存されます。
コンシューマに障害が発生した場合、最後に記録されたオフセットから再起動できます。これにより、消費者はデータを失うことがなくなります。
Kafka のシステム アーキテクチャは、複数のノードで構成される分散システムです。各ノードは独立したプロセスであり、異なるマシン上で実行できます。
Kafka ノードは TCP プロトコルを通じて通信します。各ノードは、すべてのトピックとパーティションのメタデータ情報を含むメタデータのコピーを保持します。
プロデューサーが Kafka クラスターにデータを送信するとき、最初にメタデータ ノードにリクエストを送信して、書き込まれるパーティションに関する情報を取得します。その後、プロデューサーはそのパーティションにデータを直接書き込みます。
コンシューマーが Kafka クラスターからデータを読み取る場合、まずメタデータ ノードにリクエストを送信して、読み取るパーティションに関する情報を取得します。その後、コンシューマはそのパーティションからデータを直接読み取ります。
Kafka を使用した簡単なコード例を次に示します。
// 创建一个生产者 Producer producer = new KafkaProducer(properties); // 创建一个主题 String topic = "my-topic"; // 创建一个消息 ProducerRecord<String, String> record = new ProducerRecord<>(topic, "hello, world"); // 发送消息 producer.send(record); // 创建一个消费者 Consumer consumer = new KafkaConsumer(properties); // 订阅主题 consumer.subscribe(Arrays.asList(topic)); // 轮询消息 while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.value()); } }
このコード例は、Kafka を使用してメッセージを送受信する方法を示します。このサンプル コードをベースとして使用して、独自の Kafka アプリケーションを構築できます。
以上がKafka の動作原理とシステム フレームワークの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。