マジセミドライブ
ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。
OSS情報
2020.01.01
【OSS情報アーカイブ】Apache Kafka


※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。
コンテンツ
「Apache Kafka」とは
「Apache Kafka」基本情報
■概要
Apache Kafka(アパッチ カフカ)とは、分散ストリーミングプラットフォームです。「Pull型」「高スループット」などの特徴があり、ストリーミングデータパイプライン構築に利用できます。
■基本説明
Apache Kafkaは、分散環境において「高スループット」かつ「低レイテンシ」で、大規模データ(ログデータ/イベントデータなど)を高速に取り込み、配信できるメッセージングシステムです。オンライン/オフライン両方のメッセージ取得に対応します。
■経緯
2011年、LinkedInがオープンソース公開しました。
その後、Apache Software Foundationが開発を行っています。
■ユースケース
「リアルタイムストリーミングデータパイプライン構築」や「データストリームを変換するリアルタイムストリーミングアプリケーション」などを構築できます。
■オフィシャルサイト情報
オフィシャルサイト
ライセンス情報
Apache Kafkaのライセンスは「Apache License 2.0」です。
詳細について、こちらを参照ください。
→GitHub →kafka-dev/kafka →LICENSE
ダウンロード
導入事例
Apache Kafkaは、「LinkeIn」「Twitter」「Netflix」「Uber」「Tumblr」などでの採用実績があります。
■同様製品
同様な機能を提供する製品として、次のようなものがあります。
オープンソース製品:「Apache Storm」「RabbitMQ」など。
「Apache Kafka」の主な特徴
■Pull型(Publish-Subscribeモデル)
一般的なクライアントサーバモデルにおいて、クライアントがサーバにデータを取りに行くことを「Pull」、サーバがクライアントへデータを送り出すことを「Push」といいます。
メッセージシステムにおいては、「サーバ=Producer」「クライアント=Consumer」と呼ばれます。
Apache Kafkaは、Pull型(Publish-Subscribeモデル)を採用しています。
Pull型であることの主なメリット
・データ転送量などを意識する必要がない
・自らスループット調整できる
・バッチ処理にも対応できる
・複数サーバが生成するログを1箇所にまとめておく処理が可能 など
■高速大量処理
Apache Kafkaは、大量のメッセージを高速処理できます。
「カーネルメモリキャッシュを最大限使用する」「ページキャッシュからネットワークのsocketへ効率よくデータを受け渡す」などの仕組みにより高速処理を実現しています。
LinkedInのベンチマークでは、「1秒間で200万メッセージ処理」を達成しています。低スペックのハードウェアでも、数ミリ秒の遅延で「1秒間で数十万メッセージ処理」が可能です。
■高可用性
Apache Kafkaは、分散環境運用コーディネーションエンジン「Apache ZooKeeper」を動かして、複数のKafkaサーバを連携させてクラスタ化します。クラスタ化により耐障害性/高可用性を実現します。
以下の仕組みによりデータ損失を防ぎます。
・データストリームを分散レプリケートフォールトトレラントクラスタに安全に保管
・メッセージはディスクにファイルとして保存 など
■スケーラブル
Apache Kafkaは、Kafkaクラスタをダウンタイムなしで、柔軟かつ透過的に拡張できます。
■ストリームデータ格納構成
Kafkaは、1つ以上のサーバ上でクラスタとして実行されます。
Kafkaクラスタは「トピック」と呼ばれるカテゴリにストリームレコードを格納します。
各「ストリームレコード」は、「キー」+「値」+「タイムスタンプ」で構成されます。
■3つのコンポーネント
Apache Kafkaは、「Producer→Broker→Consumer」の、3つのコンポーネントで構成されます。
Producer
「Producer」は、メッセージデータ発生元で、メッセージの配信を行います。
Broker
「Broker」は、クラスタを構成するKafkaのコアで、「Producer」と「Consumer」の間で、メッセージの受け渡しをするキューとして機能します。
Consumer
「Consumer」は、メッセージデータ配信先で、メッセージの購読を行います。
■4つのコアAPI
Kafkaには4つのコアAPIがあります。
Producer API
Producer APIは、アプリケーションが1つ以上のKafkaトピックにストリームレコードを公開する機能を提供します。
Producer APIは、ロードバランスを取るために「ラウンドロビン方式」または「セマンティックパーティション関数」に従ってトピック内のどのパーティションに割り当てるのかについて選択します。
Consumer API
Consumer APIは、アプリケーションが1つ以上のトピックをサブスクライブし、トピックに格納されているストリームレコードを処理する機能を提供します。
Consumerインスタンスは「別々のプロセス」または「別々のマシン」に配置できます。
すべてのConsumerインスタンスが同じコンシューマグループに属する場合、ストリームレコードはConsumerインスタンスに対して実質的に負荷分散されます。
すべてのConsumerインスタンスが異なるConsumerグループに属する場合は、各ストリームレコードはすべてのConsumerインスタンスにブロードキャストされます。
Streams API
上記の、Producer APIとConsumer APIを使用すれば、単純なストリーム処理を直接実行できます。しかし、変換処理が必要となる複雑なケースの場合、Streams APIを使用することで対応できます。
Streams APIは、入力トピックから連続的なストリームレコードを取り出し、この入力に対して「集約」「結合」「変換」などの処理を行い、トピックを出力するための連続したストリームレコードを生成する機能を提供します。
例えば、小売りアプリケーションの場合では、「販売」および「出荷」の入力ストリームを受け取り、これらのデータに対して並べ替えや価格調整された出力ストリームを生成できます。
Connector API
Connector APIは、既存アプリケーション/データシステムに対して、Kafkaトピックを接続する機能を提供します。
■メッセージング保証
Apache Kafkaでは、メッセージング保証を提供しています。
①メッセージ送信順
Producerによって特定のトピックパーティションに送信されたメッセージは、送信された順序で追加されます。
②メッセージ取得順
Consumerインスタンスは、ログに格納されている順序でレコードを表示します。
③Consumerプロセスのプール全体での発注保証と負荷分散
トピック内の並列性により、Kafkaは、Consumerプロセスのプール全体での発注保証と負荷分散の両方を提供できます。
これは、トピック内のパーティションをConsumerグループ内のConsumerに割り当てることによって実現され、各パーティションはグループ内のConsumerによって消費されます。これにより、Consumerがそのパーティションの唯一の読者であることを保証し、データを順番に消費します。
■分散型ストレージシステム
Kafkaに書き込まれたデータはディスクに書き込まれ、耐障害性のために複製されます。
そのため、Apache Kafkaは、「高性能」「低レイテンシ」「コミットログストレージ」「レプリケーション」「伝播専用」などの特徴を持つ「分散型ストレージシステム」と捉えることもできます。
■可視化ツール「Trifecta」
可視化ツール「Trifecta」を利用すると、「Kafkaトピック」や「Kafkaメッセージ」などについて可視化できます。
■TCPプロトコルベース
Apache Kafkaでは、クライアント/サーバ間通信は、シンプルで高性能な言語に依存しないTCPプロトコルで行われます。
■開発用ライブラリ
Kafkaは多くの言語に対応する開発用ライブラリを用意されています。
「Apache Kafka」のユースケース
「Apache Kafka」のユースケース
Apache Kafkaを使用することで、さまざまなユースケースに対応できます。
■メッセージブローカー
Apache Kafkaは、大規模なメッセージ処理アプリケーションに適しており、メッセージブローカーとして機能します。
同様機能を提供する「ActiveMQ」「RabbitMQ」などのメッセージングシステムに匹敵します。
■Webサイトのアクティビティトラッキング
Apache KafkaをWebサイトアクティビティトラッキングに利用する場合、1つのユーザーアクティビティが1つのトピックとなり、トピックに対してサイトアクティビティ(ページビュー、検索、ユーザーが取る可能性のある他のアクション)が公開されます。
これらのフィードは、さまざまなユースケースのサブスクリプションに利用できます。
■メトリック
Apache Kafkaは、運用監視として、分散アプリケーションからの統計を集約して、運用データの一元的なフィードを作成する処理に利用できます。
■ログ集計
ログ集約は、通常、物理的なログファイルをサーバーから収集し、ファイルサーバ(HDFS)に配置して処理します。
Kafkaはファイルの詳細について、ログやイベントデータをメッセージストリームとして抽象化する機能を提供します。
■ストリーム処理
Apache Kafkaを利用して、リアルタイムでイベントに反応するスケーラブルなストリーム処理アプリケーションを作成できます。複数のステージからなるパイプライン処理を実現できます。
同様な機能を提供するプロダクトとして、「Apache Storm」「Apache Samza」などがあります。
■イベントソーシング
イベントソーシングとは、状態変更が時間順のレコードシーケンスとして記録されるアプリケーション設計スタイルです。
非常に大きなログデータを保存できるApache Kafkaは、このスタイルで構築されたアプリケーションの優れたバックエンドになります。
■コミットログ
Kafkaは、分散システムにおける一種の外部コミットログとして機能できます。
外部コミットログは、ノード間データ複製において、障害ノードがデータを復元するための再同期メカニズムとして機能します。
同様な機能を提供するプロダクトとして、「Apache BookKeeper」などがあります。
参考元サイト
※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。
この記事のタグ一覧
フリーワード検索
カテゴリー一覧
アクセスランキング
- 🏆ランク1位🏆
【無料オープンソース】「 AWS監視 」ツールまとめ5選 - 🏆ランク2位🏆
【OSS情報アーカイブ】Spinnaker - 🏆ランク3位🏆
【無料で使える】「 RPA 」ツールまとめ - 🏆ランク4位🏆
【ツール紹介】無料オープンソース「 ビデオ監視 ツール 」まとめ3選 - 🏆ランク5位🏆
【ツール紹介】無料で使えるオープンソース「 ポータル プラットフォーム 」まとめ5選 - 🏆ランク6位🏆
【OSS情報】Python用開発タスク自動化ツール「 tox 」 - 🏆ランク7位🏆
【OSS情報アーカイブ】GNU Emacs - 🏆ランク8位🏆
【OSS情報アーカイブ】GitBucket - 🏆ランク9位🏆
【無料で使える】「 ファイアウォール 」ソフトウェアまとめ - 🏆ランク10位🏆
【OSS情報アーカイブ】Laravel
おすすめの記事


ChatGPT探訪
2023.11.10
【ChatGPT探訪】GPT-4V「 画像解析機能 」🔍
ChatGPT4の「 画像解析機能 」について、 画像読み込み機能チェックを実施してみました🔍 「請求書不備チェック」は便利なのですが、 クローズドGPTを使いたくなります🤔 さまざまな用途に活用できる可能性を感じました🌟 いろいろ分析してくれるので、 試してみてください👍