1.カフカとは
I.概要
- Kafkaは、パブリッシュおよびサブスクライブモードのメッセージキューです。
- Kafkaは、LinkedInによって開発され、Apacheに貢献したメッセージキューです。
- カフカの特徴:
- メッセージフローの発行と購読
- メッセージストリームの保存時にフォールトトレランスを提供する
- データストリームが出現したときに処理することができます。
- Kafkaの適用シナリオ:
- システムまたはアプリケーション間の信頼性の高いデータ伝送のためのリアルタイムストリームパイプラインを構築できます。
- データストリームを変換または応答するリアルタイムストリーミングアプリケーションを構築できる
- KafkaはScala言語を使用して構築されています。Scalaは自然に同時実行性とスループットをサポートし、Kafkaの同時実行性とスループットが比較的高いことを保証します。実際のプロセスでは、Kafkaのスループットは60〜80M / sです。Kafkaは下部でゼロを使用します。コピー技術
- Kafkaがデータを受信すると、データがローカルディスクに書き込まれ、データが失われないようになります。デフォルトでは、Kafkaは書き込まれたデータをクリーンアップしません
- Kafkaには単一障害点はありません
- Kafkaクラスターは、いつでも動的にノードを追加または削除できます
- カフカにはコピー戦略があります
2、カフカの基本コンセプト
- ブローカ:
- それはカフカのノードを意味します
- 番号が同じでない限り、各ブローカーは番号を与える必要があります
- トピック:
- 関数を使用してデータを分類します
- Kafkaでは、各データを指定されたトピックに送信する必要があります
- 各トピックは1つから複数のパーティションに対応します
- テーマを削除すると、このテーマに対応するディレクトリはすぐには削除されませんが、削除済みとしてマークされます。1分ほど待つと、マークされたディレクトリが削除されます
- 削除操作をすぐに有効にする必要がある場合は、delete.topic.enableをtrueに設定する必要があります。
configディレクトリにあるサーバー。。。。ファイル
- パーティション:
- 各パーティションはディレクトリに対応しています
- 複数のKafkaノードがある場合、パーティションは各ノードで均等に分割されますこの設計の目的は、Kafkaのスループットを向上させることです
- 複数のパーティションがある場合、データはパーティションに書き込むときにローテーションで書き込まれます
- レプリカ:
- Kafkaでは、データの可用性を確保するために、複数のコピーを設定できます
- 複数のコピーが設定されている場合、パーティション単位でバックアップされます
- リーダーとフォロワー
- Kafkaでは、複数のレプリカが設定されている場合、コントローラーはレプリカ間で自動的に選出して、リーダーレプリカと他のフォロワーレプリカを選出します
- 注:リーダーとフォロワーは、Kafkaノード間のマスターとスレーブの関係ではなく、レプリカ間のマスターとスレーブの関係を指します。
- プロデューサーとコンシューマーはリーダーコピーとのみ対話し、フォロワーコピーとは対話しません
- コントローラ:
- リーダーコピーとフォロワーコピーの選出に使用
- コントローラーは特定のKafkaノード上にあります
- コントローラーがダウンしている場合、Zookeeperは他のKafkaノードでコントローラープロセスを開始します
- 消費者グループ:
- デフォルトでは、各コンシューマはコンシューマグループに対応しています
- 消費者グループには1人以上の消費者を含めることができます
- 同じメッセージを異なるコンシューマグループでサブスクライブできますが、同じグループ内の1つのコンシューマのみがグループ間のメッセージ共有、グループ内の競合を消費できます
3、カフカ命令とデータ同期
1.指示
命令
説明
sh kafka-server-start.sh ../config/server.properties
カフカを開く
sh kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor 1 --partitions 1 --topic video
テーマを作成する
sh kafka-topics.sh --delete --zookeeper hadoop01:2181 --topic小説
トピックを削除
sh kafka-topics.sh --list --zookeeper hadoop01:2181
すべてのトピックを表示
sh kafka-topics.sh --describe --zookeeper hadoop01:2181 --topic txt
主題を説明してください
sh kafka-console-consumer.sh --zookeeper hadoop01:2181-トピックビデオ
消費者を開始
sh kafka-console-producer.sh --broker-list hadoop01:9092-トピックビデオ
プロデューサーを開始
第二に、データの同期
- プロデューサーはデータをリーダーコピーに書き込みます
- フォロワーのコピーは、更新が必要なデータがあるかどうかを尋ねるリーダーにメッセージを送信します
- リーダーは、更新が必要なデータをフォロワーに送信し、フォロワーからのフィードバックを待ちます
- フォロワーレコードが成功した場合は、ack信号が返されます
- リーダーはackを受信した後、brokeridをISRキューのフォロワーコピーに配置します
- ISRはZookeeperで維持されます。リーダーのコピーが失われると、コントローラーは最初にISRからコピーを選択してリーダーになります
第4に、KafkaとMQの違い
KafkaとMQの違い(ここでは4つの側面から説明します)
1)アーキテクチャモデルに関しては、
RabbitMQはAMQPプロトコルに従います。RabbitMQのブローカーはExchange、Binding、およびキューで構成されます。Exchangeとバインディングはメッセージのルーティングキーを形成します。クライアントのプロデューサーは接続チャネルを介してサーバーと通信し、コンシューマーはキューからメッセージを取得して消費します(長い接続、キュー)。メッセージがコンシューマにプッシュされ、コンシューマは入力ストリームからループでデータを読み取ります。rabbitMQはブローカー中心であり、メッセージ確認メカニズムがあります。
Kafkaは一般的なMQ構造に準拠しています。プロデューサー、ブローカー、およびコンシューマーはコンシューマーに集中しています。メッセージの消費情報が格納されているクライアントコンシューマーでは、コンシューマーは消費ポイントに従ってブローカーからバッチでデータをプルします。メッセージ確認メカニズムはありません。
2)スループットでは、
RabbitMQはスループットの点でKafkaよりもわずかに劣っています。開始点は異なります。RabbitMQはメッセージの信頼できる配信をサポートし、トランザクションをサポートします。バッチ操作はサポートしていません。ストレージの信頼性要件に基づくストレージは、メモリまたはハードディスクを使用できます。
Kafkaはスループットが高く、内部でメッセージバッチ処理、ゼロコピーメカニズムを使用します。データの保存と取得はローカルディスクの順次バッチ操作であり、O(1)の複雑さで、メッセージ処理効率は非常に高くなります。
3)可用性に関しては、
rabbitMQはミラーのキューをサポートし、メインキューは失敗し、ミラーキューが引き継ぎます。
Kafkaのブローカーは、アクティブモードとスタンバイモードをサポートしています。
4)クラスタの負荷分散に関しては、
rabbitMQのロードバランシングは、サポートする別のロードバランサーを必要とします。
Kafkaはzookeeperを使用してクラスター内のブローカーとコンシューマーを管理し、トピックをzookeeperに登録できます。zookeeperの調整メカニズムにより、プロデューサーは対応するトピックのブローカー情報を保存し、ブローカーにランダムまたはポーリングで送信できます。プロデューサーはセマンティクスに基づいて指定できます断片化、メッセージはブローカーのフラグメントに送信されます。
5、ゼロコピーとは
ゼロコピーは、CPUがストレージ間でデータをコピーするのを防ぐテクノロジーです。オペレーティングシステムのデバイスドライバー、ファイルシステム、およびネットワークプロトコルスタック用に登場したさまざまなゼロコピーテクノロジにより、特定のアプリケーションのパフォーマンスが大幅に向上し、これらのアプリケーションがシステムリソースをより効率的に使用できるようになりました。このパフォーマンスの向上は、データのコピー中にCPUが他のタスクを実行できるようにすることで達成されます。
ゼロコピーテクノロジーは、データコピーと共有バス操作の数を削減し、メモリ間で送信されるデータの不要な中間コピーを排除することで、データ送信効率を効果的に向上させます。さらに、ゼロコピー技術は、ユーザーアプリケーションのアドレス空間とオペレーティングシステムのカーネルアドレス空間との間のコンテキストの切り替えによって発生するオーバーヘッドを削減します。大量のデータコピー操作を実行することは、実際には単純なタスクです。オペレーティングシステムの観点から見ると、CPUがこの単純なタスクを実行するために占有されている場合、リソースの無駄になります。他の比較がある場合単純なシステムコンポーネントがこれを処理できるため、CPUを解放して他のことを実行でき、システムリソースの使用がより効果的になります。要約すると、ゼロコピー技術の目標は次のように要約できます。
データのコピーを避ける
①オペレーティングシステムのカーネルバッファ間のデータコピー操作を回避します。
②オペレーティングシステムのカーネルとユーザーアプリケーションのアドレス空間間のデータコピー操作を回避します。
③ユーザーアプリケーションは、オペレーティングシステムをバイパスし、ハードウェアストレージに直接アクセスできます。
④DMAにデータ転送を行わせる。
複数の操作を組み合わせる
①不要なシステムコールやコンテキストの切り替えを避けます。
②コピーするデータを先にキャッシュすることができます。
③ハードウェアにデータ処理を任せる。