Helm方式部署 zookeeper+kafka 集群 ——2023.05

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: Helm方式部署 zookeeper+kafka 集群 ——2023.05

版本概况


服务 版本
centos 7.9
kubernetes v1.20.15
helm v3.10.1
zookeeper 3.8.1
kafka 3.4.0


一、添加helm仓库


# 添加bitnami和官方helm仓库:
helm repo add bitnami https://charts.bitnami.com/bitnami
# 查看仓库
helm repo list


二、安装部署集群


安装方式有两种,在线安装和离线安装,在线安装方便快捷,但是无法修改参数。由于需要修改配置,故本文采用离线安装方式。


2.1 在线安装zookeeper+kafka集群


1. 部署zookeeper集群

# 部署zookeeper集群
helm install zookeeper bitnami/zookeeper \
  --set replicaCount=3 \
  --set auth.enabled=false \
  --set allowAnonymousLogin=true
# 查看
helm list


5c5725e790984a9eb24ce4cb27444a39.png

提示:

由于这个ApacheZookeeper集群不会公开,所以在部署时禁用了身份验证。对于生产环境,请考虑使用生产配置。

生产环境参考:https://github.com/bitnami/charts/tree/main/bitnami/zookeeper#production-configuration


2. 部署kafka集群

# 部署kafka集群
helm install kafka bitnami/kafka \
  --set zookeeper.enabled=false \
  --set replicaCount=3 \
  --set externalZookeeper.servers=ZOOKEEPER-SERVICE-NAME    # ZOOKEEPER-SERVICE-NAME  替换为上一步结束时获得的Apache ZOOKEEPER服务名称


2.2 离线安装zookeeper+kafka集群

由于在线安装,zookeeper的pod起不来,一直处于pending的状态,原因是因为pvc存储卷挂载的问题,所以这里选择把zookeeper和kafka的包下载下来,修改配置文件,然后进行离线安装。

我这里将zookeeper和kafka安装在default命名空间下,如果您想按在指定namespace下,命令后加-n [namespace] 就可以了。

1. 下载离线包

# 创建存放压缩包目录
mkdir /bsm/zookeeper-kafka && cd /bsm/zookeeper-kafka
# 拉取压缩包
helm pull bitnami/zookeeper
helm pull bitnami/kafka
# 解压
tar -zvxf kafka-22.1.2.tgz
tar -zvxf zookeeper-11.4.1.tgz


8b0111009738425cb8e2dd9dea1ef5dd.png

2. 部署zookeeper集群

  • 修改配置文件values.yaml
    主要修改内容:enabled设为false ;注释掉 storageClass: “”、existingClaim: “”
cd /bsm/zookeeper-kafka/zookeeper  
vim values.yaml
# 修改配置文件,主要修改存储storageclass(kafka的配置文件类似)
persistence:
  ## @param persistence.enabled Enable ZooKeeper data persistence using PVC. If false, use emptyDir
  ##
  enabled: false    # 测试环境可设置为false
  ## @param persistence.existingClaim Name of an existing PVC to use (only when deploying a single replica)
  ##
#  existingClaim: ""
  ## @param persistence.storageClass PVC Storage Class for ZooKeeper data volume
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
  ##   GKE, AWS & OpenStack)
  ##
#  storageClass: ""      # 注释掉storageClass。如果创建好了storageclass可打开注释,并写入storageClass的名称


  • 安装zookeeper集群
# 安装zookeeper
cd  /bsm/zookeeper-kafka/zookeeper
helm install zookeeper --set replicaCount=3 --set auth.enabled=false --set allowAnonymousLogin=true ./
# ./ 表示zookeeper的value.yaml文件所在路径

b5181659a8bb4957ba4dcfdb4b409597.png

# 查看pod状态:
[root@k8s-master1 rabbitmq]# kubectl get pods
NAME                                      READY   STATUS    RESTARTS   AGE
zookeeper-0                               1/1     Running   0          85s
zookeeper-1                               1/1     Running   0          85s
zookeeper-2                               1/1     Running   0          84s

3. 安装kafka集群

  • 修改配置文件values.yaml
    主要修改内容:enabled设为false ;注释掉 storageClass: “”、existingClaim: “”;kraft.enable 修改为 false
cd /bsm/zookeeper-kafka/kafka
vim values.yaml
修改一:
persistence:
  ## @param persistence.enabled Enable Kafka data persistence using PVC, note that ZooKeeper persistence is unaffected
  ##
  enabled: false    #改为false
  ## @param persistence.existingClaim A manually managed Persistent Volume and Claim
  ## If defined, PVC must be created manually before volume will be bound
  ## The value is evaluated as a template
  ##
#  existingClaim: ""
  ## @param persistence.storageClass PVC Storage Class for Kafka data volume
  ## If defined, storageClassName: <storageClass>
  ## If set to "-", storageClassName: "", which disables dynamic provisioning
  ## If undefined (the default) or set to null, no storageClassName spec is
  ## set, choosing the default provisioner.
  ##
#  storageClass: ""
  ## @param persistence.accessModes Persistent Volume Access Modes
修改二:
  kraft:
  ## @param kraft.enabled Switch to enable or disable the Kraft mode for Kafka
  ##
  enabled: false    #改为false
  ## @param kraft.processRoles Roles of your Kafka nodes. Nodes can have 'broker', 'controller' roles or both of them.
  ##
  processRoles: broker,controller


  • 安装 kafka 集群
