Apache Kafkaの概要
Apache Kafka(アパッチ カフカ)は、JavaとScalaで書かれたオープンソースのストーリーミング送受信処理基盤であり、メッセージキュー(MQ)やメッセージングシステムと似通ったソフトウェアです。KafkaはアメリカのビジネスSNS企業であるLinkedInで2011年頃に開発されオープンソース化されました。その後、Apacheソフトウェア財団のプロジェクトとして認められ、現在はApacheソフトウェア財団の管理下で開発が継続されています。また、LinkedInでKafkaの開発に関わった主要メンバー達はConfluentという会社を立ち上げKafkaのEnterprise向けサービスを行っています。
現在の最新バージョンはKafka 2.5.0です。(2020年7月現在)
Apache Kafkaの特徴
Kafkaは、複数のアプリケーションやデータベース間でストリームデータの中継点として送受信をする役目を担いますが、送信側(Producer)からのストリームデータを、耐障害のために保存を行なうフォールトトレラントな設計となっています。各Producerから送られてくるストリームデータはTopicと呼ばれ、Topic毎にカテゴライズされて保存されます。
Topicの中身はrecordと呼ばれるkey-valueで構成されたデータがtimestampをもって順序立てて連続しています。受信側はConsumerと呼ばれ、KafkaはConsumer毎に決められたTopicを送信します。
Kafkaは単一構成でも稼働しますが、複数のKafkaサーバを遠隔地のデータセンターに配置してクラスターを構成することも可能です。
Kafkaには4つのコアAPIが存在します。
・Producer API
送信側のアプリケーションやDBから1つ又は、複数のTopicとしてのストリームデータの配信を許可します。
・Consumer API
受信側に1つ又は、複数のTopicとしてのストリームデータの受信と処理を許可します。
・Steams API
アプリケーションにストリームプロセッサーとして動作することを許可します。1つ又は、複数のTopicとしてのストリームデータをinputストリームとして受け取り、効果的に変換してoutputストリームとして送信します。
・Connector API
既存のアプリケーションやデータベースをProducerやConsumerとして、データをインポートやエクスポートすることを許可します。
Kafkaのユースケース
・Messagingシステム
Kafkaをメッセージブローカーとして利用します。Kafkaはこれまでのメッセージブローカーの代替として十分に機能します。Kafkaは高いスループット、レプリケーションとフォールトトレランス機能を備えていますので、大規模なメッセージプロセッシングシステムを構成するための良いソリューションと考えられます。この分野では、類似のソフトウェアとしてActiveMQや、RabbitMQが存在します。
ActiveMQ
http://activemq.apache.org/
RabbitMQ
https://www.rabbitmq.com/
・Websiteのアクティビティトラッキング
Kafkaは元々、Websiteにおけるユーザのアクティビティを収集するため利用されていました。Websiteでのユーザのアクティビティは、ページビューや検索、ユーザがサイト上で行なう様々な動作が含まれます。それらをリアルタイムにモニタリングすることや、処理を行い収集したデータをHadoopなどのシステムに送信してユーザ動向の解析を行えます。
・メトリックスやログの収集
各システムから送られてくるシステムのメトリックスをモニタリングするために収集する役目を担います。また、多くのユーザはKafkaをログ収集のために利用しています。この分野では、ScribeやFlumeといった類似のソフトウェアが存在します。
Scribe
https://www.scribesoft.com/
Flume
https://flume.apache.org/
・ストリーム処理
Kafkaを、データプロセッシングのパイプラインとして利用します。Kafkaは送信者からデータを受け取って収集し、受信者に向け変換を行い送信します。この分野では、Apache StormやApache Samzaが類似のソフトウェアとして存在します。
Apache Storm
https://storm.apache.org/
Apache Samza
https://samza.apache.org/
・イベントソーシング
Kafkaは、イベントを中心とした状態の変更が時系列の一連のレコードとして記録されるアプリケーション設計となっています。この設計はCQRSで有用で、イベントハブとして利用されます。
・コミットログ
Kafkaは、分散システムの外部コミットログとして機能します。ノード間のデータ複製や障害時のデータ復元のメカニズムとしも機能し、また、トピックという概念を用いて、書き込み/読み出しを並列に行うことで、高速かつフォールトトレランスに優れた通信を実現します。
Apache Kafkaの動作環境
Kafkaは、下記に示すUnix系OS上で動作します。Windowsで稼働させるには、まだいくつかの問題が残っているため、現状ではWindowsはサポートされるプラットフォームには含まれていません。
・主要なLinuxディストリビューション
・Solaris
・MacOSX
稼働させるにはJavaが必要になります。2020年7月現在のJavaの推奨バージョンは8です。
Apache Kafkaのライセンス
KafkaはApacheのトップレベルプロジェクトの1つです。ライセンスはApache License 2.0となっており、ユーザはそのソフトウェアの使用や頒布、修正、派生版の頒布をすることに制限を受けません。
Apache Kafkaのサポート
OpenStandiaではApache kafka の技術支援・サポートサービスを提供しています。
お気軽にOpenStandiaまでお問い合わせください。
●オープンソースソフトウェア年間サポートサービス詳細
●技術支援サービス詳細
Apache Kafkaの参考情報
Apache Kafka公式サイト
https://kafka.apache.org/
Apache Kafka公式ドキュメント
https://kafka.apache.org/documentation/
Apache Kafkaエコシステムとして動作するツール一覧
https://cwiki.apache.org/confluence/display/KAFKA/Ecosystem