すでにビッグデータの時代を切り開いたことは否定できません。毎秒膨大な情報が生成されています。意思決定者はこの増え続けるデータから貴重な洞察を得ることができますが、その膨大な量はデータエンジニアにとっても大きな課題をもたらします。ストレージ容量の需要増加、ますます複雑なデータフォーマットの処理、そして非常に予測不可能なネットワークトラフィックです。幸いなことに、近年ビッグデータを効率的に処理するための様々な技術が生まれており、カフカはその一つです。今日は、カフカがどのように機能するかを実演し、あなたのカフカの旅をスタートさせる手助けをします。
まずはKafkaの簡単な紹介から始めましょう。Kafka、またはHadoop Kafkaは、データストリームの公開と利用を促進する分散型ストリーミングプラットフォームです。もともとはLinkedInによって開発され、現在はApache Software Foundationによって管理されています。Kafkaはフォールトトレランス性とスケーラブル性を持ち、リアルタイムのデータパイプラインやストリーミングアプリケーションを構築するのに最適なツールです。
「なぜカフカはフォールトトレランスでスケーラブルで、データストリームの処理に適しているのか?」と疑問に思う方もいるかもしれません。この疑問に答えるために、カフカの内部構造を深く掘り下げる必要があります。
カフカの重要な構成要素
- トピック:トピックとは、Kafkaがメッセージを公開するカテゴリ名やストリーム名のことであり、受け取ったデータを指します。リレーショナルデータベースに詳しい方は、トピックをテーブルと考えることができます。システム内には複数のトピックが存在し、それぞれが特定のエンティティにデータを保存しています。Kafkaはさらに各トピックを複数のパーティションに分割し、それぞれ異なるブローカー(サーバー)にホストすることができます。
- ブローカー:ブローカーは、1つ以上のトピックのパーティションをホストできるサーバーです。複数のブローカー間でパーティションを分散させることには以下の利点があります。まず、Kafkaが大量のデータを処理し、高スループットをサポートできることです。次に、パーティション間でデータを複製することが可能です。これは特にブローカーがダウンしているときに便利で、機能しないブローカーがホストしたデータを別のブローカーに転送できるため、システム全体のフォールトトレランス性が保証されます。第三に、Kafkaにとってスケールアップが非常に容易になり、Kafkaの水平スケーラビリティが保証されます。
- クラスター:Kafkaクラスタとは、Kafkaでデータを管理・保存するために協力して機能するブローカーの集合体です。
カフカの最も重要な要素の内部構造と、なぜカフカが最も望ましい特性を引き出すのかを説明したところで、ビッグデータ処理におけるカフカの位置を、簡単な例で詳しく見ていきましょう。

出典:https://www.projectpro.io/article/apache-kafka-architecture-/442
データプロデューサーとデータコンシューマーがいて、データプロデューサーが生成したデータをデータコンシューマーが消化するのをKafkaでサポートするつもりだと仮定します。また、データコンシューマーがデータプロデューサーがデータを公開するトピック(以下トピックAと呼ばれる)に購読していると仮定します。ワークフローの開始時に、データプロデューサーはデータを生成します。その後、データプロデューサーはデータをメッセージとしてKafkaに送信し、Topic Aに投稿する意図を明記します。KafkaはメッセージをトピックAに公開します。KafkaはメッセージをトピックAの複数のパーティションに保存し、同じメッセージが複数のブローカーに存在できるようにします。その後、データコンシューマーはトピックAにサブスクライブしているため、メッセージを引き出そうとします。トピックAをホストするブローカーを含むクラスタにリクエストを送信します。クラスタはメッセージを特定し、メッセージを保存するブローカーにデータ消費者に配信を命じ、ワークフローを完了させます。
データコンシューマーがすべてのデータを一貫して予測可能に処理できるように、カフカのブローカーはメッセージを受信順にデータコンシューマーに配信します。データコンシューマーはまた、トピック内の各メッセージに割り当てられた一意の識別子であるオフセットを利用し、データ消費の進捗を追跡します。オフセットをコミットすることで、データコンシューマーはオフセットに対応するメッセージをすでに処理済み、その後のメッセージを受信する準備ができていることをカフカに示します。
Kafkaは複数のデータ提供者や消費者間のデータ転送を円滑にできるため、複雑なシステムにおけるデータ処理を容易にする強力なツールであることは注目に値します。
要するに、Kafkaの最も重要な要素と、なぜKafkaを非常にスケーラブルでフォールトトレランス性の高いツールにしているのかについて触れました。さらに、Kafkaがデータプロデューサーとデータ消費者の間の仲介者として機能し、データプロデューサーが生成したデータをデータ消費者に転送し、さらに利用できるように支援することも示しました。この記事があなたのKafkaの旅を始める助けになれば幸いです!