5.14. Apache Kafka
Apache Kafka は、プロセス、アプリケーション、およびサービスの間でメッセージを交換するために設計されたスケーラブルなメッセージング統合システムです。Kafka は、トピックのセットを維持する 1 つ以上のブローカーを持つクラスターを基にします。基本的に、トピックは、トピック ID を使用してすべてのクラスターに定義できるカテゴリーです。各トピックには、アプリケーション内で行うイベントに関する情報が含まれるレコードと呼ばれるデータの一部が含まれています。システムに接続されているアプリケーションは、これらのトピックにレコードを追加したり、先に追加したメッセージを処理したり、再処理したりできます。
ブローカーは、クライアントアプリケーションとの通信を処理し、トピックでレコードを管理します。レコードが失われないように、ブローカーはコミットログのすべてのレコードを追跡し、各アプリケーションのオフセット値を追跡します。オフセットは、最後に追加したレコードを示すポインターと似ています。
アプリケーションは、トピックから最新のレコードをプルするか、オフセットを変更して以前のメッセージが追加されたレコードを読み取ることができます。この機能は、クライアントアプリケーションがリアルタイムで処理できない場合に、着信要求に圧倒されるのを防ぎます。これが発生した場合、Kafka は、リアルタイムで処理できないレコードをコミットログに保存することにより、データの損失を防ぎます。クライアントアプリケーションが着信要求に追いつくことができると、リアルタイムでレコードの処理を再開します
ブローカーは、トピックパーティションに分類することで、複数のトピックのレコードを管理できます。Apache Kafka はこれらのパーティションを複製して、単一のトピックからのレコードを複数のブローカーで並行して処理できるようにし、アプリケーションがトピック内のレコードを処理する速度をスケーリングできるようにします。レプリケートされたトピックパーティション (別名フォロワー) は、レコード処理の冗長性を回避するために、元のトピックパーティション (別名 Leader) と同期します。新しいレコードが Leader パーティションにコミットされ、フォロワーはリーダーに加えられた変更のみを複製します。