Kafka high level diagram

Kafka とは

Apache Kafka は分散型コミットログの一種で、「トピック」という概念を使ってプロデューサーとコンシューマーの間に高速かつフォールトトレランスに優れた通信を実現するものです。Kafka の提供するメッセージングは、膨大な数のイベントやトランザクションを処理できる新世代の分散型アプリケーションの開発に役立ちます。


イベントをコントロール

ユーザーのアクティビティストリーム、ログイベント、組み込みデバイスや携帯電話からのテレメトリなど、イベントはあらゆるところにあります。Kafka はプッシュ型に代わってプル型のスクリプトを採用しているため、ユーザーが自らのアプリケーションで大量のイベントストリームを制御し、カスタマーエクスペリエンスを変えることができます。Kafka ならどのような規模のインバウンドイベントにも対応し、キーをベースにしたパーティションに簡単に送ることができるため、ユーザーアクティビティや広告の追跡、IoT、モバイル同期システム、メッセージングシステムなどに役立つリアルタイムストリーム処理を実装できます。

最新のアプリケーションアーキテクチャを構築

マイクロサービスのようなアプリケーションアーキテクチャでは、連携やスケール、オーケストレーションについて従来と異なるアプローチが必要になります。Kafka ではプルベースの通信モデルを採用しているため、主要サービスに対する負荷を軽減し、新しいサービスを個別に追加、スケールできます。Kafka を使えばチャネルを中心にした開発モデルに移行できるため、サービスの検出を簡略化し、脆弱な RPC スタイルや、サービス間の多対多連携を減らすことができます。

データや時間を処理が一変

Kafka を使い始めると、アプリケーションのデータ、時間、操作の関係を考え直してみたくなることでしょう。Kafka はテーブルから取得したトランザクションデータをばらばらにして、一連の「イベント」に変換します。それぞれのイベントは、ある時点で入力されたレコードと操作を表します。このようなしくみの下では、アプリケーションに対する変更のイベントを 1 つにまとめたレコードを作成できるため、データ復旧や再生、シミュレーション、監査に役立ちます。また、コンシューマー側でトピックからデータを読み取ったり、関数を適用したり、出力を新たなトピックセットに書き込んだりすることにも対応した、分析や変換のための強力なデータ処理パイプラインを構築することも可能になります。

なぜ Apache Kafka on Heroku なのか

あらゆる規模のイベントストリームに対応

イベント駆動型のアーキテクチャでも、大企業レベルの Kafka ソリューションでも関係ありません。Heroku なら、あらゆるニーズに対応します。まず、開発とテストの計画から始めましょう。ニーズが拡大したときは、CLI のシンプルなコマンド 1 つで大きなプランに移行できます。

世界レベルの運用を実現

Apache Kafka on Heroku では、Kafka をサービスとして提供します。Heroku の世界レベルのオーケストレーションと入念に調整された構成により、高速かつ安定した状態で Kafka を利用できます。Heroku では、Kafka リソースをネットワークゾーン全体に分散し、フォールトトレランスを確保することによって、Kafka クラスターの可用性を維持し、常時アクセス可能な状態を実現しています。

開発者向け機能も充実

使いやすい CLI と Web ツールで、Kafka のプロビジョニングや設定、運用を簡単に行えます。また、トピックの追加、パーティションの作成、ログ圧縮の管理、主要なメトリックの確認といった作業も、CLI や ダッシュボードを使えば非常に快適です。

アプリとのシームレスな連携

プロデューサーやコンシューマーを Heroku アプリケーションとして実行すれば、スケールアウトもスケールアップも簡単に行なえます。Kafka クラスターへの安全な接続は構成変数に任せ、コアロジックに集中できます。

heroku addons:create heroku-kafka:standard-0 -a kafka-demo

Creating cooking-kindly-6535... done, (free)

Adding cooking-kindly-6535 to kafka-demo... done

Setting KAFKA_URL and restarting kafka-demo... done, v3

Kafka Dashboard
しくみ

Kafka は、メッセージ、トピック、パーティション、プロデューサー、コンシューマー、ログ圧縮など、分散型アプリケーションの接続に必要な機能を実現するものです。


メッセージ

Kafka は メッセージ受け渡しシステムです。メッセージはイベントであり、キーを割り当てることもできます。

ブローカー

Kafka クラスターは、Kafka プロセスを実行するブローカーで構成されています。

トピック

トピックは、特定のカテゴリーに属するメッセージのストリームです。

パーティション

パーティションは、トピックのメッセージを順番に並べたログであり、各メッセージは必ずログの末尾に追加されます。メッセージには、パーティション内の位置を表すオフセットが含まれます。Kafka は、クラスター全体でパーティションを複製することにより、フォールトトレランスとメッセージの耐久性を確保します。

プロデューサー

プロデューサーは、トピックやパーティションに割り当てられたブローカーにメッセージを送信するクライアントプロセスです。プロデューサーは、キーにもとづいてパーティション機能を使用することによりメッセージの配信を制御します。

コンシューマー

