Kafka とは?
Apache Kafka は、ストリーミングデータをリアルタイムで取り込んで処理するために最適化された分散データストアです。ストリーミングデータは、通常、データレコードを同時に送信する数千のデータソースによって継続的に生成されるデータです。ストリーミングプラットフォームは、この絶え間ないデータの流入を処理し、データを順次および段階的に処理する必要があります。
Kafka がユーザーに提供する主要機能は次の 3 つです。
- レコードストリームを公開しサブスクライブする
- レコードが生成される順序でレコードのストリームを効果的に保存
- レコードのストリームをリアルタイムで処理する
Kafka は主に、データストリームに適応するリアルタイムストリーミングデータパイプラインとアプリケーションの構築に使用されます。メッセージング、ストレージ、ストリーム処理を組み合わせて、履歴データとリアルタイムデータの両方の保存と分析を可能にします。
Kafka の使用法は何ですか?
Kafka は、リアルタイムストリーミングデータパイプラインとリアルタイムストリーミングアプリケーションの構築に使用されます。データパイプラインは、データを確実に処理してあるシステムから別のシステムに移動します。ストリーミングアプリケーションは、データのストリームを消費するアプリケーションです。例えば、ユーザーのアクティビティデータを取り込んで、ユーザーがウェブサイトをどのように使用しているかをリアルタイムで追跡するデータパイプラインを作成する場合、Kafka を使用してストリーミングデータを取り込みおよび保存し、データパイプラインを強化するアプリケーションを読み取ります。Kafka は、2 つのアプリケーション間の通信を処理および仲介するプラットフォームであるメッセージブローカーソリューションとしてもよく使用されます。
Kafka はどのように機能しますか?
Kafka は、キューイングとパブリッシュ/サブスクライブという 2 つのメッセージングモデルを組み合わせて、それぞれの主な利点をコンシューマーに提供しています。キューイングにより、データ処理を多数のコンシューマーインスタンスに分散できるため、スケーラビリティが高くなります。ただし、従来のキューはマルチサブスクライバーではありません。パブリッシュ/サブスクライブ方式はマルチサブスクライバーですが、すべてのメッセージがすべてのサブスクライバーに送信されるため、それを使用して複数のワーカープロセスに作業を分散することはできません。Kafka は、パーティション化されたログモデルを使用して、これら 2 つのソリューションをつなぎ合わせます。ログは順序付けられたレコードのシーケンスであり、これらのログは、さまざまなサブスクライバーに対応するセグメント (パーティション) に分割されます。つまり、同じトピックに複数のサブスクライバーが存在する可能性があり、それぞれにパーティションが割り当てられるため、スケーラビリティが高まります。最後に、Kafka のモデルには再現性があります。これにより、データストリームから読み取る複数の独立したアプリケーションが、独自の速度で独立して動作できるようになります。
キューイング
パブリッシュ/サブスクライブ
Kafka のアプローチにはどのような利点がありますか?
スケーラブル
Kafka のパーティション化されたログモデルでは、データを複数のサーバーに分散できるため、1 台のサーバーに収まる範囲を超えてスケールできます。
高速
Kafka はデータストリームを分離するため、レイテンシーが非常に低く、非常に高速になります。
耐久性
パーティションは多くのサーバーに分散およびレプリケートされ、データはすべてディスクに書き込まれます。これにより、サーバー障害からの保護が可能になり、データの耐障害性と耐久性が非常に高くなります。
Kafka のアーキテクチャは異なるモデルをどのように統合しているのでしょうか?
Kafka は、異なるトピックにレコードを公開することで、2 つの異なるモデルを改善します。各トピックにはパーティション化されたログがあります。これは、すべてのレコードを順番に追跡し、新しいレコードをリアルタイムで追加する構造化されたコミットログです。これらのパーティションは複数のサーバーに分散およびレプリケートされるため、高いスケーラビリティ、フォールトトレランス、および並列処理が可能になります。各コンシューマーにはトピックにパーティションが割り当てられます。これにより、データの順序を維持しながら複数のサブスクライバーが動作できます。これらのメッセージングモデルを組み合わせることで、Kafka はどちらのメリットも得られます。また、Kafka はすべてのデータをディスクに書き込み、レプリケートすることで、非常にスケーラブルで耐障害性に優れたストレージシステムとしても機能します。デフォルトでは、Kafka はスペースがなくなるまでデータをディスクに保存しますが、ユーザーは保存上限を設定することもできます。Kafka には次の 4 つの API があります。
- プロデューサー API: レコードのストリームを Kafka トピックに公開するために使用します。
- コンシューマーAPI: トピックをサブスクライブし、そのレコードストリームを処理するために使用します。
- ストリーム API: アプリケーションがストリームプロセッサとして動作できるようにします。ストリームプロセッサは、トピックから入力ストリームを受け取り、別の出力トピックへの出力ストリームに変換します。
- コネクタ API: ユーザーが別のアプリケーションやデータシステムを現在の Kafka トピックに追加することをシームレスに自動化できます。
Apache Kafka と RabbitMQ の違いは何ですか?
RabbitMQ は、メッセージングキューアプローチを使用するオープンソースのメッセージブローカーです。キューはノードのクラスターに分散され、オプションでレプリケートされます。各メッセージは 1 人のコンシューマーにのみ配信されます。
特徴 |
Apache Kafka |
RabbitMQ |
アーキテクチャ |
Kafka は、メッセージングキューとパブリッシュサブスクライブアプローチを組み合わせたパーティションログモデルを使用しています。 |
RabbitMQ はメッセージングキューを使用しています。 |
スケーラビリティ |
Kafka は、パーティションをさまざまなサーバーに分散させることができるため、スケーラビリティが向上します。 |
キューに入るコンシューマーの数を増やして、競合するコンシューマー全体で処理をスケールアウトします。 |
メッセージ保持 |
ポリシーに基づいて、例えば、メッセージは 1 日保存できます。ユーザーはこの保存期間を設定できます。 |
受信確認に基づいて、メッセージは消費されると削除されます。 |
複数のコンシューマー |
Kafka では同じメッセージを特定の時間帯に再生できるため、複数のコンシューマーが同じトピックをサブスクライブできます。 |
メッセージは消費されると削除されるため、複数のコンシューマーがすべて同じメッセージを受信することはできません。 |
レプリケーション |
トピックは自動的にレプリケートされますが、ユーザーはトピックをレプリケートしないように手動で設定できます。 |
メッセージは自動的にレプリケートされませんが、ユーザーはレプリケートするように手動で設定できます。 |
メッセージの順序 |
ログアーキテクチャが分割されているため、各コンシューマーは情報を順番に受け取ります。 |
メッセージは、キューに到着した順にコンシューマーに配信されます。競合するコンシューマーがいる場合、各コンシューマーはそのメッセージのサブセットを処理します。 |
プロトコル |
Kafka は TCP 経由のバイナリプロトコルを使用します。 |
プラグインによるサポートを受けた高度なメッセージングキュープロトコル (AMQP): MQTT、STOMP。 |
AWS は Kafka 要件をどのようにサポートできますか?
Kafka を AWS に手動でデプロイする方法の詳細については、こちらをご覧ください。
AWS では、Apache Kafka 向けの互換性と可用性が最も高く、安全なフルマネージド型サービスである Amazon MSK も提供しています。これにより、お客様はデータレイクの作成、データベースへの変更のストリーミング、データベース間の変更のストリーミング、機械学習および分析アプリケーションの強化が可能になります。Amazon MSK を使用すると、お客様はインフラストラクチャの管理に費やす時間を減らし、アプリケーションの構築により多くの時間を費やすことができます。 Amazon MSK の詳細をご覧ください。