【Kafka】Apache Kafka ~ 基礎知識編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/04/23/235534
https://dk521123.hatenablog.com/entry/2023/04/24/153846

の続き。

 前回・前々回で、いきなり、Apache Kafka環境を構築したが、
もともとは、仕事で、ストリーミングデータを扱うものなのかなー
ってことだけで、全体構成など分かっていない部分が多く、
ざっくりでも分かっていないと、仕事にならなくなりそうなので
Apache Kafkaについて、調べてみた。

目次

【1】Kafka
 1)解説動画
 2)Github
【2】Kafka を使うことによる利点
【3】用途(Use case)
 1)実績
【4】特徴
 1)スケールアウト
 2)レプリケーション
 3)メッセージの送達保障
 4)過去のデータを遡って再取得

【1】Kafka

* LinkedIn社で開発された分散ストリーミングプロットフォーム
 (A distributed streaming platform)
* JavaとScalaで実装

https://kafka.apache.org/

もっと簡単に言うと

* システムとシステム間でストリームデータの中継役

1)解説動画

* さくっと知りたい場合、倍速でもいいので
 以下をみておくといいかも。

https://youtu.be/84DAkzetyRk?t=26
https://youtu.be/FJZeaY3n5CY?t=58

2)Github

* Kafka のコード

https://github.com/apache/kafka/blob/2.8/core/src/main/scala/kafka/Kafka.scala

【2】Kafka を使うことによる利点

* メッセージを中央集中管理することでシステムを疎結合に保つ(※1)
* データ流量の急激な増加によるシステム負荷を抑制

※1:疎結合 (loose coupling)

* 細分化された個々のコンポーネント同士の結びつきが比較的緩やかで、
 独立性が強い状態のこと

【3】用途(Use case)

* 複数コンポーネントで形成されているシステムであれば
 何でも使えるっちゃー使える
 => 金融、流通などで利用

1)実績

https://kafka.apache.org/powered-by

より抜粋

* LinkeIn ... まーもともと作っているし
* Twitter
* Netflix
* Uber
 => Paymentシステムでも使用

https://www.youtube.com/watch?v=5TD8m7w1xE0&t=441s

日本の企業だと...

* Line

【4】特徴

https://youtu.be/84DAkzetyRk?t=436

より抜粋

1)スケールアウト
2)レプリケーション
3)メッセージの送達保障
4)過去のデータを遡って再取得

1)スケールアウト

* サーバ台数を増やして、全体の性能を上げることが可能

2)レプリケーション

* 耐障害に備えて、データを複数サーバに複製される

3)メッセージの送達保障

* メッセージが正しく送受信したかを確認できる

補足:配信品質(Quality of Sevice;QoS

# QoS Type Japanese Memo
1 At Least Once 最低1回は配信 Kafkaのデフォルトの配信品質
2 At Most Once 最大1回の配信
3 Exactly Once 正確に1回の配信 Kafkaのトランザクション機能により実現

4)過去のデータを遡って再取得

* データの再処理が必要な場合、
 過去を遡って再取得、再処理可能

参考文献

https://www.imagazine.co.jp/apache-kafka-01/
https://qiita.com/sigmalist/items/5a26ab519cbdf1e07af3

関連記事

Apache Kafka ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/23/235534
Apache Kafka ~ 環境構築 / Docker compose編 ~
https://dk521123.hatenablog.com/entry/2023/04/24/153846
Docker compose で Kafka構築時に Topic を作るには
https://dk521123.hatenablog.com/entry/2023/07/22/145643
Apache Kafka ~ Remote debug ~
https://dk521123.hatenablog.com/entry/2023/10/23/125909
Apache Kafka ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/01/000000
Apache Kafka ~ Kafkaコマンド ~
https://dk521123.hatenablog.com/entry/2023/05/16/000000
Apache Kafka ~ Consumer ~
https://dk521123.hatenablog.com/entry/2023/10/17/235420
Apache Kafka ~ Strimzi ~
https://dk521123.hatenablog.com/entry/2023/05/08/000133
Apache Kafka ~ Web UI / Kafdrop編 ~
https://dk521123.hatenablog.com/entry/2023/07/30/174239
Apache Kafka ~ Web UI / kafka-ui編 ~
https://dk521123.hatenablog.com/entry/2023/07/31/000152
Apache Kafka ~ 設定値 ~
https://dk521123.hatenablog.com/entry/2023/05/28/151212
Kafka Connect ~ 環境構築 / Docker compose編 ~
https://dk521123.hatenablog.com/entry/2023/08/11/220921
Kafka Connect ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/04/29/185133
Kafka Connect ~ 基本編 / PostgreSQL
https://dk521123.hatenablog.com/entry/2023/05/02/233806
Kafka Connect ~ Connector 構成プロパティ ~
https://dk521123.hatenablog.com/entry/2023/06/02/011131
Kafka Connect ~ Rest API
https://dk521123.hatenablog.com/entry/2023/05/31/000000
Kafka Connect での デバッグ方法
https://dk521123.hatenablog.com/entry/2023/08/15/215636
Kafka Connect ~ DB/Schema切替 ~
https://dk521123.hatenablog.com/entry/2023/10/26/235951
Amazon MSK ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/04/21/000000
Amazon MSK ~ 基本編 / Connector ~
https://dk521123.hatenablog.com/entry/2023/05/20/003516
Amazon MSK ~ AWS CLI
https://dk521123.hatenablog.com/entry/2023/06/03/003941
Kafkaコネクタ ~ Kafka用Snowflakeコネクタ ~
https://dk521123.hatenablog.com/entry/2023/06/07/144114
kafka-python ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/10/24/000309
ローカル環境のKafkaでのトラブル
https://dk521123.hatenablog.com/entry/2023/10/19/210341
Terraform ~ AWS MSK ~
https://dk521123.hatenablog.com/entry/2023/05/14/122215
Terraform ~ AWS MSK Connect ~
https://dk521123.hatenablog.com/entry/2023/05/25/000000
Apache Flink ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/03/01/235100
Apache Flink ~ Streaming vs Batch ~
https://dk521123.hatenablog.com/entry/2023/07/02/142843
ScalaApache Kafka / Producer ~
https://dk521123.hatenablog.com/entry/2023/04/27/235703
ScalaApache Kafka / Consumer ~
https://dk521123.hatenablog.com/entry/2023/04/28/014737