Apache Kafkaについて齧る
Apache Kafka
主な内容はRedHat社のドキュメント(Apache Kafka:基本的な 10 の用語と概念について (redhat.com))から読み解きます。
概要
Apache Kafka(以後Kafka)はOSSの分散型イベントストリーミングプラットフォーム、またはメッセージキューです。非同期通信システムの一種で、複数システムを疎結合で連携する場合や、ストリーミング処理が必要なサービスのバッファーとして利用されます。
kafkaのメッセージキューシステムは3つの役割から構成されます。
- Producer:メッセージの発行元、Publisherとも書きます。
- Broker:Publisherからのメッセージを保管し、Consumerからのリクエストに応じてメッセージの配信を行う非同期型メッセージキューイングを行う。
- Consumer:メッセージの受信・購読先。Subscriberとも書きます。
Kafkaは分散型MQシステムなので、Brokerもクラスタ構成になります。
処理の流れ
Producerから発行されたメッセージはBrokerクラスタ内でTopicという分散キューを構成します。このTopicはBrokerではなくProducerによってクラスタに分散配置されているPartitionに分配され、key-value形式でRecordとして保存されます。Consumerは受信するTopicに応じてBrokerに問い合わせを行い、Partitionそれぞれから受信します。kafkaは高速化とクラスタリングに優れたプラットフォームで、MQTT等の標準プロトコルではなく独自プロトコルによって分散配信と受信を行い、高速化を実現しています。
クラスタリング
それぞれのTopicは複数のPartitionに分かれています。Partition内ではLeader ReplicaとFollower Replicaとなるクラスターが1:Nの構造で存在し、Partition毎にどのクラスターがLeader Replicaであるかが異なります。ノードがダウンした際には適宜Follower ReplicaがLeaderに昇格する事でクラスタを保ちます。
このTopic-Partitionの割り当て管理を行うのがApache Kafka - ZooKeeperです。
参考:
1:Apache Kafkaの概要とアーキテクチャ - Qiita
2:Apache Kafka:基本的な 10 の用語と概念について (redhat.com)
3:Kafkaを利用した分散処理について (パーティション機能の座学) - Qiita