27.1 Apache Kafkaの概要

27.1.1はじめに

すべての組織は、データの観点から非常にシンプルな方法で開始します。 組織のデータエコシステムは、1つのソースシステムと1つのターゲットから始まります。 ソース・システムがターゲット・システムにデータを送信します。 簡単だろ?
それだけの単純さが残るのなら。 組織は、シンプルなセットアップをすぐに拡張し、ソース・システムとターゲット・システムの数が急速に増加します。 これらの様々なソースや宛先はすべて、互いにデータを交換する必要があり、すぐに非常に複雑になります。
例えば、組織に4つのソースと6つの宛先があり、これらのアプリケーションがすべて互いに通信する必要がある場合、24の統合を構築する必要があります。これらの統合には、それぞれ独自の困難が伴います。

  • プロトコル:データの転送方法(TCP、HTTP、REST、FTPなど)
  • データ形式:データを解析する方法(バイナリ、CSV、JSON、Parquetなど)
  • データスキーマと変化:データモデルとは何で、どのように進化するのか。

さらに、ソース・システムを宛先システムに接続するたびに、その接続からのシステムの負荷が増加します。

どうやって解決するの? Apache Kafkaが登場します Apache Kafkaを使用すると、共通の高スループットの分散メッセージングシステムを提供することで、組織でデータストリームとシステムを切り離すことができます。 ソースシステムはデータをApache Kafkaに送信し、宛先システムはApache Kafkaのデータを使用します。

ビジネスでは、以下の管理が必要なデータソースのあらゆるタイプを考えてみましょう。

  • webサイトイベント
  • モバイルアプリイベント
  • POSイベント
  • CRMデータ
  • callcenterデータ
  • 取引履歴

また、あらゆるタイプの宛先が、ビジネスがエコシステムで使用する場合、それらのソースシステムからのデータが必要になる可能性があることを考えてみましょう。

  • CRM
  • データレイク
  • 電子メールシステム
  • 監査
  • analytics

Apache KafkaはLinkedInが創作し、現在は主にComfluentが管理するオープンソースプロジェクトです。
Apache Kafkaは、耐障害性に優れた分散型の耐障害性アーキテクチャを提供します。 100台のブローカーに対して水平方向に拡大し、1秒あたり数百万件のメッセージに拡大できます。 リアルタイムの使用例に最適な、10 ms未満の待ち時間で高いパフォーマンスを提供します。

2つの使用例を次に示します。

  • メッセージングシステム
  • アクティビティの追跡
  • 様々な場所からの指標の収集
  • アプリケーションログの収集
  • ストリーム処理(Kafka Streams APIまたはSparkを使用)
  • システムの依存関係の分離
  • Spark、Flink、Storm、Hadoop、その他多くのビッグデータテクノロジーとの統合。

例:

  • NetflixはKafkaを使用して、テレビ番組を見ている間にリアルタイムでレコメンデーションを適用します
  • UberはKafkaを使用して、ユーザー、タクシー、旅行データをリアルタイムで収集し、需要の計算と予測を行い、サージ価格をリアルタイムで計算します
  • linkedInは、スパムを防ぐためにKafkaを使用し、ユーザーインタラクションを収集して、より優れた接続レコメンデーションをリアルタイムで提供します

これらすべての使用例で、Kafkaは輸送メカニズムとしてのみ使用されます。 Kafkaは、アプリケーション間でデータを移動するのが得意です。

27.1.2 Kafkaの用語

メッセージ

メッセージとは、システムによってKafkaに送信される通信のことです。 メッセージにはペイロードが含まれ、ペイロードにはデータ要素が含まれます。 例えば、WebサイトによってAdobe Experience Platformに送信されるエクスペリエンスイベントは、メッセージと見なされます。

トピック、パーティション、オフセット

トピックは、データベース内のテーブルに似た、特定のデータストリームです。 必要な数のトピックを含めることができ、トピックは名前で識別されます。 トピックはパーティションに分割されます。 各パーティションは順序付けされ、パーティション内の各メッセージは増分IDを取得します。このIDは​offset​と呼ばれます。 メッセージは、トピック内のパーティションに格納され、オフセットを使用して参照されます。 メッセージは、一定の期間のみ保持されます(デフォルトは1週間)。 メッセージがパーティションに書き込まれると、もう変更できなくなります。

ブローカー

ブローカーは、サーバーに似ています。 Kafkaクラスタは、複数のブローカ(サーバ)で構成されます。 各ブローカーはIDで識別され、特定のトピック・パーティションを含みます。

レプリケーション

カフカは分散システムです 分散システムの重要な点の1つは、データが安全に保存され、レプリケーションが必要であることです。 結局、あるブローカー(サーバー)がダウンした場合でも、別のブローカー(サーバー)は、ダウンしたブローカーに最初に保存されたメッセージにアクセスできるはずです。 複数のブローカー間でメッセージのコピーを作成して、データが失われないようにします。

生産者

データはどのようにKafkaに送信されますか? それがプロデューサーの役割だ。 プロデューサは、ソース・システムに接続し、ソース・システムからデータを取り出し、そのデータをパーティションに書き込む。 Kafkaクラスターの設定に基づいて、プロデューサーは書き込むブローカーとパーティションを自動的に知ることができます。 複数のブローカーとレプリケーション戦略を備えた分散システムでは、プロデューサーは複数のブローカーに対してランダムにデータを格納します。つまり、ロードバランシングは自動的に行われます。

メッセージキー

プロデューサーは、メッセージと共にキーを送信することを選択できます。 キーには、任意の文字列、数値などを指定できます。 キーが指定されない場合、メッセージはブローカーにランダムに送信されます。 キーが送信された場合、そのキーのすべてのメッセージは常に同じパーティションに送信されます。 メッセージキーなどは、特定のフィールドに基づいてメッセージを並べ替えるために使用します。

消費者

コンシューマーはApache Kafkaトピックからデータを読み取り、そのデータを宛先システムと共有します。 消費者は、読み取るブローカーを知っている。 データは、各パーティション内で順に消費者によって読み取られます。 消費者は、消費者グループのデータを読み取ります。

飼育員

ZooKeeperは基本的に、階層型のキー値ストアを提供する分散システム向けのサービスで、大規模な分散システム向けの分散構成サービス、同期サービス、および命名レジストリを提供するために使用されます。 Apache Kafkaを使用する前にZookeeperを実行する必要があり、ZookeeperはKafkaの儀式のマスターのようなもので、Kafkaがイベントを生成し消費しながらバックエンドで分散サービスを管理します。

この練習は終わりました。

次の手順:24.2 Kafkaクラスターをインストールして設定します

モジュール24に戻る

すべてのモジュールに戻る

このページ