AIと共にApache Kafkaを学習する (0) 学習計画の作成

Apache Kafka

業務でKafkaを使いそうだったのでGemini 2.5 Proくんと一緒に勉強してみようかなと思います

学習計画の作成

以下プロンプト

apache kafkaを学ぶための学習計画を考えたいです。

- 学習目的: 業務でイベント駆動アーキテクチャのアプリケーションを新規開発するので、要素技術としてKafkaを学びたい

- ゴール: Kafkaのメリット、注意点、基本的な仕組み、アプリケーションからの使い方について理解して実装できる

- 学びたい内容: kafkaのチュートリアルをやる、kafkaを使ったサンプルアプリケーションを作る

gemini回答

はい、承知いたしました。
業務でのイベント駆動アーキテクチャ開発に向けた、Apache Kafkaの学習計画をご提案します。この計画は、基礎知識の習得からサンプルアプリケーションの実装までを網羅し、約1ヶ月でのゴール達成を目標としています。

---

## Apache Kafka 学習ロードマップ

### 🎯 **最終ゴール**
* Kafkaのアーキテクチャ、メリット、注意点を理解している。
* Producer/Consumerとして動作する基本的なアプリケーションを実装できる。
* イベント駆動アーキテクチャにおけるKafkaの役割を説明できる。

---

### **フェーズ1: 基礎概念の理解 (期間: 1週間)**
**目的**: Kafkaが「何であり、なぜ使われるのか」を理解する。手を動かす前に、まず全体像を掴みます。

#### **学習内容**
1.  **Kafkaの役割とユースケース**
    * イベント駆動アーキテクチャとは何か?
    * 従来のメッセージキュー(RabbitMQなど)とKafkaの違いは何か?
    * なぜKafkaがモダンなシステムで広く採用されているのか?

2.  **Kafkaのコアコンセプト**
    * **イベント (Event) / メッセージ (Message)**: Kafkaでやり取りされるデータの単位。
    * **トピック (Topic)**: イベントのカテゴリ名。
    * **パーティション (Partition)**: スケーラビリティと並列処理の鍵。トピックを分割する単位。
    * **オフセット (Offset)**: パーティション内のメッセージの位置を示す番号。
    * **プロデューサー (Producer)**: イベントをトピックに送信するアプリケーション。
    * **コンシューマー (Consumer)**: トピックからイベントを受信するアプリケーション。
    * **コンシューマーグループ (Consumer Group)**: 複数のコンシューマーを束ね、協調してメッセージを処理する仕組み。
    * **ブローカー (Broker)**: Kafkaサーバーそのもの。

#### **✅ このフェーズの達成目標**
* 上記の**太字**のキーワードを自分の言葉で説明できる。
* プロデューサーがメッセージを送信し、コンシューマーが受信するまでの一連の流れをイメージできる。

---

### **フェーズ2: ハンズオン!Kafkaを動かしてみる (期間: 1週間)**
**目的**: 実際にKafkaに触れ、コンセプトがどのように動作するのかを体感する。

#### **学習内容**
1.  **環境構築**
    * **Docker**を使ってローカル環境にKafkaをセットアップします。`docker-compose.yml` を使うのが最も簡単でおすすめです。
    * 

2.  **Kafka公式チュートリアル(Quickstart)の実践**
    * コマンドラインツールを使って、Kafkaの基本操作を学びます。
    * **トピックの作成**: `kafka-topics.sh`
    * **コンソールプロデューサーの起動**: `kafka-console-producer.sh` を使ってターミナルからメッセージを送信する。
    * **コンソールコンシューマーの起動**: `kafka-console-consumer.sh` を使ってターミナルでメッセージを受信する。

#### **✅ このフェーズの達成目標**
* DockerでKafka環境を起動・停止できる。
* コマンドラインからトピックを作成し、メッセージの送受信ができる。

---

