Apache Kafka分散メッセージングシステムの構築と活用


Apache Kafka 分散メッセージングシステムの構築と活用 (NEXT ONE)


翔泳社


著者:株式会社NTTデータ、佐々木徹、岩崎正剛、猿田浩輔、都築正宜、吉田耕陽
監修:下垣徹、土橋昌


はじめに
目次

第1部 導入Apache Kafka
1 Apache Kafkaの概要
1.1 本章で行うこと
1.2 Apache Kafkaとは
1.3 Kafka誕生の背景
1.3.1 LinkedInのユースケース
1.3.2 Kafka誕生前のプロダクト
1.4 Kafkaによる要求仕様の実現
1.4.1 メッセージングモデルとスケールアウト
1.4.2 Kafkaにおけるメッセージングモデル
1.4.3 データのディスクへの永続化
1.4.4 分かりやすい APIの提供
1.4.5 送達保証
1.5 Kafkaの広がり
1.5.1 Kafkaのリリース
1.5.2 開発体制
1.5.3 Kafkaの利用企業
1.6 本章のまとめ
2 Kafkaの基本
2.1 本章で行うこと
2.2 Message送受信の基本
2.3 システム構成
2.4 分散メッセージングのための仕組み
2.4.1 Messageの送受信
2.4.2 Consumerのロールバック
2.4.3 Message送信時のパーティショニング
2.5 データの堅牢性を高めるレプリケーションの仕組み
2.5.1 レプリカの同期の状態
2.5.2 レプリケーション済み最新 Offset(High Watermark)
2.5.3 ProducerのMessage到達保証レベルの調整
2.5.4 In-Sync ReplicaとAck=all、書き込み継続性の関係
2.6 本章のまとめ
3 Kafkaのインストール
3.1 本章で行うこと
3.2 本書で構築するKafkaクラスタの環境
3.2.1 クラスタ構成
3.2.2 各サーバーのソフトウェア構成
3.2.3 Kafkaのパッケージとディストリビューション
3.3 Kafkaの構築
3.3.1 OSのインストール(共通)
3.3.2 JDKのインストール(共通)
3.3.3 Confluent Platformのリポジトリの登録(共通)
3.3.4 Kafkaのインストール(共通)
3.3.5 Brokerのデータディレクトリの設定(共通)
3.3.6 複数台で動作させるための設定(複数台の場合のみ)
3.4 Kafkaの起動と動作確認
3.4.1 Kafkaクラスタの起動
3.4.2 Kafkaクラスタの動作確認
3.4.3 Kafkaクラスタの停止
3.5 本章のまとめ
4 KafkaのJava APIを用いたアプリケーションの作成
4.1 本章で行うこと
4.2 アプリケーションの開発環境の用意
4.2.1 環境の前提
4.2.2 Apache Mavenのインストール
4.2.3 Apache Mavenによるプロジェクトの作成
4.2.4 ビルド情報の記載
4.3 Producerアプリケーションの作成
4.3.1 Producerアプリケーションのソースコード
4.3.2 Producerアプリケーションのビルドと実行
4.4 作成したProducerアプリケーションのポイント
4.4.1 KafkaProducerオブジェクトの作成
4.4.2 Messageを送信する
4.5 Consumerアプリケーションの作成
4.5.1 Consumerアプリケーションのソースコード
4.5.2 Consumerアプリケーションのビルドと実行
4.6 作成したConsumerアプリケーションのポイント
4.6.1 KafkaConsumerオブジェクトの作成
4.6.2 Messageを受信する
4.7 本章のまとめ

