本書は、KafkaのProducerとConsumerがメッセージを読み書きする仕組み、Kafkaのクラスタをデプロイする方法、ストリームデータ処理するスケーラブルなアプリケーションを構築する方法など、Kafkaの構造や特徴を学習し、Kafkaを取り入れた設計など、実動環境で使えるようになるための一連の流れを学びます。
https://www.ohmsha.co.jp/book/9784873118499/
正誤表やDLデータ等がある場合はこちらに掲載しています
目 次
監訳者まえがき
序文
はじめに
本書の対象読者
本書の表記
サンプルコードの使用
謝辞
1章 Kafka概要
1.1 Publish/Subscribeメッセージング
1.1.1 始まり
1.1.2 個別のキューイングシステム
1.2 Kafka 入門
1.2.1 メッセージとバッチ
1.2.2 スキーマ
1.2.3 トピックとパーティション
1.2.4 ProducerとConsumer
1.2.5 Brokerとクラスタ
1.2.6 複数のクラスタ
1.3 なぜKafkaなのか?
1.3.1 複数のProducer
1.3.2 複数のConsumer
1.3.3 ディスクに基づく保存
1.3.4 スケーラブル
1.3.5 ハイパフォーマンス
1.4 データエコシステム
1.4.1 ユースケース
1.5 Kafkaの起源
1.5.1 LinkedInが抱える問題
1.5.2 Kafka誕生
1.5.3 オープンソース化
1.5.4 名前
1.6 Kafkaをはじめる
2章 Kafkaのインストール
2.1 最初にすること
2.1.1 OSの選択
2.1.2Java のインストール
2.1.3 Zookeeperのインストール
2.2 Kafka Brokerのインストール
2.3 Brokerの設定
2.3.1 一般的なBroker
2.3.2 トピックのデフォルト
2.4 ハードウェアの選択
2.4.1 ディスクのスループット
2.4.2 ディスク容量
2.4.3 メモリ
2.4.4 ネットワーク 29
2.4.5 CPU
2.5 クラウド上のKafka
2.6 Kafkaクラスタ
2.6.1 Brokerをいくつにするか?
2.6.2 Brokerの設定
2.6.3 OSのチューニング
2.7 本番環境での検討事項
2.7.1 ガベージコレクタのオプション
2.7.2 データセンターの配置
2.7.3 Zookeeperにおけるアプリケーションのコロケーション
2.8 まとめ
3章 Kafka Producer:Kafkaにメッセージを書き込む
3.1 Producerの概要
3.2 Kafka Producerの構築
3.3 Kafkaにメッセージを送信する
3.3.1 メッセージを同期送信する
3.3.2 メッセージを非同期送信する
3.4 Producerの設定
3.5 シリアライザ
3.5.1 カスタムシリアライザ
3.5.2 Apache Avroによるシリアライズ
3.5.3 KafkaでAvroレコードを使う
3.6 パーティション
3.7 レコードヘッダ
3.8 古いProducer API
3.9 まとめ
4章 Kafka Consumer:Kafkaからデータを読み出す
4.1 Kafka Consumerの概念
4.1.1 ConsumerとConsumerグループ
4.1.2 Consumerグループとパーティションのリバランス
4.2 Kafka Consumerの作成
4.3 トピックの購読
4.4 ポーリングループ
4.5 Consumerの設定
4.6 コミットとオフセット
4.6.1 自動コミット
4.6.2 現在のオフセットをコミットする
4.6.3 非同期コミット
4.6.4 同期コミットと非同期コミットの組み合わせ
4.6.5 指定したオフセットをコミットする
4.7 リバランスリスナー
4.8 特定のオフセットを持つレコードの消費
4.9 どうやって抜けるのか?
4.10 デシリアライザ
4.11 スタンドアロンConsumer:グループなしのConsumerを使用する理由とその方法
4.12 古いConsumer API
4.13 まとめ
5章 Kafkaの内部
5.1 クラスタのメンバーシップ
5.2 コントローラ
5.3 レプリケーション
5.4 リクエスト処理
5.4.1 Produceリクエスト
5.4.2 Fetchリクエスト
5.4.3 その他のリクエスト
5.5 物理ストレージ
5.5.1 パーティション割り当て
5.5.2 ファイル管理
5.5.3 ファイル形式
5.5.4 インデックス
5.5.5 コンパクション
5.5.6 コンパクションの仕組み
5.5.7 削除されるイベント
5.5.8 トピックはいつコンパクションされるのか?
5.6 まとめ
6章 信頼性の高いデータ配信
6.1 信頼性保証
6.2 レプリケーション
6.3 Brokerの設定
6.3.1 レプリケーションファクタ
6.3.2 クリーンでないリーダー選出
6.3.3 最小のin-syncレプリカ数
6.4 信頼性の高いシステムにおけるProducerの使用
6.4.1 ACK送信
6.4.2 Producerのリトライ設定
6.4.3 追加のエラー処理
6.5 信頼性の高いシステムでConsumerを使用する
6.5.1 信頼性の高い処理のために重要なConsumer設定プロパティ
6.5.2 Consumerで明示的にオフセットをコミットする
6.6 システムの信頼性を検証する
6.6.1 設定の検証
6.6.2 アプリケーションの検証
6.6.3 本番環境における信頼性モニタリング
6.7 まとめ
7章 データパイプラインの構築
7.1 データパイプライン構築時の検討事項
7.1.1 適時性
7.1.2 信頼性
7.1.3 高・変動スループット
7.1.4 データ形式
7.1.5 変換
7.1.6 セキュリティ
7.1.7 障害処理
7.1.8 結合と機敏さ
7.2 Kafka ConnectとProducer/Consumerの使い分け
7.3Kafka Connect
7.3.1 Connectを実行する
7.3.2 コネクタの例: ファイルソースとファイルシンク
7.3.3 コネクタの例: MySQLからElasticsearch
7.3.4 Connectの詳細
7.4 Kafka Connectの代替
7.4.1 他のデータストアのためのインジェストフレームワーク
7.4.2 GUIベースのETLツール
7.4.3 ストリーム処理フレームワーク
7.5 まとめ
8章 クラスタ間データミラーリング
8.1 クラスタ間ミラーリングのユースケース
8.2 マルチクラスタアーキテクチャ
8.2.1 データセンター間通信の現実
8.2.2 Hub-and-Spokesアーキテクチャ
8.2.3 Active-Activeアーキテクチャ
8.2.4 Active-Standbyアーキテクチャ
8.2.5 ストレッチクラスタ
8.3 Apache KafkaのMirrorMaker
8.3.1 設定方法
8.3.2 MirrorMakerを本番環境に導入する
8.3.3 MirrorMakerのチューニング
8.4 他のクラスタ間ミラーリングソリューション
8.4.1Uber uReplicator
8.4.2 ConfluentのReplicator
8.5 まとめ
9章 Kafkaの管理
9.1 トピック操作
9.1.1 新しいトピックの作成
9.1.2 パーティションの追加
9.1.3 トピックの削除
9.1.4 クラスタ内の全トピックを一覧表示
9.1.5 トピックの詳細情報を表示
9.2 Consumerグループ
9.2.1 グループの一覧表示と詳細表示
9.2.2 グループの削除
9.2.3 オフセット管理
9.3 動的な設定変更
9.3.1 トピックのデフォルト設定のオーバーライド
9.3.2 クライアント設定のオーバーライド
9.3.3 設定オーバーライドの表示
9.3.4 設定オーバーライドの削除
9.4 パーティション管理
9.4.1 優先レプリカ選出
9.4.2 パーティションのレプリカの変更
9.4.3 レプリケーションファクタの変更
9.4.4 ログセグメントのダンプ
9.4.5 レプリカの検証
9.5 ConsumerとProducer
9.5.1 コンソールConsumer
9.5.2 コンソールProducer
9.6 クライアントACL
9.7 安全でない操作
9.7.1 クラスタコントローラを移動する
9.7.2 パーティション移動の強制終了
9.7.3 トピックの削除を取り消す
9.7.4 手動でトピックを削除する
9.8 まとめ
10章 Kafkaのモニタリング
10.1 メトリクスの基礎
10.1.1 メトリクスはどこにあるのか?
10.1.2 内部測定か外部測定か
10.1.3 アプリケーションの健全性チェック
10.1.4 メトリクスの網羅性
10.1.5 Kafka Brokerのメトリクス
10.1.6 レプリケーション不足のパーティション(Under-Replicated Partitions)
10.1.7 Brokerのメトリクス
10.1.8 トピックとパーティションのメトリクス
10.1.9 JVMモニタリング
10.1.10 OSのモニタリング
10.1.11 ロギング
10.2 クライアントのモニタリング
10.2.1 Producerのメトリクス
10.2.2 Consumerのメトリクス
10.2.3 クォータ
10.3 遅延のモニタリング
10.4 エンドツーエンドのモニタリング
10.5 まとめ
11章 ストリーム処理
11.1 ストリーム処理とは何か?
11.2 ストリーム処理の概念
11.2.1 時間
11.2.2 状態
11.2.3 ストリームとテーブルの二元性
11.2.4 タイムウィンドウ
11.3 ストリーム処理のデザインパターン
11.3.1 シングルイベント処理
11.3.2 ローカル状態を用いた処理
11.3.3 マルチフェーズの処理/再パーティショニング
11.3.4 外部ルックアップによる処理:ストリームとテーブルの結合
11.3.5 ストリーミング結合
11.3.6 順不同なイベント
11.3.7 再処理
11.4 Kafka Streamsの例
11.4.1 ワードカウント
11.4.2 株式市場統計
11.4.3 クリックストリームのエンリッチメント
11.5 Kafka Streams:アーキテクチャ概要
11.5.1 トポロジの構築
11.5.2 トポロジのスケーリング
11.5.3 障害からの復旧
11.6 ストリーム処理のユースケース
11.7 ストリーム処理フレームワークの選択方法
11.8 まとめ
付録A 他のOSへのKafkaインストール
A.1 Windowsへのインストール
A.1.1 Windows Subsystem for Linuxの利用
A.1.2 ネイティブJavaを使う
A.2 macOSへのインストール
A.2.1 Homebrewを使う
A.2.2 手動でインストールする
索引