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 クラスターへの安全な接続は構成変数に任せ、コアロジックに集中できます。

保護・法規制されたデータストリームの安全な管理

高いセキュリティをもたらしシームレスに HIPAA へ準拠した全く新しい種類のリアルタイムなアプリを構築し、機密性の高い PHI や PII データストリームを安全に管理しましょう。 ヘルスケアや生命科学など規制業界のお客様に最適です。

Heroku や Amazon のイベントストリームへのアクセス

Apache Kafka on Heroku を Amazon VPC で稼動しているリソースに PrivateLink を介してシームレスに安全に接続します。

お客様のキーを持参 (BYOK)

お客様のプライベートなAWS KMSアカウントで作成して管理しているキーで、新規の Apache Kafka サービスをデプロイしましょう。 キーを無効化することによって、いつでもどこからでもアクセスを停止し、お客様の機密データを完全に制御し保護することができます。

Streaming Data Connector

Heroku の Change Data Capture (CDC) プロセスで、Postgres の複数のテーブルへの書き込み・更新・削除を監視し、それぞれの変更を Apache Kafka on Heroku のトピックに書き込むよう、素早く簡単に設定することができます。

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 によって、日々のメトリクスの管理と共に、プラットフォームの専門的な微調整が可能となりました。私たちだけではなし得なかったことです。」

Yuri Oliveira
GNAR 社フルスタックエンジニア
GNAR 様事例→

「私たちが Heroku で実装する全てのものと同様、Apache Kafka のプラットフォームでの設定は信じられないほど速く済みました。管理の必要も少なく、正しく設定できればあとは Heroku のチームがスムーズに稼動をさせ続けてくれるという安心感もあります。」

Mitch Moody
Anyone Home 社 CTO
Anyone Home 様事例→

「Apache Kafka on Heroku は、アプリ間のイベント通知とサイトアナリティクスのためのイベントデータフローの両方への単一のソリューションを提供します。アプリを手動で設定したり追加でイベントストリーム機構を管理する必要はありません。時間の節約になり、複雑さを軽減します。」

Michael Wagg
carwow 社テックリード

「Apache Kafka on Heroku の最大の利点のひとつは、開発者体験です。これまでと同様手になじんだツールや、Heroku アプリや他の add-on と同様 Kafka の統一された管理体験を利用することができ、私たちのチームの構造に近いシステムになりました。」

Ryan Daigle
Spreedly 社エンジニアリングディレクター

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

柔軟なキューイング

システムの境界線としての役割を果たす 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 に注目した理由を説明しています。