PR:この記事にはアフィリエイトリンクが含まれます。
Apache Kafkaの本には、ProducerやConsumerの基礎を学ぶ入門書から、Kafka Streamsの実装、トピックやクラスターの設計を掘り下げる本まであります。共通語が多くても、扱う課題は同じではありません。
実務ではイベントをどのキーで分け、何日保持し、遅れて届くデータをどう集計するかを先に考えます。APIの入門書と設計・運用を扱う本では、得られる判断材料も変わります。
| 本 | 主な対象 | 主な内容 | ページ数 |
|---|---|---|---|
Apache Kafkaをはじめる | Kafka初学者の開発者 | Producer、Consumer、Kafka Streamsの入口 | 106 |
Kafka for Architects | アーキテクト、テックリード | トピック設計、イベント設計、運用 | 392 |
Kafka Streams in Action, Second Edition | Java開発者 | Streams API、状態処理、テスト | 504 |
Mastering Kafka Streams and ksqlDB | 中級〜上級者 | Streams、ksqlDB、監視、デプロイ | 432 |
Apache Kafka in Action | 開発者、運用担当者 | 信頼性、性能、クラスター運用 | 368 |
『Apache Kafkaをはじめる』の希望小売価格は2,000円(税別)が目安です。実売価格は時期や販売店で変わるため、購入時に確認しましょう。
Kafkaの全体像
Kafkaはイベントをトピックに記録し、複数のアプリケーションが必要な位置から読み取る基盤です。Producerが書き込み、Consumerが読み取ります。ログの分割方法と保持期間が、設計を左右します。
トピックは複数のパーティションに分かれ、それぞれが順序を持つログです。同じパーティション内なら順序を保てますが、トピック全体に一つの順番があるわけではありません。順序が必要な単位を見定めることが大切ですね。
Kafka StreamsはKafka上で動くストリーム処理アプリをJavaで作るライブラリです。入力トピックからレコードを読み、変換や集計を経て別のトピックへ書き出す処理を組み立てます。
そのためKafka Streamsの実務では、APIの書き方だけでなくキーやパーティション、保持期間も合わせて考えます。コードが正しくてもデータの分け方が要件に合わなければ、順序や集計結果に影響します。ここは見落としやすいところです。
紹介する本
『Apache Kafkaをはじめる』は2022年刊で、印刷版は106ページです。JavaのProducerやConsumerに加えてトランザクションとKafka Connectを学び、Kafka Streamsの入口にも触れます。初学者が日本語で基本を学ぶ本です。
『Kafka for Architects』は2026年刊、392ページ。特定の言語を前提にしません。パーティション数や順序、保持、圧縮を扱い、データ契約やスキーマ進化も設計者の視点から学べます。
『Kafka Streams in Action, Second Edition』は2024年刊の第2版で504ページ。Kafkaやストリーム処理の予備知識がないJava開発者も対象です。KStream、Processor API、KTableを扱い、状態処理やウィンドウもコード例で解説します。テストの書き方も学べます。
『Mastering Kafka Streams and ksqlDB』は中級〜上級者向けです。StreamsとksqlDBを比べながら、再パーティションやコパーティションを扱います。結合、集約、テストに加え、JMXメトリクスとデプロイも学べます。
『Apache Kafka in Action』は2025年刊、368ページです。Kafkaの基礎に加えて信頼性と性能を扱い、監視やトラブル対応も解説します。クラスターのデプロイと管理まで含む実践書です。
トピック設計
トピック名を決めたら、流すイベントの意味もチーム間でそろえましょう。たとえば注文の作成と支払い完了を別イベントにすれば、下流の処理が何を受け取るのか明確になります。変更時の影響も追いやすくなります。
パーティションキーは処理したい単位に合わせます。注文単位の順序が必要ならorderIdを使い、顧客別集計を優先するならcustomerIdをキーにします。一方を優先すると、もう片方の処理で再分配が必要になる場合もあります。
パーティション数は並列処理の単位とデータ分散を左右します。後から増やした場合、新しいレコードの割り当てが変わることがあります。キー単位の順序を保つ前提なら、変更の影響を先に見積もってください。将来の集計や結合も設計に含めます。
保持期間とログ圧縮は目的を分けて考えます。一定期間のイベントを再生するなら時間または容量に応じた保持、キーごとの最新状態を残すなら圧縮が適します。注文履歴と顧客の現在状態は別トピックに置くと、それぞれを扱いやすくなります。
Streamsの基本
Kafka StreamsではKStreamをレコードの流れ、KTableをキーごとの現在値として扱います。たとえば注文イベントをKStreamで処理し、顧客ごとの最新状態をKTableに保ちます。この区別によって集計の作り方も変わります。
フィルターや項目の変換は比較的単純ですが、集計や結合には状態が伴います。注文IDで届いたイベントを顧客IDごとに集計する場合、キーを付け替えてレコードを再分配します。要件によっては、この処理が増えます。
結合では入力側のキーとパーティション構成をそろえることが重要です。キーが異なるまま処理すると再パーティションが起き、要件どおりの結果を得られない場合があります。照合する単位を決めてから結合を設計しましょう。
時間窓で集計するときはイベントの発生時刻と到着時刻を分けて考えます。通信遅延のあるデータをどこまで受け入れるかは、grace periodなどの設定と業務要件で決まります。締め時刻を過ぎたイベントの扱いも集計結果に関わります。
実務での運用
状態を持つKafka Streamsアプリは状態ストアに集計値などを保持します。障害時にはKafka上の変更ログから状態を復元するため、入力データ量やストアの大きさで復旧時間が変わります。状態の増加も運用計画に含めてください。
Kafka内部の処理ではトランザクションを使い、入力オフセットと出力を整合させる設定があります。ただし、外部の決済APIやデータベースへの書き込みまで自動で一度だけにできるわけではありません。外部連携には冪等性キーなどを使い、重複処理に備えます。
TopologyTestDriverなどを使えばトポロジーの変換や時間窓を確認できます。実際のブローカーを使うテストではスキーマや権限、パーティション構成も確かめられます。開発環境で検証しておけば、本番で初めて表面化する問題を減らせます。
監視ではConsumer Lagだけでなく、処理速度やエラーも追います。再バランスや状態復旧にかかる時間も確認してください。入力の急増と処理能力の不足では対応が異なるため、指標を組み合わせて原因を判断します。
実例でつなぐ
注文サービスがorderIdをキーに注文作成イベントを発行すると、同じ注文のレコードを同じパーティションへ寄せられます。注文単位の順序を保ちやすくなり、状態を更新する処理も組み立てやすくなります。
支払いサービスもorderIdをキーに結果を発行すれば、注文イベントと支払いイベントを注文ごとに照合できます。到着時刻が異なる場合は、集計に含める遅延の上限を時間窓で決めます。
日次の顧客別売上を出すには、顧客IDで集計するために再パーティションを行うことがあります。注文単位の順序と顧客単位の集計を同じキーで無理に両立させるより、目的ごとに段階を分ける方が処理を追いやすくなります。
元イベントを適切な期間保持し、集計結果を別トピックに出すと、再処理と配信用のデータを別々に扱えます。ダッシュボードや通知には集計済みデータを使います。計算ルールを変えた場合は、元イベントから再構築できます。
結論
JavaでKafka Streamsのコードを書き、状態処理やテストまで学ぶなら『Kafka Streams in Action, Second Edition』をすすめます。StreamsとksqlDBの両方を実践したい中級者には『Mastering Kafka Streams and ksqlDB』が合います。
設計原則やデータ契約を担当するアーキテクト、テックリードには『Kafka for Architects』をすすめます。Kafkaを初めて学ぶ開発者なら『Apache Kafkaをはじめる』、信頼性やクラスター運用まで扱いたい人なら『Apache Kafka in Action』が適しています。
トピック設計とストリーム処理、運用はキーとイベント契約でつながっています。自分の役割に合う一冊を読み、注文や支払いのイベントで設計を試すと、学んだ内容を実務の処理に結び付けられます。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。






