Apache kafkaとは何ぞや ~Kafka内部編~

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

皆さんこんにちは。前回ではApache Kafkaについて簡単な概要とユースケースや構成について話しました。

Apache Kafkaの機能、特徴についておさらいすると

機能

  • Producerからメッセージを受け取る
  • Consumerからメッセージ要求があればメッセージを渡す(非同期通信)

特徴

  • 受け取るメッセージ量が増えても、高スケーラビリティによりメッセージのスループットを維持し続けられることが可能
  • 耐障害性がある

でした。しかし、特に特徴においてはなぜ高スケーラビリティなのか?であったり、なぜ耐障害性を持つのか?などについて、まだまだ疑問点が多く残っていると思います。ここではKafkaのアーキテクチャを知ることで、これらの疑問点を解決していきたいと思います。

内部 ~Topic、Partition、Replica~

Topic

Kafkaに送られるデータは、送信者が数多く存在する以上それだけ多くの種類のデータが存在するということになります。Consumerは多くのデータの中から探し出して取得しなければなりません。ここで登場するのがTopicです。Topicはメッセージを種類分だけ存在し、Consumer側がどんなデータが欲しいのかを探し出すのに役立ちます。またProducer側では、どのTopicに送信するのかを決定しておく必要があります。図では、見やすくするためBrokerは一つだけですが、実際は耐障害性のために複数使われています。耐障害性に関してはReplicaの部分で触れていきたいと思います!

Partition

Topicを枝豆のさやだとすれば、Partitionは枝豆です。例えのとおりTopicの中には複数個のPartitionが存在します。複数存在していることで、Producerからの受信やConsumerへの配信などを分散して行うことができます。こうすることでPartition1個あたりのタスクが軽減され、結果的に高スループットの維持につながります。

同じTopicへのメッセージを複数Partitionに分散して送信、受信している

Replica

Partitionの中にさらに複数存在しているのがReplicaです(緑、青楕円)。Kafkaでは、Brokerが複数構成されておりKafka内でのサーバとしての役割を果たします。Replicaが全てのBrokerにまたがっていることで、Brokerのどれかが故障したとしても、残りのBrokerに存在するReplicaからメッセージを読みだすことができます。(耐障害性)

ProducerからLeader Replicaに渡し、Follow Replicaへ渡している

また、Partition内のReplicaのうち、青楕円のものはLeader Replicaと呼ばれ、以下のような役割を果たします。

1. ProducerとConsumerとの送受信を行う

2. Partition内の他のReplica(Follow Replica)に自身の持つデータをコピーして送信する

3. Leader Replicaが故障した場合、残りのFollow RepicaのいずれかがLeaderとなる

2では、Leader Replicaと同じデータを持ったFollow ReplicaのことをIn-Sync Replica(ISR)といいます。

In-Sync Replica(ISR)

Leader ReplicaとLeader Replicaの内容を複製したFollow Replicaのことを指します。ISRであればLeader Replicaの内容を同期しているということになります。Leader Replicaを持つBrokerが故障しても、ISRから読みだせるようになり、耐障害性を担保します。

最小ISR数

最小ISR数とは、Producerがメッセージを書き込むのに必要なISRの数のことでこの値は自由に設定することができます。メッセージを書き込む際、その時点でのISR数が最小ISR数以上であればメッセージ書き込みが可能となります。ISR数が多いほど障害時に復旧データ先が多くなるということなので、最小ISR数の値は大きめに設定するとメッセージ消失のリスクも減らすことにつながります。

まとめ

Kafkaが高スケーラビリティを維持し続けられる理由と、メッセージ保存性が保障される理由についてのお話でした。今回から細かい話となり、難しくなってしまいましたが最後までお読みいただきありがとうございました!!

アバター画像
About サイオステクノロジーの中の人です 88 Articles
サイオステクノロジーで働く中の人です。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる