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


相关推荐
渣渣盟24 分钟前
Flink流处理:多源传感器数据实时处理,基于Scala使用Flink从不同数据源(集合、文件、Kafka、自定义 Source)读取传感器数据
flink·kafka·scala
小小工匠1 小时前
架构思维:构建高并发扣减服务_分布式无主架构
分布式·架构·分布式无主架构
菠萝崽.3 小时前
Elasticsearch进阶篇-DSL
大数据·分布式·elasticsearch·搜索引擎·全文检索·jenkins·springboot
Uranus^3 小时前
深入解析Spring Boot与Kafka集成:构建高性能消息驱动应用
spring boot·kafka·消息队列·分布式系统
{⌐■_■}3 小时前
【kafka】kafka概念,使用技巧go示例
golang·kafka·linq
hong_zc4 小时前
服务端高并发分布式结构演进之路
分布式
461K.5 小时前
写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果
大数据·分布式·spark
却道天凉_好个秋13 小时前
系统架构设计(九):分布式架构与微服务
分布式·架构·系统架构
predisw17 小时前
kafka connect 大概了解
分布式·kafka
计算机毕设定制辅导-无忧学长19 小时前
RabbitMQ 快速上手:安装配置与 HelloWorld 实践(二)
分布式·rabbitmq·ruby