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)

相关推荐
AutoMQ6 分钟前
360 如何用 AutoMQ 解决千亿级 Kafka 冷读难题
kafka·消息队列·云计算
半桶水专家1 小时前
Kafka Topic 管理命令 kafka-topics.sh 详解
分布式·kafka
FlyChat1 小时前
从零到亿:拆解“智搜搜索”工业化引擎——PHP如何驯服ElasticSearch、Kafka与多语言爬虫巨兽
elasticsearch·kafka·php
ClouGence1 小时前
数据迁移同步工具 CloudCanal-v5.5.0.0 发布,支持 RETL(定时扫描同步)
数据库·mysql·postgresql·oracle·sqlserver·kafka·etl
万琛1 小时前
【Flink_CEP】MySQL 动态规则 + Kafka 实时流 + Flink CEP 后缀收集的实战方案
mysql·flink·kafka
丸辣,我代码炸了2 小时前
如何手搓序列化器(以java为例)
java·开发语言·kafka
霸道流氓气质2 小时前
Springboot集成Kafka入门流程及示例代码
spring boot·kafka
qq_40999093?2 天前
消息中间件:RabbitMQ、RocketMQ、Kafka快速上手
kafka·rabbitmq·rocketmq
yzx9910132 天前
实时数据处理实战:使用 Apache Flink 消费 Kafka 数据并进行窗口聚合
flink·kafka·apache