「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- デファクト・スタンダードの分散メッセージング・システム、
- 複数台のマシンでクラスタを構成
- 分散処理により高いスループットを発揮
- 最近は、
- ストリーム処理の中核と言われるようになって来ているらしい。
- “ETL is Dead; Long Live Stream”なんて言われてるらしい。
用途 †
データハブの構築 †
従来のMQ的な処理。
ストリーム処理の構築 †
分散処理のストリーム処理
特徴 †
高性能 †
スケールアウト
高可用性 †
- Leader / Follower型レプリケーション
- レプリケーションは、メッセージ受信後、直ぐに行われる。
高信頼性 †
高信頼性メッセージング
- データ送信者(Publisher)のメッセージングを受信し、レプリケーションまで完了したら、ACKを返す。
- データ受信者(Subscriber)がメッセージを受信したら、メッセージに処理完了を記録する。
エコシステム †
連携可能なプロダクトが多い。
- Kafka本体に含まれているProducer/ConsumerライブラリはJava製
- 他にもサードパーティからPythonやC++など様々な言語製のライブラリが提供される。
詳細 †
アーキテクチャ †
メッセージングモデル・プロトコル †
- Publisher / Subscriberメッセージングモデルを採用
- MQTTなどの標準プロトコルではなく、独自プロトコルを使用
Broker †
クラスタ内のサーバ・ノードのことをBrokerと呼ぶ。
- Broker同士はクラスタコーディネータであるZooKeeper?を使用して連携する。
- Brokerの1つがリーダーとなりBrokerクラスタを管理する。
Producer †
書き込み側のアプリケーション(Publisher)は、
Producerと呼ばれる書き込み用ライブラリを使用してRecordを書き込む。
Consumer †
読み出し側のアプリケーション(Subscriber)は、
Consumerと呼ばれる読み出し用ライブラリを使用してRecordを取り出す。
論理 / 物理データ構造と管理 †
- 構造
- 1つのTopicは複数のPartitionで構成される。
- 各PartitionはBroker間で複製された複数のReplicaで構成される。
- 各Partitionには1個のLeader Replicaと0個以上のFollower Replicaが存在する。
- 管理方法
- Leader Replicaに書き込まれたRecordはFollower Replicaに複製される。
- Partitionへの書き込み / 読み出しはLeader Replicaにのみ行われる。
- Leader Replicaに障害が発生したら、いずれかのFollower Replicaが昇格する。
- 同期しているFollower Replicaを、In Sync Replica(ISR)と呼ぶ。
- ISR数が最小数まで回復すると、書き込みはコミットされ読み出し可能になる。
- 構造
- BrokerはReplicaごとにデータディレクトリを作成する。
- RecordをSegmentファイルに保存することで永続化する。
- Segmentファイルの集合をLogと呼ぶ。
- 管理方法
- Brokerには、複数のディスクが接続される。
- データディレクトリは各ディスクにラウンドロビン方式で割り当てられる。
- SegmentファイルのキャッシュはOS制御の処理で高速化可能
機能 †
セキュリティ †
- SSL/SASLを用いた接続認証、通信データの暗号化
- クライアントによる読み取り/書き込み操作の認証
リソース割り当て制限(Quotas) †
クライアントが使用するBrokerリソースを制御できる。
- ネットワーク帯域幅
- ネットワークI/O
- ディスクI/O
- スレッドのCPU要求レート
Logコンパクション †
- 一定期間が過ぎたRecordを削除するのではなく、
同じキーの最新のRecord以外を削除する機能。
モニタリング †
- JMX (Java Management Extensions) により性能情報などのメトリックを公開。
- JMXに対応した監視ソフトウェアを使用することで、これらのメリックを収集できる。
Recordの重複排除 †
(トランザクション、エンドツーエンドのExactly-once保障
...
ツール †
Kafka Connect †
DBなどの外部システムとKafka間でデータを書き込み/読み出しするコネクタを定義
Kafka Streams †
Miller Maker †
- Kafkaクラスタ間で(Produceによる)ミラーリングしバックアップを行う。
- フォールトトレランス機能としての使用は意図されていない。
参考 †
... †
Qiita †