Apache Kafkaに入門した
Jun 25, 2023 23:30 · 2324 words · 5 minute read
今後Apache Kafkaに関わりそうだったので、Kafkaについて学びました。 まずは公式のドキュメントを読んだのですが、残念ながら私には難しくて理解できませんでした。
Apache Kafka 101 | OpenLogic by Perforce のようなドキュメントがたくさんあるので、私と同じように公式ドキュメントでは理解できない人が多いのかもしれません。
公式ドキュメントと比べると正確性が下がるかもしれませんが、噛み砕いて解説してくれている記事をいくつか読むことで、全体像だけはなんとか掴むことができたと思います。 参照した情報と共に、学習を始める前の自分が知りたかった内容をブログにアウトプットしてみます。
私と同じように、全くゼロの状態からKafkaを学ぼうとする人の参考になれば幸いです。
目次
Apache Kafkaとは?Kafkaでできること
Apache Kafkaは分散メッセージキューシステムです。
(公式ドキュメントではストリームと説明されています。しかし、私はキューのほうが最初の理解がしやすかったのでキューと表記します。)
メッセージキュー:
大量のデータをキューに蓄積し、負荷に合わせて調整しつつ、送信先にデータを届けます。
分散:
一つのサーバーやプロセスに集約するのではなく、分散して動作します。
これにより、複数のサーバーやプロセスで連携しながら大量のデータを大量の送信先に送信できます。
動画の配信サービスを例にすると、データをキューと分散によってコントロールしながら、多数の利用者に安定してサービスを提供することができます。
大量のデータ送信だけでなく、複雑なデータ転送経路をシンプルにする用途でも活躍するそうです。 昨今ではマイクロサービス化が進んでおり、各サービス間の通信経路が複雑になりがちです。 そこで、マイクロサービス間の通信経路をKafkaに集約することで通信経路をシンプルにします。
参照:日立製作所さんのQiita記事
Apache Kafkaの概要とアーキテクチャ - Qiita
Kafkaの構成要素
Kafkaの主要な構成要素です。
- Producer
- Broker
- Consumer
- Zookeeper
参照:日立製作所さんの図 Apache Kafkaの概要とアーキテクチャ - Qiita
Producer
Brokerにデータを登録します。 Pub/SubのPublisherです。
Broker
Producerが登録したデータをキューに蓄積し、Consumerに届けます。 複数のBrokerが分散して動作しており、分散したBrokerはZookeeperが管理しています。
Consumer
Brokerからデータを受け取ります。 Pub/SubのSubscriberです。
Zookeeper
分散して動作するBrokerを管理します。
Apache ZooKeeper What is Zookeeper?
Zookeeperは将来的にKafka Raftに置き換えられるらしいです。
What Is Kafka Raft | OpenLogic by Perforce
後述するセキュリティ設定を有効にする場合、これらも登場します。
- 認証局(CA)
- KeyStore
- TrustStore
Velotioさんの図 Best Practices for Kafka Security
認証局(CA)
Publisher、Broker、Consumerが通信する際に通信先の正当性を確認する証明書や、暗号化通信で使う証明書の署名をします。
KeyStore
KafkaサーバのSSL証明書や秘密鍵の発行と管理をします。
TrustStore
CAに署名された、信頼できる証明書のリストを管理します。BrokerやConsumerはTrustStoreを使って通信相手がCAに認証された正規の送信先であることを確認します。
Kafkaは通常は複数台のサーバで動作します。例えば殆どの場合、ProducerとConsumerは別のサーバで動作するでしょう。Brokerも複数台で動作するはずです。この場合、各サーバーごとにTrustStoreとKeyStoreを作成します。
Kafkaとデータの保存
Kafkaは書き込まれたデータをファイルに書き出して永続化します。
Kafkaのセキュリティ
Kafkaは、デフォルトではセキュリティに関する設定が有効ではありません。そのため、実際に運用する前に自分でセキュリティ周りの設定をする必要があります。
CAやKeyStore、TrustStoreの作成と設定方法は下記リンクの記事がわかりやすかったです。
Best Practices for Kafka Security
Kafkaの認証と認可
KafkaではSCRAMによって認証し、ACLによってデータの読み書きを制御します。
- SCRAM (Salted Challenge Response Authentication Mechanism) 認証 - Carpe Diem (hatenablog.com)
- Apache Kafka Authentication using SASL/SCRAM
- Apache Kafka 7.5 Authorization and ACLs
Kafkaの通信データ暗号化
KafkaではSSLをサポートしています。 デフォルトでは無効になっているので、自分で各サーバーの証明書を作成し、設定ファイルにて必要な設定をします。
Brokerの場合はserver.propertiesのsecurity.inter.broker.protocol、ProducerやConsumerの場合はsecurity.protocolでSSLやSASL_SSLを指定します。
最後に
今回Kafkaについて初めて学びましたが、なかなか難しいですね。 各種ドキュメントを読んで「なんとか概要だけは理解できたかな」と思いますが、今回触れていない機能がまだまだたくさんあります。
実際に動かしてみるといくつもわからないことにぶつかるでしょうし、更に本番で使うとなると性能のチューニングやモニタリングも必要でしょう。 今後も継続して学習し、そして実際に手を動かしてKafkaと少しずつ仲良くなっていきたいと思います。