Kafka集群部署 (KRaft模式集群)

KRaft 模式是 Kafka 在 3.0 版本中引入的新模式。KRaft 模式使用了 Raft 共识算法来管理 Kafka 集群元数据。Raft 算法是一种分布式共识算法,具有高可用性、可扩展性和安全性等优势。
在 KRaft 模式下,Kafka 集群中的每个 Broker 都具有和 Zookeeper 类似的角色。每个 Broker 都参与管理 Kafka 集群元数据,包括分区分配、副本分配、元数据快照等。

Zookeeper 模式和KRaft 模式 对比

特性 KRaft 模式 Zookeeper 模式
使用共识算法 Raft Zookeeper
可用性
扩展性
安全性
复杂度

KRaft 模式的优势

KRaft 模式具有以下优势:
  • 更简单:KRaft 模式将 Kafka 集群元数据管理整合到了 Kafka 中,因此不需要使用外部服务,这使得 Kafka 集群的部署和管理更加简单。
    更高效:KRaft 模式使用了 Raft 算法来管理 Kafka 集群元数据,Raft 算法具有更高的效率,因此 Kafka 集群的性能可以得到提升。
    更可靠:KRaft 模式使用了 Raft 算法来管理 Kafka 集群元数据,Raft 算法具有更高的可靠性,因此 Kafka 集群的稳定性可以得到提升。

helm安装

js 复制代码
helm repo add bitnami https://charts.bitnami.com/bitnami
helm pull  bitnami/kafka --untar
js 复制代码
helm install kafka kafka --values ./kafka/values.yaml  \
    --set replicaCount=1 \
    --set kafka.kafkaConfigOverrides=transaction.state.log.replication.factor=1 \
    --set kafka.kafkaConfigOverrides=transaction.state.log.min.isr=1 \
    --set kafka.kafkaConfigOverrides=default.replication.factor=1 \
    --set kafka.kafkaConfigOverrides=num.io.threads=2 \
    --set kafka.kafkaConfigOverrides=num.network.threads=2 \
    --set kafka.kafkaConfigOverrides=inter.broker.protocol.version=3.5.1 \
    --set kafka.kafkaConfigOverrides=offsets.topic.replication.factor=1 \
    --set kafka.kafkaConfigOverrides=transaction.state.log.num.partitions=50

最后得到

js 复制代码
    kafka-controller-0.kafka-controller-headless.openim-dev.svc.cluster.local:9092
    kafka-controller-1.kafka-controller-headless.openim-dev.svc.cluster.local:9092
    kafka-controller-2.kafka-controller-headless.openim-dev.svc.cluster.local:9092

The CLIENT listener for Kafka client connections from within your cluster have been configured with the following security settings:
    - SASL authentication

To connect a client to your Kafka, you need to create the 'client.properties' configuration files with the content below:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
    username="user1" \
    password="$(kubectl get secret kafka-user-passwords --namespace openim-dev -o jsonpath='{.data.client-passwords}' | base64 -d | cut -d , -f 1)";

在安装一个kafka-web

js 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-ui
  labels:
    app: kafka-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka-ui
  template:
    metadata:
      labels:
        app: kafka-ui
    spec:
      containers:
      - name: kafka-ui
        image: provectuslabs/kafka-ui:latest
        env:
        - name: KAFKA_CLUSTERS_0_NAME
          value: '可以自定义名字 Kafka Cluster'
        - name: KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS
          value: 'kafka-controller-0:9092,kafka-controller-1:9092,kafka-controller-2:9092'
        - name: KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL
          value: 'SASL_PLAINTEXT'
        - name: KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM
          value: 'PLAIN'
        - name: KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG
          value: 'org.apache.kafka.common.security.plain.PlainLoginModule required username="user1" password="19fJTxgwnD";'
        resources:
          requests:
            memory: "256Mi"
            cpu: "100m"
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: kafka-ui
spec:
  selector:
    app: kafka-ui
  type: NodePort
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080


相关推荐
初次攀爬者15 小时前
Kafka + KRaft模式架构基础介绍
后端·kafka
初次攀爬者15 小时前
Kafka + ZooKeeper架构基础介绍
后端·zookeeper·kafka
初次攀爬者16 小时前
Kafka 基础介绍
spring boot·kafka·消息队列
DemonAvenger5 天前
Kafka性能调优:从参数配置到硬件选择的全方位指南
性能优化·kafka·消息队列
初次攀爬者5 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
yumgpkpm6 天前
AI视频生成:Wan 2.2(阿里通义万相)在华为昇腾下的部署?
人工智能·hadoop·elasticsearch·zookeeper·flink·kafka·cloudera
予枫的编程笔记6 天前
【Kafka高级篇】避开Kafka原生重试坑,Java业务端自建DLQ体系,让消息不丢失、不积压
java·kafka·死信队列·消息中间件·消息重试·dlq·java业务开发
倚肆6 天前
在 Windows Docker 中安装 Kafka 并映射 Windows 端口
docker·kafka
断手当码农6 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式