コンシューマーは、ブローカーを通じてトピックのパーティションからのメッセージを読み取り、最後に読み取られたオフセットを追跡して調整や障害からの回復を実行します。コンシューマーをグループ単位でデプロイするとスケーラビリティが得られます。

ログ圧縮

ログ圧縮は、個々のキーの最新値を保持して、クライアントが状態を復元できるようにする機能です。

  • Apache Kafka on Heroku を導入することによって得られた最大のメリットは、開発者のエクスペリエンスが大幅に向上したことです。Heroku アプリケーションや他のアドオンと同様に、使い慣れたツールや一元管理エクスペリエンスを Kafka でも利用できます。これで、チーム構成にぴったりのシステムを手に入れることができました。

    spreedly Ryan Daigle Spreedly社エンジニアリング担当ディレクター
  • Apache Kafka on Heroku のおかげで、ほとんどすべてのものを自動化し、多数のコールをプッシュ/プルデータストリームにリアルタイムで移動できるようになりました。また、大規模なデータコールに対して非同期バッチを実行できるため、処理時間が半分になっただけでなく、信頼性が向上し、モニタリングや管理にかかる時間も短縮されました。

    Anyone Home Mitch Moody Anyone Home 社CTO お客様事例を読む >>
  • Apache Kafka on Heroku を使用すれば、アプリケーション間のイベント通知だけでなく、サイト分析のためのデータフローにも 1 つのソリューションで対応できます。手作業でアプリケーションを構成したり、余計なイベントストリーミングメカニズムを管理したりする必要がなくなって、時間や手間を大幅に節約できるようになりました。

    Anyone Home Michael Wagg carwow 社テクニカルリード

大量のデータをやり取りするアプリケーションを構築

柔軟なキューイング

システムの境界線としての役割を果たす Kafka on Heroku では、ユーザーのクリック操作やログイベント、モバイルテレメトリ、広告の追跡など、大量のインバウンドイベントを継続的に受け入れ続けることができます。そのため、変更不可能なイベントストリームの順次処理に対応した、新しいタイプのアーキテクチャを作成できます。また、高スループットのインバウンドイベントの受け入れに影響を与えることなく、ダウンストリームサービスをシームレスに追加または削除することができます。Kafka の耐久性を活用すれば、エラーが発生してもサービスが再接続されたときにイベントが再び利用可能になり、イベントが 1 つも失われないようにすることが可能になります。

データパイプラインと分析

Kafka は、ストリームデータを変換し、集計指標を計算するデータパイプラインの構築に理想的なトランスポートです。データ中心の高度なアプリケーションを構築して、分析チームが的確に意思決定を行えるようにするには、パイプラインが便利です。Kafka の分散アーキテクチャと変更不可能なイベントストリームのおかげで、高速に移動するデータの順次並列処理を行うためのパイプラインを簡単に構築できます。また、組織内のありとあらゆるデータソースやデータ保存領域をすべて統合することも可能です。

マイクロサービスの調整

Kafka を使用すると、イベントを処理し、チャネルに似たトピックを介して状態をやり取りするマイクロサービスのコレクションとして、アプリケーションをモデル化することができます。Kafka は、サービスコミュニケーションのバックプレーンとなり、マイクロサービスを疎結合できるようにします。コミュニケーションはすべて、トピック経由で行われるため、マイクロサービスのブートストラップは順序に関係なく行われるようになります。サービスの検出とは、単に新しいトピックへの接続にすぎません。サービスの利用や作成と同様に、Kafka ブローカーも個別にスケールできるので、アーキテクチャはきわめて柔軟になります。Kafka はイベントの耐久性を高めるため、複数のサーバーにわたってトピックを分散し、メッセージを複製するため、何らかの理由でブローカーに不具合が生じた場合でも、イベントデータは安全です。サービスに不具合が発生した場合、サービスは再接続して、最後の既知のオフセットから処理を開始できます。


実際にご覧ください

Kafka on Heroku で何ができるかを見てみましょう。最新のデモをご覧ください。

Kafka のデモを見る


テクニカルセッション

Kafka on Heroku を使用したイベントドリブンアーキテクチャの構築

Apache Kafka を使用すれば 1 日に数十億個のイベントをストリーミングできますが、アプリのアーキテクチャのどこで使えばよいかをご存じですか? このテクニカルセッションでご確認ください。Heroku の製品エキスパートがデモを交えながら皆さんの疑問にお答えします。

ポッドキャスト

Thomas Crayford 氏が語る Apache Kafka at Heroku

2016 年 10 月 25 日に開催された Software Engineering Daily の模様をポッドキャストでお聞きください。

Apache Kafka は耐久性の高い分散型メッセージブローカーで、大量のインバウンドイベントの管理、データパイプラインの構築、マイクロサービス用コミュニケーションバスとしての使用に最適です。この Software Engineering Daily ポッドキャストでは、Heroku のエンジニア Tom Crayford が、Apache Kafka on Heroku サービスの構築、現在の課題、Heroku が Kafka に注目した理由を説明しています。