【Kafka】Apache Kafka ~ Strimzi ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/04/21/000000

の際に、Apache Kafka を AWS 上で環境構築する際に
「Amazon EKS(KubernetesのマネージドAWSサービス)」をあげたが
Kubernetes上でApache Kafka を構築するのに「Strimzi」ってのが
あるらしいので、調べてみた。

目次

【1】Strimzi
 1)ライセンス
 2)公式サイト
【2】環境設定
 1)前提条件
 2)設定手順

【1】Strimzi

* Kubernetes上で Kafka クラスタを管理するオープンソースの Kubernetes Operator 

特徴

* Kafkaの構成要素をKubernetesのカスタムリソース(Custom Resource; CR)で定義
* マニフェストファイルでKafkaクラスタのコンポーネントを管理できる
* Topicの作成・更新・認証ユーザの作成・削除といったオペレーションも
 カスタムリソースで操作可能

1)ライセンス

* Apache 2.0

https://github.com/strimzi

2)公式サイト

https://strimzi.io/
Quick Starts
https://strimzi.io/quickstarts/
Download
https://github.com/strimzi/strimzi-kafka-operator/releases/
YouTubeチャンネル
https://www.youtube.com/@Strimzi

【2】環境設定

1)前提条件

* Kubernetes / minikube がインストールされていること
 => ローカル上で設定したい場合は、以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2023/05/07/214515

[0] 確認

# Validate minikube
minikube version

# Validate kubectl
kubectl version

2)設定手順

https://strimzi.io/quickstarts/

に従ってやっていく。

ちなみに、公式から動画も出ている。

https://youtu.be/1qO2qGuJNQI?t=5

[1] Kubernetesクラスタ開始

# Minikube の稼働状況を確認
minikube status

# 起動していない場合、以下を実行
# 2GB default memory isn't always enough
minikube start --memory=4096

[2] Strimzi のインストール

# Step1: Namespace「kafka」を作成
kubectl create namespace kafka

# 確認
kubectl get namespace
# NAME                   STATUS   AGE
# kafka                  Active   5m32s

# Step2: Strimzi のマニフェストファイルから、CRDを作成
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka

https://strimzi.io/install/latest?namespace=kafka

# Podの確認 (確認できたら Ctrl+C)
kubectl get pod -n kafka --watch

# 全Podの確認 (確認できたら Ctrl+C)
kubectl get pods -n kafka -w

# Deploymentのログ確認 (確認できたら Ctrl+C)
kubectl logs deployment/strimzi-cluster-operator -n kafka -f

[3] Apache Kafkaクラスタ CR(Custom Resource)の適用

# Apply the `Kafka` Cluster CR file
kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafka

https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml
https://github.com/strimzi/strimzi-kafka-operator/tree/0.34.0/examples/kafka

# KafkaクラスターがReady状態になるのを待機
kubectl wait kafka/my-cluster --for=condition=Ready --timeout=600s -n kafka
# 時間内にReadyになれば、以下の結果が表示されます。
# kafka.kafka.strimzi.io/my-cluster condition met

[3] メッセージの送信受信を試す

# 別ターミナルで以下を実行

# Step1: メッセージの送信
kubectl -n kafka run kafka-producer -ti --image=quay.io/strimzi/kafka:0.34.0-kafka-3.4.0 --rm=true --restart=Never -- bin/kafka-console-producer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic

If you don't see a command prompt, try pressing enter.
# <Enter>キー押下
# 送信したいメッセージを記述する
> Hello
> World!!
> <Ctrl+C>

# Step2: メッセージの受信
kubectl -n kafka run kafka-consumer -ti --image=quay.io/strimzi/kafka:0.34.0-kafka-3.4.0 --rm=true --restart=Never -- bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning

If you don't see a command prompt, try pressing enter.
# <Enter>キー押下 (しばらく待ってみて、Step1のメッセージが表示されていることを確認)
<Ctrl+C>

[4] Strimzi クラスタの削除

# 一旦、全て片付けたい場合は、以下のコマンドを実行
kubectl -n kafka delete -f 'https://strimzi.io/install/latest?namespace=kafka'

参考文献

https://thinkit.co.jp/article/18133
https://recruit.gmo.jp/engineer/jisedai/blog/deploy_kafka_streaming_data_platform_on_kubernetes_using_strimzi/
https://rheb.hatenablog.com/entry/three_things_of_strimzi
https://qiita.com/hisato_imanishi/items/deba525f466cce1ea659
https://www.redhat.com/ja/topics/integration/why-run-apache-kafka-on-kubernetes
https://access.redhat.com/documentation/ja-jp/red_hat_amq_streams/2.1/html/configuring_amq_streams_on_openshift/assembly-operators-str
Apache Kafka on K8s (Strimzi) をコントロールする Cruise Control | by Kenta Kosugi | Medium
https://developer.mamezou-tech.com/blogs/2022/05/25/strimzi-kafka-operators/
https://literalice.com/post/strimzi/
https://zenn.dev/esaka/articles/fec9d7f2a477bd

関連記事

Apache Kafka ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/23/235534
Apache Kafka ~ 環境構築 / Docker compose編 ~
https://dk521123.hatenablog.com/entry/2023/04/24/153846
Apache Kafka ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/04/26/103421
Apache Kafka ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/01/000000
Apache Kafka ~ Kafka Connect ~
https://dk521123.hatenablog.com/entry/2023/04/29/185133
Apache Kafka ~ Kafka Connect / PostgreSQL
https://dk521123.hatenablog.com/entry/2023/05/02/233806
ScalaApache Kafka / Producer ~
https://dk521123.hatenablog.com/entry/2023/04/27/235703
ScalaApache Kafka / Consumer ~
https://dk521123.hatenablog.com/entry/2023/04/28/014737
Kubernetes ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/27/224624
Kubernetes ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/04/013529
Kubernetes ~ 基本編 / minikube ~
https://dk521123.hatenablog.com/entry/2023/05/07/214515
Kubernetes ~ 基本編 / kubectlコマンド ~
https://dk521123.hatenablog.com/entry/2022/01/12/110555
Amazon EKS ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/02/23/000000
Amazon MSK (Managed Streaming for apache Kafka)
https://dk521123.hatenablog.com/entry/2023/04/21/000000