### **フェーズ3: サンプルアプリケーション開発 (期間: 2週間)**
**目的**: 業務で使うプログラミング言語でKafkaを操作し、実践的なスキルを身につける。

#### **学習内容**
シンプルな「注文サービス」と「通知サービス」を題材にします。

* **シナリオ**:
    1.  **注文サービス (Producer)** が「注文イベント」を`orders`トピックに送信する。
    2.  **通知サービス (Consumer)** が`orders`トピックを購読し、イベントを受け取ったら「通知メールを送信した」というログを出す。

* **開発ステップ**:
    1.  **クライアントライブラリの選定**:
        * Java (Spring): `spring-kafka`
        * Python: `kafka-python` or `confluent-kafka-python`
        * Node.js: `kafkajs`
        * など、業務で使う言語に合わせたライブラリを選びます。

    2.  **プロデューサーの実装 (`注文サービス`)**:
        * Kafkaブローカーへの接続設定。
        * `orders`トピックにJSON形式の注文データ(例: `{"orderId": "123", "amount": 5000}`)を送信するロジックを実装する。

    3.  **コンシューマーの実装 (`通知サービス`)**:
        * Kafkaブローカーへの接続と、コンシューマーグループIDの設定。
        * `orders`トピックを購読(Subscribe)する。
        * トピックから受け取った注文データをデシリアライズし、コンソールにログとして出力する処理を実装する。

    4.  **動作確認**:
        * 注文サービスを動かしてイベントを送信し、通知サービスのログにメッセージが表示されることを確認する。

#### **💡 発展課題**
* **複数のコンシューマー**: 通知サービスを2つ起動してみる。メッセージがそれぞれのインスタンスに分散して処理されることを確認し、コンシューマーグループの役割を体感する。
* **データ形式**: JSONではなく、スキーマ管理ができる**Avro**形式での送受信に挑戦する。

#### **✅ このフェーズの達成目標**
* 選定した言語でProducer/Consumerを実装できる。
* サービス間でKafkaを介した非同期通信を実現できる。

---

### **学習を深めるためのポイント**

* **メリットと注意点**:
    * **メリット**: 高スループット、スケーラビリティ、耐障害性、データの永続性。
    * **注意点**: 運用コスト、メッセージ順序の保証(パーティション単位であること)、Exactly-once(厳密に1回だけの処理)の実現の難しさ。
* **公式ドキュメント**: 困ったらまずは公式ドキュメントを参照する癖をつけましょう。
* **Confluent社のブログ**: Kafka開発の中心企業であり、質の高い技術ブログが多数あります。

この学習計画が、あなたのKafka習得の助けとなれば幸いです。頑張ってください!

作成した学習計画リスト

この計画を元に各フェーズで作成するアウトプットを考えて、Kafkaの学習ToDoリストを作っていきましょう

  • フェーズ1: 基礎概念の理解
    • [ ] 基礎概念をまとめたブログを執筆する
    • [ ] 基礎概念を概観できる図を作成する
    • [ ] 後々見返すことができるリファレンスリストを作成する
  • フェーズ2: ハンズオン!Kafkaを動かしてみる
    • [ ] docker上で動作するKafkaのチュートリアルを動かして、GitHubにコミットする
    • [ ] 上記の流れをまとめたブログを執筆する
  • フェーズ3: サンプルアプリケーション開発
    • [ ] docker上で動作するKotlin x Spring x Kafkaを使ったサンプルアプリケーションを作成する
    • [ ] 上記の流れをまとめたブログを執筆する
  • フェーズ4: 実装レベルで内部構造への理解を深める (optional)
    • [ ] Code CraftersでKafkaを作りながら内部構造への理解を深める
    • [ ] Deep Wikiを活用しながらKafkaのソースコードの実装への理解を深める
    • [ ] Kafkaを手元でビルドしてデバッグ実行してみて内部の挙動への理解を深める

ざっくりできたので、今後はこのリストを元に勉強していきましょう〜

タイトルとURLをコピーしました