K8S Kraft Kafka 集群搭建

0. 前言

3.3.1 开始,KRaft 模式生产可用,使用 KRaft 版的 Kafka, 不在需要维护 Zookeeper。 这咱们得整一手,用不用另说,先部署起来。就像面试:

面试官:有没有高并发高可用的经验?我们系统服务xx人,每年为用户提供xx服务。

我:那必须的,不止玩过高并发高可用,还有自动扩容缩容,滚动更新(其实就用了K8S)

入职:QPS 25

更新日志:Apache Kafka

1. 准备

  • K8S
  • kubectl
  • helm

2. 方案选择

Kafka 镜像用的比较多的有两家:

那咱不得好好评估评估? bitnami/kafka 就是原生的 Kafkaconfluentinc 是在原生 Kafka 的基础上加了一些东西,但他还是兼容原生 Kafka,有兴趣的自己去看,我没兴趣。

Confluent Platform | Confluent Documentation

我一个 Kafka 都搞不明白,还要我再去看附加的东西?没门。

最主要的是人家只想做一个单纯的小男生呀,绝不是因为 bitnami 配备了能一键部署 K8S Kafka 集群 的 helm chart,才选择使用 bitnami 的。

3. 利用 helm 搭建 Kafka 集群

charts/bitnami/kafka at main · bitnami/charts (github.com)

有了这东西不比自己坑次坑次写 kubectl 配置文件强?

我上来就是一个 values.yaml (不改默认的也行,就是连接的时候要配置认证)

yaml 复制代码
image:
  registry: docker.io
  repository: bitnami/kafka
  tag: 3.6.1-debian-11-r3
  pullPolicy: IfNotPresent
listeners:
  client:
    containerPort: 9092
    # 客户端需不需要认证主要是这里
    protocol: PLAINTEXT 
    name: CLIENT
  controller:
    name: CONTROLLER
    containerPort: 9093
    protocol: PLAINTEXT
    sslClientAuth: ""
  interbroker:
    containerPort: 9094
    protocol: PLAINTEXT
    name: INTERNAL
    sslClientAuth: ""
  external:
    containerPort: 9095
    protocol: PLAINTEXT
    name: EXTERNAL
    sslClientAuth: ""
controller:
  # 默认controller可以兼职broker,为了测试集群,设2。为什么不3?等下把我机器卡死了怎么办?
  replicaCount: 2
broker:
  replicaCount: 0
service:
  type: ClusterIP
  ports:
    client: 9092
    controller: 9093
    interbroker: 9094
    external: 9095
kraft:
  enabled: true

反手一个helm 命令:

shell 复制代码
# 提醒开启oci配置,就加上这个
export HELM_EXPERIMENTAL_OCI=1

helm install kafka-cluster oci://registry-1.docker.io/bitnamicharts/kafka --version "26.0.0" -n "集群需要部署的k8s命名空间" -f values.yaml

等一小会就完成了,这不比直接用 kubectl 香?

连service都给你整好了

4. 顺便搭建个 Kafka-UI

测试一下能不能连接上,Kafka-ui 看起来不错,测试的同时还能得到一个操作kafka的系统,盘它。

揍四他:provectus/kafka-ui: Open-Source Web UI for Apache Kafka Management (github.com) (唯一的缺点是不需要登录就能访问页面了)

这次我们直接用 kubectl 来干了,不是因为我突然装逼给你手写 yaml 文件,而是人家不屑于提供 helm chart,这东西太简单了。简单到我都能操作。

我上来就是一个 kubectl yaml

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-ui-deployment
  namespace: 命名空间
  labels:
    app: kafka-ui
spec:
  # 就一个ui页面还要啥?
  replicas: 1
  selector:
    matchLabels:
      app: kafka-ui
  template:
    metadata:
      labels:
        app: kafka-ui
    spec:
      containers:
      - name: kafka-ui
        image: provectuslabs/kafka-ui:53a6553765a806eda9905c43bfcfe09da6812035
        env:
        - name: KAFKA_CLUSTERS_0_NAME
          value: "Kafka Cluster"
        - name: KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS
          value: kafka-cluster-controller-0.kafka-cluster-controller-headless.命名空间.svc.cluster.local:9092,kafka-cluster-controller-1.kafka-cluster-controller-headless.命名空间.svc.cluster.local:9092
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            memory: "256Mi"
            cpu: "100m"
          limits:
            memory: "1024Mi"
            cpu: "1000m"
        ports:
        - containerPort: 8080
---

apiVersion: v1
kind: Service
metadata:
  name: kafka-ui-service
  namespace: 命名空间
spec:
  selector:
    app: kafka-ui
  type: NodePort
  ports:
    - protocol: TCP
      port: 8080 # 有域名配置个ingress来访问,就不用nodeport了
      targetPort: 8080
      nodePort: 30180 # node port可以通过集群IP+端口访问

这波完美

Ref

Apache Kafka

confluentinc/cp-kafka - Docker Image

bitnami/kafka - Docker Image

Confluent Platform | Confluent Documentation

charts/bitnami/kafka at main · bitnami/charts (github.com)

charts/bitnami/kafka/values.yaml at main · bitnami/charts (github.com)

provectus/kafka-ui: Open-Source Web UI for Apache Kafka Management (github.com)

Installing Kafka UI on local k8s cluster (github.com)

相关推荐
现实、太残忍7 小时前
docker快速部署kafka
docker·容器·kafka
运维&陈同学9 小时前
【kafka04】消息队列与微服务之Kafka 图形工具
后端·微服务·zookeeper·云原生·架构·kafka·消息队列·云计算
柴米油盐那点事儿12 小时前
springboot引入kafka
spring boot·kafka
jlting19512 小时前
读取mysql、kafka数据筛选后放入mysql
大数据·sql·mysql·flink·kafka·database
zmd-zk15 小时前
kafka命令的使用——主题命令(topic)
大数据·分布式·学习·kafka
人不走空16 小时前
【Zookeeper 和 Kafka】为什么 Zookeeper 不用域名?
分布式·zookeeper·kafka
一只爱撸猫的程序猿18 小时前
简单解决一个同城多活中的机房之间数据同步的问题
spring boot·mysql·kafka
深度学习真难19 小时前
docker启动kafka、zookeeper、kafdrop
docker·zookeeper·kafka
一條狗1 天前
随笔20241126 Kafka 消费者的自动提交与手动提交偏移量详解
分布式·kafka
运维&陈同学1 天前
【kafka01】消息队列与微服务之Kafka详解
运维·分布式·后端·微服务·云原生·容器·架构·kafka