Kafka はなぜ速いのか?
(frogred8.github.io)- Kafka が高速な一般的な理由
- 低レイテンシ I/O を使用(RAM)
- 順次 I/O データ構造を使用(ログ)
- zero-copy を適用
- 水平スケーリングシステム
- データ圧縮とバッチ処理
- zero-copy とは?
- file を socket にコピーする際に発生する負荷を改善した OS 支援インターフェース
- Linux では
sendfileコマンド
- では Kafka は zero-copy によってどのように高速化されたのか?
- Java で NIO パッケージに
transferTo関数が追加された - これを使うことで、Kafka はメッセージをユーザー空間に持ち込まず、カーネル空間からネットワークへ直接送信し、速度面で大きな利点を得た
- 従来方式と
transferToを使用した方式の性能を測定すると、後者は 65% 高速という結果を示した
- Java で NIO パッケージに
2件のコメント
本文中の内容で
nioを少し混同されているようですが、nioは non-blocking I/O ではなく New I/O です。blocking と non-blocking の両方をサポートしています。一部の文書では non-blocking io の略だと書かれていて、勘違いしていました。フィードバックありがとうございます。