はじめに
Kafka について知るべきこと全てを10分で
イベントストリーミングは、人体の中枢神経システムのデジタル版です。これは、ビジネスがますますソフトウェア定義および自動化され、ソフトウェアの利用者がますますソフトウェアになる '常にオン' の世界のための技術的基盤です。
技術的に言えば、イベントストリーミングは、データベース、センサー、モバイルデバイス、クラウドサービス、ソフトウェアアプリケーションなどのイベントソースから、イベントのストリーム形式でリアルタイムのデータをキャプチャする; これらのイベントストリームを後で取得できるように格納する; イベントストリームの操作、処理、リアルタイムでの遡及的に対応する; 必要に応じて、イベントストリームを様々な宛先の技術にルーティングする、方法です。従って、イベントストリームにより、データの継続的な流れと解釈が保証され、適切な情報が適切な場所に適切なタイミングで送信されます。
イベントストリーミングは何に利用できますか?
イベントストリームは、様々な業界や組織の幅広い用途に適用されます。以下は多くの例です:
- 証券取引所、銀行、保険などの支払いや金融取引をリアルタイムで処理するため。
- 自動車、トラック、船隊、出荷を、物流や自動車業界などで、リアルタイムで追跡および監視する。
- 工場や風力発電などの IoT デバイスや他の機器から、センサーデータを継続的にキャプチャして分析する。
- 小売り、ホテル、旅行業界、モバイルアプリケーションなど、顧客とのやり取りや注文を収集し、即座に対応するため。
- 入院中の患者を監視し、状態の変化を予測して、緊急時のタイムリーな治療を確保する。
- 企業の様々な部門で作成されたデータを接続、保存、利用できるようにするため。
- データプラットフォーム、イベント駆動アーキテクチャ、マイクロサービスの基盤として機能します。
Apache Kafka® は、イベントストリーミングプラットフォームです。どういう意味ですか?
Kafka は3つの主要な機能を組み合わせているため、単一の実戦テスト済みの解決策を使って、イベントストリーミングのエンドツーエンドのユースケースを実装できます。
- 他のシステムからのデータの継続的なインポート/エクスポートを含むイベントストリームを出版 (書き込み)および購読(読み込み)するため。
- イベントのストリームを必要なだけ永続的に確実に保存するため。
- イベントが発生した時、あるいは遡及的に処理するため。
そして、これら全ての機能は、分散、高スケーラブル、弾力的、耐障害性、安全な方法で提供されます。Kafka は、ベアメタルハードウェア、仮想マシン、コンテナに、オンプレミスおよびクラウドで展開できます。Kafka 環境を自己管理するか、様々なベンダーが提供するフルマネージドサービスを使うかを選択できます。
Kafka はどのように機能しますか?
Kafka は、高性能の TCP ネットワークプロトコルを介して通信するサーバとクライアントで構成される分散システムです。オンプレミスおよびクラウド環境のベアメタルハードウェア、仮想マシン、コンテナに展開することができます。
サーバ: Kafka は、複数のデータセンタまたはクラウドリージョンに跨ることができる1つ以上のサーバのクラスタとして実行されます。これらのサーバの一部は、ブローカと呼ばれるストレージレイヤーを形成します。他のサーバは、Kafka コネクトを実行して、データをイベントストリームとして継続的にインポートおよびエクスポートして、Kafka をリレーショナルデータベースや他の Kafka クラスタなどの既存のシステムと統合します。ミッションクリティカルなユースケースを実装できるように、Kafka クラスタは非常にスケーラブルで耐障害性があります: サーバのいずれかに障害が発生した場合、他のサーバが作業を引き継ぎ、データを失うことなく継続的な運用を保証します。
クライアント: ネットワークの問題あるいはマシンの障害の場合でも、イベントストリームを変更して、大規模に、耐障害性のある方法で、読み取り、書き込み、処理する分散アプリケーションとマイクロサービスに書き込むことができます。Kafka には、そのようなクライアントを含んで出荷されます。これらのクライアントは、Kafka コミュニティによって提供される数十のクライアントによって拡張されます: クライアントは、Go、Python、C/C++、他の多くのプログラミング言語と REST API のための、より高いレベルの Kafka ストリームライブラリを含む Java および Scala で利用可能です。
主な概念と用語
イベントは、世界またはあなたのビジネスで、"何かが起こった" という事実を記録します。ドキュメントでは、レコードまたはメッセージとも呼ばれます。Kafka に対してデータを読み取りまたは書き込む場合、イベントの形式でこれを行います。概念的には、イベントにはキー、値、タイムスタンプ、オプションのメタデータヘッダがあります。以下はイベントの例です:
- イベントキー: "Alice"
- イベント値: "Made a payment of $200 to Bob"
- イベントタイムスタンプ: "Jun. 25, 2020 at 2:06 p.m."
プロデューサは、Kafka にイベントを出版(書き込み)するクライアントアプリケーションで、コンシューマはこれらのイベントを購読(読み取りおよび処理)するクライアントアプリケーションです。Kafka では、プロデューサとコンシューマは完全に切り離され、お互いに無関係です。これは Kafka で知られている高いスケーラビリティを実現するための重要な設計要素です。例えば、プロデューサはコンシューマを待つ必要はありません。Kafka はイベントを確実に1回処理する機能など、様々な保証を提供します。
イベントはトピックに整理され、永続的に格納されます。非常に単純化されたトピックは、ファイルシステム内のフォルダに似ており、イベントはフォルダ内のファイルです。トピック名の例としては、"payments" があります。Kafka のトピックは常に複数のプロデューサと複数のサブスクライバです: トピックには、イベントを書き込む 0個以上のプロデューサと、これらのイベントを購読する 0個以上の多くのコンシューマがあります。トピック内のイベントは必要に応じて何度でも読み込まれます — 従来のメッセージングシステムと異なり、イベントは使用後に削除されません。代わりに、トピックごとの構成設定を通じて、Kafka がイベントを保持する期間を定義します。その後、古いイベントは破棄されます。Kafkaのパフォーマンスはデータのサイズに対して事実上一定です。つまり多くのデータを保持する事は問題になりません。
トピックは分割されています。つまり、トピックは、様々な Kafka ブローカにある幾つかの "buckets" に分散しています。このようにデータを分散配置すると、クライアントアプリケーションが同時に多くのブローカとの間でデータを読み書きできるため、スケーラビリティにとって非常に重要です。新しいイベントがトピックに発行されると、実際にはトピックのパーティションの1つに追加されます。同じイベントキー(例えば、顧客あるいは車両 ID)を持つイベントは同じパーティションに書き込まれ、Kafka は特定のトピックパーティションの全てのコンシューマが常にそのパーティションのイベントを書き込まれた時と同じ順番で読み取ることを保証します 。
データの耐障害性と高可用性の実現のために、地理的リージョンやデータセンタ間でも、全てのトピックをレプリケートすることができます。そのため、万が一に備えて、ブローカーのメンテナンスなどのために常にデータのコピーを持つ複数のブローカーが存在します。一般的な本番設定では、リプリケーション係数は3です。つまり、データのコピーは常に3つあります。このレプリケーションはトピックパーティションのレベルで行われます。
入門にはこの入門書で十分です。興味があれば、ドキュメントの設計セクションでは、Kafka の様々な概念について詳しく説明しています。
Kafka API
管理と管理タスクのためのコマンドラインツールに加えて、Kafka には Java および Scala 用の5つのコア API があります:
- トピック、ブローカーおよび他の Kafka オブジェクトの管理と調査のための Admin API。
- イベントのストリームを1つ以上の Kafka トピックに発行(書き込み)するための プロデューサ API。
- 1つ以上のトピックを購読(読み取り)し、それらに対して生成されたイベントのストリームを処理するための コンシューマ API。
- ストリーム処理アプリケーションとマイクロサービスを実装するための Kafka ストリーム API。変換、集約や結合のようなステートフル操作、ウィンドウ、イベント時間に基づいた処理などを含む、イベントストリームを処理するための高レベル関数を提供します。1つ以上のトピックを生成するために、1つ以上のトピックから入力が読み取られ、入力ストリームを出力ストリームに効果的に変換します。
- Kafka コネクト API は、外部システムおよびアプリケーションとの間でイベントのストリームを消費(読み取り)あるいは生成(書き込み)する再利用可能なデータのインポート/エクスポートコネクタを構築および実行して、Kafka と統合することができます。例えば、PostgreSQL のようなリレーショナルデータベースへのコネクタは、一連のテーブルに対する全ての変更をキャプチャする場合があります。ただし、実際には、Kafka コミュニティは既に数百のすぐに使うことができるコネクタを提供しているため、通常は独自のコネクタを実装する必要はありません。
この後どうすればいいか
- Kafka を実際に体験するには、クイックスタート に従ってください。
- Kafka をさらに詳しく理解するには、ドキュメントを読んでください。また、Kafka の本と学術論文も選択することができます。
- ユースケースを閲覧して、世界中のコミュニティの他のユーザが Kafka からどのように価値を得ているかを学んでください。
- 地元の Kakfa ミートアップグループに参加し、Kakfa コミュニティのメインカンファレンスであるKafka サミットのトークを見てください。