
Kafkaってなに
業務でApache Kafkaが出てきたので、ざっくりまとめようと思いました。
まずIoTやメッセージツールなどのシステムでは送信する側と受信する側が常に相互通信可能という状況を想定するべきでないので、非同期的な通信に限られるので両者の間にデータを受け渡しを行うメッセージキューイング(MQ)システムが間に挟まれる。ただ、例えばIoTサービスとかに人気が出てしまうと端末が多くなったり×大量のセンサーデータとかを送ってしかもバッチ処理を待たずにリアルタイムに処理したいなどの話になる、そこでスケーラビリティとかスループット(あんまりよく分かってないが)の話になりビッグデータ向けMQシステムのOSS, Apache Kafkaの出番となるようだ。
この人の記事がめちゃまとまってますが、初見だと難しくて玄人向けかも。。。
Apache Kafkaの概要とアーキテクチャ
https://qiita.com/sigmalist/items/5a26ab519cbdf1e07af3
Kafkaシステム内の三つのプレイヤー
一般的にはpublisherとsubscriberとも言うみたいですが、kafkaでは以下のように言われる。
Producer・・・上の図の通り、データ送信する(push)。
Broker・・・Producerからデータを受け取る。このグループがKafka Cluster。
Consumer・・・Brokerからデータを受け取る(pull)。topic-partation単位でデータを読み込み、読んだかどうかをoffsetで管理する。
※Zookeeper・・・Brokerのメタデータ、後述のtopic/partiionなどを管理する、Kafkaはこれがないとちゃんと動かないが、
いずれKafka内に組み込まれるらしい。
データ単位
message ・・・kafka内のデータ最小単位でketとvalue形式
topic・・・messageをグループ化?チャンネル化するものdbのテーブルとかコレクションみたいなイメージ。consumerもpro
ducerもこれを指定する。
partition・・・分散処理を行なうためにtopicを分ける。
まとめ、次回記事
最近のIoTではmqtt軽量・低電力なmq用プロトコルとkafkaを組みあわえてシステム作られているらしいです。ので、業務ではあくまでデータ送ったり受け取ったりするだけだが、ちゃんとkafka自体をチューニングできるようになりたいですね。
どこかの記事見つけて自分でもdockerでkafka立ててハンズオンやってみる実践編を書いてみようと思う、大量データを高速にというよりは、ひとまずkafka経由でデータ送りましたぐらいになってしまうのは必須だが。。。今回はコマンドもコードもゼロな記事でした。