文章目錄
- 2.1 Chart包方式安裝kafka集群
- 5.開始安裝
- 2.2 命令行方式安裝kafka集群
- 搭建 Kafka-UI
- 三、kafka集群測試
- 3.1 方式一
- 3.2 方式二
- 四、kafka集群擴容
- 4.1 方式一
- 4.2 方式二
- 五、kafka集群刪除
參考文檔
[Helm實踐---安裝kafka集群 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/642515749)
[K8S Kraft Kafka 集群搭建 - 掘金 (juejin.cn)](https://juejin.cn/post/7330515218605637667)
2.1 Chart包方式安裝kafka集群
bitnami/kafka
就是原生的 Kafka
,confluentinc
是在原生 Kafka
的基礎上加了一些東西,但他還是兼容原生 Kafka
,有興趣的自己去看
1.添加helm倉庫地址
helm repo add bitnami https://charts.bitnami.com/bitnami
1.更新倉庫
helm repo update bitnami
1.查看kafka的Chart包的歷史版本
root@master1:~/helm/kafka# helm search repo bitnami/kafka -l
NAME CHART VERSION APP VERSION DESCRIPTION
bitnami/kafka 28.3.0 3.7.0 Apache Kafka is a distributed streaming platfor...
bitnami/kafka 28.2.6 3.7.0 Apache Kafka is a distributed streaming platfor...
bitnami/kafka 28.2.5 3.7.0 Apache Kafka is a distributed streaming platfor...
bitnami/kafka 28.2.4 3.7.0 Apache Kafka is a distributed streaming platfor...
bitnami/kafka 28.2.3 3.7.0 Apache Kafka is a distributed streaming platfor...
(2).查看chart包格式: helm show chart chart包名 或 helm show values chart包名 (查看詳細信息)
2.下載最新chart包
[root@k8s-master01 ~]# helm pull bitnami/kafka
如果想要下載指定版本,需要指定–version參數
[root@k8s-master01 ~]# helm pull bitnami/kafka --version 23.0.0
(3).拉取chart包格式:
helm pull 遠程倉庫chart包名 --version 0.4.3 --untar #從遠程倉庫拉取指定版本的chart包到本地并解壓,--untar是解壓,不加就是壓縮包
helm pull 遠程倉庫chart包名 --untar #從遠程倉庫拉取最新版本的chart包到本地并解壓,--untar是解壓,不加就是壓縮包
3.解壓chart包
[root@k8s-master01 ~]# tar -xf kafka-23.0.1.tgz
4.修改values.yaml相應配置
需要修改replicaCount的值為3
$ cd /root/helm/kafka/kafka
$ vim values.yaml
根據自己需要修改image(可不改)
$ cd /root/kafka
$ vim values.yaml
...
...
image:registry: registry.cn-hangzhou.aliyuncs.comrepository: abroad_images/kafkatag: 3.5.0-debian-11-r1image:registry: registry.cn-hangzhou.aliyuncs.comrepository: abroad_images/kubectltag: 1.25.11-debian-11-r4image:registry: registry.cn-hangzhou.aliyuncs.comrepository: abroad_images/bitnami-shelltag: 11-debian-11-r130image:registry: registry.cn-hangzhou.aliyuncs.comrepository: abroad_images/kafka-exportertag: 1.7.0-debian-11-r11image:registry: registry.cn-hangzhou.aliyuncs.comrepository: abroad_images/jmx-exportertag: 0.18.0-debian-11-r34
如果使用指定的zookeeper,kraft模式要關閉,修改kraft.enable 的值為false,新版kafka新增了一個kraft模式,他與zookeeper是沖突的,不能同時使用
根據自己需要修改持久化配置,這里因為是測試環境沒有使用持久化(生產必須要使用持久化)。其中修改內容如下:
- enabled修改為false
- 注釋existingClaim
- 注釋storageClass
客戶端需不需要認證主要是這里
listeners:
默認controller可以兼職broker
controller:
5.開始安裝
[root@k8s-master01 kafka]# helm install -n kafka kafka .
6.觀察到kafka集群已經安裝完成
root@master1:~/helm/kafka/kafka# kubectl get po -n kafka
NAME READY STATUS RESTARTS AGE
kafka-client 1/1 Running 0 29m
kafka-controller-0 1/1 Running 0 92m
kafka-controller-1 1/1 Running 1 (90m ago) 92m
kafka-controller-2 1/1 Running 0 92m
kafka-ui-784769b6db-k8rbh 1/1 Running 0 5m46s
7.查看安裝的版本信息
root@master1:~/helm/kafka/kafka# helm list -n kafka
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
kafka kafka 1 2024-05-23 15:08:04.59273309 +0800 CST deployed kafka-28.3.0 3.7.0
8.驗證kafka與zookeeper是否綁定,觀察到已成功綁定
[root@k8s-master kafka]# kubectl logs -f kafka-0 -n kafka | grep socket
5.查看安裝的values
[root@k8s-master]# helm get values kafka -n kafka
2.2 命令行方式安裝kafka集群
1.直接安裝
$ helm install kafka bitnami/kafka --set zookeeper.enabled=false --set replicaCount=3 --set externalZookeeper.servers=zookeeper --set persistence.enabled=false -n public-service
helm install kafka kafka --values ./kafka/values.yaml \--set replicaCount=1 \--set kafka.kafkaConfigOverrides=transaction.state.log.replication.factor=1 \--set kafka.kafkaConfigOverrides=transaction.state.log.min.isr=1 \--set kafka.kafkaConfigOverrides=default.replication.factor=1 \--set kafka.kafkaConfigOverrides=num.io.threads=2 \--set kafka.kafkaConfigOverrides=num.network.threads=2 \--set kafka.kafkaConfigOverrides=inter.broker.protocol.version=3.5.1 \--set kafka.kafkaConfigOverrides=offsets.topic.replication.factor=1 \--set kafka.kafkaConfigOverrides=transaction.state.log.num.partitions=50
搭建 Kafka-UI
kafka-web-ui.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: kafka-uilabels:app: kafka-uinamespace: kafka
spec:replicas: 1selector:matchLabels:app: kafka-uitemplate:metadata:labels:app: kafka-uispec:containers:- name: kafka-uiimage: provectuslabs/kafka-ui:latestenv:- name: KAFKA_CLUSTERS_0_NAMEvalue: 'Kafka Cluster'- name: KAFKA_CLUSTERS_0_BOOTSTRAPSERVERSvalue: 'kafka-controller-0.kafka-controller-headless.kafka.svc.cluster.local:9092,kafka-controller-1.kafka-controller-headless.kafka.svc.cluster.local:9092,kafka-controller-2.kafka-controller-headless.kafka.svc.cluster.local:9092'- name: KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOLvalue: 'SASL_PLAINTEXT'- name: KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISMvalue: 'PLAIN'- name: KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIGvalue: 'org.apache.kafka.common.security.scram.ScramLoginModule required username="user1" password="xY71glsywM";'resources:requests:memory: "256Mi"cpu: "100m"ports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: kafka-uinamespace: kafka
spec:selector:app: kafka-uitype: NodePortports:- protocol: TCPport: 8080targetPort: 8080
參數詳解
value: 'kafka-controller-0.kafka-controller-headless.kafka.svc.cluster.local:9092kafkapod名稱 svc名稱 命名空間
瀏覽器訪問
三、kafka集群測試
這里通過兩種方式測試下kafka集群,區別只是一個是新起一個容器進行測試,另一個則是在原來的基礎進行測試:
3.1 方式一
1.運行一個kafka-client,用于連接kafka集群
kubectl run kafka-client --restart='Never' --image docker.io/bitnami/kafka:3.7.0-debian-12-r6 --namespace kafka --command -- sleep infinity
上面參數說明:
- `--restart='Never'`: 設置 Pod 的重啟策略為 "Never",這意味著 Pod 不會自動重啟
- `--command -- sleep infinity`: 在容器中執行命令 `sleep infinity`,以保持 Pod 持續運行。
- `--command` 表示后面的內容是一個命令而不是一個參數,
- `sleep infinity` 是一個常用的命令,使得容器無限期地休眠
查看pod,已成功建立
root@master1:~/helm/kafka# kubectl get po -n kafka
NAME READY STATUS RESTARTS AGE
kafka-client 1/1 Running 0 51m
kafka-controller-0 1/1 Running 0 114m
kafka-controller-1 1/1 Running 1 (112m ago) 114m
kafka-controller-2 1/1 Running 0 114m
kafka-ui-784769b6db-k8rbh 1/1 Running 0 27m
2.在k8s-master01節點上開啟兩個窗口,一個用于生產者,一個用作消費者。 (1)生產者窗口
進入kafka創建一個名為test的topic,出現>代表成功
kubectl exec -it kafka-client -n kafka -- /bin/bashcd /opt/bitnami/kafka/binkafka-console-producer.sh \--broker-list kafka-controller-0.kafka-controller-headless.kafka.svc.cluster.local:9092,kafka-controller-1.kafka-controller-headless.kafka.svc.cluster.local:9092,kafka-controller-2.kafka-controller-headless.kafka.svc.cluster.local:9092 \--topic test
參數詳解
- `kafka-console-producer.sh`:用于創建生產者 - `--broker-list 指定要連接的 Kafka Broker 列表。使用逗號分隔多個 Broker 的地址。在這里,指定了三個 Kafka Broker 的地址 - `--topic test`:指定要發布消息的主題名稱,這里使用的是 "test"
(2)消費者窗口
kubectl exec -it kafka-client -n kafka -- /bin/bashcd /opt/bitnami/kafka/binkafka-console-consumer.sh \--bootstrap-server kafka.kafka.svc.cluster.local:9092 \--topic test \--from-beginning
上面參數說明:
- `kafka-console-consumer.sh`:用于啟動消費者
- `--bootstrap-server localhost:9092`:指定用于引導連接到 Kafka 集群的 Kafka Broker 的地址。使用的是本地主機(localhost)上的 Kafka Broker,并監聽 9092 端口
- `--topic test`:指定要發布消息的主題名稱,這里使用的是 "test"
- `--from-beginning`:設置消費者從主題的開始處開始消費消息。這意味著消費者將從主題中的最早可用消息開始消費
3.開始測試,觀察到消費正常
(1)生產者窗口
>test2
>test1
(2)消費者窗口
test2
test1
3.2 方式二
1.進入kafka創建一個名為testtopic的topic
kubectl exec -it kafka-controller-0 -n kafka -- /bin/bashcd /opt/bitnami/kafka/binkafka-topics.sh \--create \--bootstrap-server kafka-controller-0.kafka-controller-headless.kafka.svc.cluster.local:9092 \--replication-factor 1 --partitions 1 --topic testtopic
上面參數說明:
--create
:指示kafka-topics.sh
命令創建一個新的主題kafka-topics.sh
:用于創建topic--bootstrap-server localhost:9092
:指定用于引導連接到 Kafka 集群的 Kafka Broker 的地址。使用的是本地主機(localhost)上的 Kafka Broker,并監聽 9092 端口--replication-factor 1
:設置主題的副本因子(replication factor),指定每個分區的副本數量。--partitions 1
:設置主題的分區數,指定要創建的分區數量--topic testtopic
:指定要創建的主題的名稱,這里使用的是 “testtopic”
2.啟動消費者
kafka-console-consumer.sh \--bootstrap-server localhost:9092 \--topic testtopic
上面參數說明:
kafka-console-consumer.sh
:用于創建消費者--bootstrap-server localhost:9092
:指定用于引導連接到 Kafka 集群的 Kafka Broker 的地址。使用的是本地主機(localhost)上的 Kafka Broker,并監聽 9092 端口
3.新起一個窗口后,進入kafka,啟動一個生產者后,輸出hello字段
kubectl exec -it kafka-0 -n public-service -- bashkafka-console-producer.sh --bootstrap-server localhost:9092 --topic testtopic
>hello
上面參數說明:
kafka-console-consumer.sh
:用于創建生產者--bootstrap-server localhost:9092
:指定用于引導連接到 Kafka 集群的 Kafka Broker 的地址。使用的是本地主機(localhost)上的 Kafka Broker,并監聽 9092 端口
4.在消費者窗口上進行查看,觀察到消費正常
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopichello
四、kafka集群擴容
關于kafka集群擴容,這里介紹兩種方式:一種是修改副本數進行擴容,另一種是使用helm upgrade
進行擴容
4.1 方式一
1.修改values.yaml相應配置,搜索replicaCount,將副本數修改為5
[root@k8s-master01 ~]# cd /root/kafka
[root@k8s-master01 kafka]# vim values.yaml
2.開始擴容
[root@k8s-master01 ~]# cd /root/kafka
[root@k8s-master01 kafka]# helm upgrade -n kafka kafka .
3.查看pod建立情況,觀察到已經成功擴容
4.2 方式二
其實這種方式只針對命令行方式安裝kafka集群
1.直接使用helm upgrade命令進行擴容
$ helm upgrade kafka bitnami/kafka --set zookeeper.enabled=false --set replicaCount=3 --set externalZookeeper.servers=zookeeper --set persistence.enabled=false -n public-service
2.查看pod建立情況,觀察到已經成功擴容
五、kafka集群刪除
1.查看安裝的集群
[root@k8s-master01 kafka]# helm list -A
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
kafka public-service 2 2023-07-08 20:51:17.114862828 +0800 CST deployed kafka-23.0.1 3.5.0
zookeeper public-service 1 2023-07-08 17:16:23.567379001 +0800 CST deployed zookeeper-11.4.3 3.8.1
2.刪除kafka集群
[root@k8s-master01 kafka]# helm delete kafka -n kafka