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 就是原生的 Kafka,confluentinc 是在原生 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)

相关推荐
此时不提桶,更待何时2 天前
06-09-A-Kafka架构与存储原理详解
架构·kafka·linq
醉颜凉2 天前
Kafka 与 RabbitMQ/RocketMQ 选型对比:场景匹配、性能基准与迁移成本
kafka·消息队列·rabbitmq·rocketmq·中间件选型
筑梦之路3 天前
K8S yaml文件部署kafka集群(Kraft模式)——筑梦之路
容器·kafka·kubernetes
筑梦之路3 天前
Kafka KRaft 模式 Kubernetes 部署手册(StatefulSet + apache/kafka 官方镜像)——筑梦之路
kafka·kubernetes·apache
智码看视界4 天前
技术选型指南:Pulsar vs Kafka:消息队列选型终极对比与压测
kafka·消息队列·pulsar·消息中间件·流处理·高吞吐·架构选型
俊哥大数据4 天前
Flink1.20.3 实时消费 Kafka 数据并解析入湖 Paimon1.4.2 全流程实战
分布式·flink·kafka·数据湖·paimon
今年下半年5 天前
记录一次IBMS物联网项目的架构设计及技术栈应用
物联网·websocket·网络协议·tcp/ip·微服务·udp·kafka
Nano叶落11 天前
Kafka 消费积压排查入门:Docker 搭环境亲手制造一次 ‘消息堵死‘,10 分钟看懂 Lag
kafka
吉甫作诵12 天前
Kafka 集群安装与运维实战:消费组排查、Offset 重置与副本重分配
大数据·运维·分布式·kafka·消息队列
imDwAaY12 天前
消息队列四大核心问题:顺序性、幂等性、可靠性与一致性
学习·kafka·rabbitmq