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)

相关推荐
想要打 Acm 的小周同学呀6 小时前
Kafka消息队列出现挤压如何解决?
分布式·kafka
富士康质检员张全蛋10 小时前
Kafka实战 自定义分区器 几种常见的分区器
分布式·kafka
starzy199011 小时前
Flink基础之Flink批流数据读取处理案例剖析:从文件到 Kafka 的完整代码
大数据·flink·kafka
数智启示录1 天前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache
数智启示录1 天前
Apache Kafka 幂等 Producer 的边界:Exactly-Once 到了 MySQL 为什么失效 【Kafka合集】
数据库·经验分享·分布式·mysql·面试·kafka·apache
数智启示录1 天前
Apache Kafka 不只是消息队列:日志与 Offset 分离如何让事件可重放 【Kafka合集】
经验分享·分布式·面试·kafka·apache
数智启示录1 天前
Apache Kafka 同 Key 仍会乱序:从分区 Offset 到业务可见的四道边界 【Kafka 合集】
大数据·数据库·经验分享·分布式·面试·kafka·apache
老周聊架构1 天前
Flink 连接器与生态:Kafka Offset 提交修复与 MySQL Binlog 延迟指标
mysql·flink·kafka
小白羊丨2 天前
Kafka任务重试、退避与失败恢复怎么做?
分布式·kafka
爱三盖浇饭4 天前
挑战从零开始学习Kafka2: Kafka 常见问题解决方案
学习·kafka