# 安装zookeeper
cd  /bsm/zookeeper-kafka/kafka
helm install kafka --set zookeeper.enabled=false --set replicaCount=3 --set externalZookeeper.servers=ZOOKEEPER-SERVICE-NAME ./      
# ZOOKEEPER-SERVICE-NAME  替换为上一步结束时获得的Apache ZOOKEEPER服务名称
# ./ 表示kafka的value.yaml文件所在路径

b9aff4d14583411e9113fb5798dd542f.png

# 查看:
[root@k8s-master1 kafka]# kubectl get pods 
NAME                                      READY   STATUS    RESTARTS   AGE
kafka-0                                   1/1     Running   0          3m58s
kafka-1                                   1/1     Running   0          3m58s
kafka-2                                   1/1     Running   0          3m58s

报错:

Error: INSTALLATION FAILED: execution error at (kafka/templates/NOTES.txt:314:4):

VALUES VALIDATION:

kafka: Kraft mode

You cannot use Kraft mode and Zookeeper at the same time. They are mutually exclusive. Disable zookeeper in ‘.Values.zookeeper.enabled’ and delete values from ‘.Values.externalZookeeper.servers’ if you want to use Kraft mode

原因:

新版kafka新增了一个kraft模式,他与zookeeper是冲突的,不能同时使用,所以如果使用指定的zookeeper,kraft模式要关闭。

解决办法:

修改kafka的配置文件“value.yaml”,将 kraft.enable 的值改为false


三、验证kafka与zookeeper是否绑定


查看kafka日志中有以下信息:

kubectl logs -f kafka-0  | grep socket

2a089d2adb27434597b3763738323078.png

四、测试集群


# 进入kafka的pod创建一个topic
[root@k8s-master1 kafka]# kubectl exec -it kafka-0 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
I have no name!@kafka-0:/$ kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic testtopic
heCreated topic testtopic.
# 启动一个消费者
[root@k8s-master1 ~]# kubectl exec -it kafka-0 bash
I have no name!@kafka-0:/$ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic
# 新开一个窗口,进入kafka的pod,启动一个生产者,输入消息;在消费者端可以收到消息
[root@k8s-master1 ~]# kubectl exec -it kafka-0 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
I have no name!@kafka-0:/$ kafka-console-producer.sh --bootstrap-server localhost:9092 --topic testtopic


在生产者页面输入信息,可以在消费者页面查看到。

702f3ddec06842dab7140b3e4b8bd945.png

ce0cadd8d1a54f36b627a97618a824ec.png

部署成功。


附:可改善地方


持久化存储,配置文件value.yaml中storageclass参数未设定,亲和力未设定,测试环境要求没有那么多,生产环境大家可以按需配置。


卸载应用

helm uninstall kafka -n [namespace]
helm uninstall zookeeper  -n [namespace]


参考文章:

bitnami官网:https://docs.bitnami.com/tutorials/deploy-scalable-kafka-zookeeper-cluster-kubernetes

csdn文章:https://blog.csdn.net/heian_99/article/details/114840056

相关文章
|
1月前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
88 4
|
2月前
|
消息中间件 运维 算法
Kafka 为什么要抛弃 Zookeeper?
本文探讨了Kafka为何逐步淘汰ZooKeeper。长久以来,ZooKeeper作为Kafka的核心组件,负责集群管理和协调任务。然而,随着Kafka的发展,ZooKeeper带来的复杂性增加、性能瓶颈及一致性问题日益凸显。为解决这些问题,Kafka引入了KRaft,这是一种基于Raft算法的内置元数据管理方案,不仅简化了部署流程,还提升了系统的一致性和扩展性。本文详细分析了这一转变背后的原因及其带来的优势,并展望了Kafka未来的发展方向。
192 1
|
2月前
|
消息中间件 监控 数据可视化
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
大数据-79 Kafka 集群模式 集群监控方案 JavaAPI获取集群指标 可视化监控集群方案: jconsole、Kafka Eagle
102 2
|
2天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
2天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
6天前
|
消息中间件 存储 Kafka
2024最全Kafka集群方案汇总
Apache Kafka 是一个高吞吐量、可扩展、可靠的分布式消息系统,广泛应用于数据驱动的应用场景。Kafka 支持集群架构,具备高可用性和容错性。其核心组件包括 Broker(服务器实例)、Topic(消息分类)、Partition(有序消息序列)、Producer(消息发布者)和 Consumer(消息消费者)。每个分区有 Leader 和 Follower,确保数据冗余和高可用。Kafka 2.8+ 引入了不依赖 Zookeeper 的 KRaft 协议,进一步简化了集群管理。常见的集群部署方案包括单节点和多节点集群,后者适用于生产环境以确保高可用性。
13 0
|
2月前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
96 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
1月前
|
消息中间件 存储 Prometheus
Kafka集群如何配置高可用性
Kafka集群如何配置高可用性
|
2月前
|
消息中间件 分布式计算 监控
大数据-78 Kafka 集群模式 集群的应用场景与Kafka集群的搭建 三台云服务器
大数据-78 Kafka 集群模式 集群的应用场景与Kafka集群的搭建 三台云服务器
104 6
|
3月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2

热门文章

最新文章