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)

相关推荐
范什么特西10 小时前
关于kafka
分布式·kafka
Wang's Blog2 天前
Go-Zero 项目开发19:基于 Kafka 的异步消息存储与转发实战
golang·kafka
Devin~Y2 天前
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Redis、Kafka、Spring Security、RAG 与 MCP 全链路问答
java·redis·kafka·mybatis·spring security·spring mvc·sprint boot
java1234_小锋4 天前
【免费】基于Spark实时电商用户行为分析与预测(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
java·spark·kafka·实时电商用户行为分析与预测系统
AI人工智能+电脑小能手5 天前
【大白话说Java面试题 第194题】【08_Kafka篇】第10题:简述 Kafka 的 Rebalance 机制?
java·kafka·消费者组·rebalance·分布式消息队列
AI人工智能+电脑小能手5 天前
【大白话说Java面试题 第192题】【08_Kafka篇】第8题:死信队列是什么?延时队列是什么?
java·kafka·消息队列·死信队列·延时队列
AI人工智能+电脑小能手6 天前
【大白话说Java面试题 第190题】【08_Kafka篇】第6题:消息队列有什么作用?
java·kafka·消息队列·系统设计·分布式架构
风中凌乱6 天前
kafka新版本集群的安装与部署
分布式·kafka
abcy0712136 天前
kafka消息丢失与消息重复消费
kafka
富士康质检员张全蛋6 天前
Kafka的操作-消费的详情
分布式·kafka