第2部 実践Apache Kafka 5 Kafkaのユースケース
5.1 本章で行うこと
5.2 Kafkaで実現するユースケース
5.2.1 Kafkaの代表的なユースケース
5.2.2 Kafkaが持つ特徴のおさらい
5.2.3 Kafkaが持つ特徴とユースケースの対応
5.3 データハブ
5.3.1 データハブで実現したいこと
5.3.2 データハブで解決すべき課題
5.3.3 データハブをKafkaで実現する
5.4 ログ収集
5.4.1 ログ収集で実現したいこと
5.4.2 ログ収集で解決すべき課題
5.4.3 ログ収集をKafkaで実現する
5.5 Webアクティビティ分析
5.5.1 Webアクティビティ分析で実現したいこと
5.5.2 Webアクティビティ分析で解決すべき課題
5.5.3 Webアクティビティ分析をKafkaで実現する
5.6 IoT
5.6.1 IoTで実現したいこと
5.6.2 IoTを実現するにあたっての課題とKafkaの適用
5.7 イベントソーシング
5.7.1 イベントソーシングとは
5.7.2 CQRSとは
5.7.3 イベントソーシングと CQRSで解決すべき課題
5.7.4 イベントソーシング + CQRSに Kafkaを用いる
5.8 Kafkaの公開事例
5.8.1 Uber
5.8.2 ChatWork
5.8.3 Yelp
5.9 本章のまとめ
6 Kafkaを用いたデータパイプライン構築時の前提知識
6.1 本章で行うこと
6.2 Kafkaを用いたデータパイプラインの構成要素
6.2.1 データパイプラインとは
6.2.2 データパイプラインのProducer側の構成要素
6.2.3 データパイプラインのConsumer側の構成要素
6.3 データパイプラインで扱うデータ
6.3.1 データパイプラインにおける処理の性質
6.3.2 Messageのデータ型
6.3.3 スキーマ構造を持つデータフォーマットの利用
6.3.4 スキーマエボリューション
6.3.5 データの表現方法
6.4 本章のまとめ
7 KafkaとKafkaConnectによるデータハブ
7.1 本章で行うこと
7.2 Kafka Connectとは
7.3 データハブアーキテクチャへの応用例
7.3.1 データハブアーキテクチャが有効なシステム
7.3.2 データハブ導入後の姿
7.4 環境構成
7.5 ECサイトに実店舗の在庫情報を表示する
7.5.1 KafkaとKafkaConnectの準備
7.5.2 データの準備
7.5.3 Kafka Connectの実行
7.6 毎月の販売予測を行う
7.6.1 ECサイトの準備
7.6.2 POSの準備
7.6.3 販売予測システムの準備
7.6.4 Kafka Connectの実行
7.7 データ管理とスキーマエボリューション
7.7.1 スキーマエボリューション
7.7.2 スキーマの互換性
7.7.3 Schema Registry
7.7.4 Schema Registryの準備
7.7.5 Schema Registryの使用
7.8 本章のまとめ
8 ストリーム処理の基本
8.1 本章で行うこと
8.2 Kafka Streams
8.3 コンピュータシステムのメトリクス
8.4 Kafka Brokerのメトリクスを可視化する
8.4.1 メトリクス処理の流れ
8.4.2 Kafkaのセットアップ
8.4.3 Jolokiaの設定
8.4.4 Fluentd(td-agent)のセットアップ
8.4.5 Kafka Streamsによるデータ処理
8.4.6 InfluxDBへのデータロード
8.4.7 Grafanaのセットアップ
8.5 サンプルプログラムの解説
8.5.1 Streams DSL
8.5.2 ストリーム処理のエラーハンドリング
8.6 ウィンドウ処理
8.6.1 ウィンドウ処理のサンプルプログラム
8.6.2 メッセージのタイムスタンプ
8.6.3 タイムウィンドウ集計
8.6.4 集計データの書き出し
8.6.5 サンプルの実行
8.7 Processor API
8.8 メトリクスの種類
8.9 Kafka Streamsを利用するメリット
8.10 本章のまとめ
9 Structured Streamingによるストリーム処理
9.1 本章で行うこと
9.2 Apache SparkとStructured Streaming
9.2.1 Apache Spark
9.2.2 Sparkのデータ処理モデル
9.2.3 DataFrame/Dataset
9.2.4 Structured Streaming
9.2.5 Structured Streamingのデータ処理モデル
9.3 サンプルアプリケーション動作環境
9.3.1 サンプルアプリケーションの構成
9.3.2 サンプルアプリケーションの実行環境
9.4 Apache Sparkのセットアップ
9.4.1 Apache Sparkのインストール
9.4.2 メタデータディレクトリの作成
9.5 Tweet Producer
9.5.1 Tweet Producerの作成
9.5.2 Tweet Producerのビルド
9.5.3 設定ファイルの配備
9.5.4 Tweet Producerの起動/停止と動作確認
9.6 KafkaとStructured Streamingの連携の基本
9.6.1 Spark Shellの起動
9.6.2 Datasetの生成
9.6.3 クエリの記述
9.6.4 出力の設定とストリーム処理の開始
9.6.5 集約処理を含むストリーム処理
9.7 本章のまとめ
10 Kafkaで構成するIoTデータハブ
10.1 本章で行うこと
10.2 IoTに求められるシステム特性と Kafka
10.2.1 想定するユースケース
10.3 センサーデータ向けデータハブの設計
10.3.1 実現する機能について
10.3.2 センサーデータの受信機能の設計
10.3.3 データのエンリッチメント機能の設計
10.4 センサーデータ向けデータハブの構築
10.4.1 本章で構築するセンサーデータ向けデータハブの環境
10.4.2 データの流れ
10.4.3 センサーデータ受信機能の実現
10.4.4 エンリッチメント機能の実現
10.5 実際のセンサーデータの投入とデータ活用に向けて
10.5.1 Raspberry Piからのセンサーデータの送信
10.5.2 センサーデータの活用パターン
10.6 高度なデータ連携基盤を実現する場合の課題とアイデア
10.7 本章のまとめ
11 さらにKafkaを使いこなすために
11.1 本章で行うこと
11.2 Consumer Group
11.2.1 Consumer Groupとは
11.2.2 各ConsumerへのPartitionの割り当て
11.3 Offset Commit
11.3.1 Offset Commitとは
11.3.2 Auto Offset Commit
11.3.3 Manual Offset Commit
11.3.4 Auto Offset Reset
11.4 Partition Reassignment
11.4.1 Partition Reassignmentとは
11.4.2 Partition Reassignmentの方法
11.5 Partition数の考慮
11.5.1 KafkaクラスタのMessage送受信
11.5.2 Consumer Groupの割り当て
11.5.3 Brokerが利用するディスク
11.6 Replication-Factorの考慮
11.6.1 min.insync.replicasの設定
11.6.2 Topicを作成する際のLive Brokerの台数
11.7 本章のまとめ

Appendix
付録A コミュニティ版 Kafkaの開発中のバージョンの利用
付録B KSQLを利用したストリーム処理

索引

書籍目次

Posted by shi-n