k8s部署Kafka集群超详细讲解

准备部署环境

Kubernetes集群信息

NAMEVERSION
k8s-masterv1.29.2
k8s-node01v1.29.2
k8s-node02v1.29.2

Kafka:3.7.1版本,apche版本
Zookeeper:3.6.3版本

准备StorageClass

# kubectl get sc 
NAME                PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-csi (default)   nfs.csi.k8s.io   Delete          Immediate           false                  51d

创建namespace

Kubectl create ns kafka

部署zookeeper集群

编写zookeeper集群部署zk.yaml文件

apiVersion: v1
kind: Service
metadata:name: zk-hsnamespace: kafkalabels:app: zk
spec:ports:- port: 2888name: server- port: 3888name: leader-election- port: 2181name: clientclusterIP: Noneselector:app: zk
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: zknamespace: kafka
spec:selector:matchLabels:app: zkserviceName: zk-hsreplicas: 3updateStrategy:type: RollingUpdatepodManagementPolicy: Paralleltemplate:metadata:labels:app: zkspec:containers:- name: zookeeperimagePullPolicy: Alawysimage: registry.cn-hangzhou.aliyuncs.com/aliyun_0612/zookeeper:3.6.3resources:requests:memory: "200Mi"cpu: "0.1"ports:- containerPort: 2181name: client- containerPort: 2888name: server- containerPort: 3888name: leader-electioncommand:- sh- -c- "start-zookeeper \--servers=3 \--data_dir=/var/lib/zookeeper/data \--data_log_dir=/var/lib/zookeeper/data/log \--conf_dir=/opt/zookeeper/conf \--client_port=2181 \--election_port=3888 \--server_port=2888 \--tick_time=2000 \--init_limit=10 \--sync_limit=5 \--heap=512M \--max_client_cnxns=60 \--snap_retain_count=3 \--purge_interval=12 \--max_session_timeout=40000 \--min_session_timeout=4000 \--log_level=INFO"readinessProbe:exec:command:- sh- -c- "zookeeper-ready 2181"initialDelaySeconds: 10timeoutSeconds: 5livenessProbe:exec:command:- sh- -c- "zookeeper-ready 2181"initialDelaySeconds: 10timeoutSeconds: 5volumeMounts:- name: datadirmountPath: /var/lib/zookeepersecurityContext:runAsUser: 0fsGroup: 0volumeClaimTemplates:- metadata:name: datadirspec:accessModes: [ "ReadWriteMany" ]storageClassName: nfs-csiresources:requests:storage: 2Gi

kafka集群部署kafka.yaml文件

---
apiVersion: v1
kind: Service
metadata:name: kafka-svcnamespace: kafkalabels:app: kafka
spec:ports:- port: 9092name: serverclusterIP: Noneselector:app: kafka
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: kafkanamespace: kafka
spec:selector:matchLabels:app: kafkaserviceName: kafka-svcreplicas: 3template:metadata:labels:app: kafkaspec:containers:- name: k8s-kafkaimagePullPolicy: Always image: registry.cn-hangzhou.aliyuncs.com/aliyun_0612/kafka:3.7.1resources:requests:memory: "600Mi"cpu: 500mports:- containerPort: 9092name: servercommand:- sh- -c- "exec /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties --override broker.id=${HOSTNAME##*-} \--override listeners=PLAINTEXT://:9092 \--override zookeeper.connect=zk-hs.kafka.svc.cluster.local:2181 \--override log.dir=/var/lib/kafka \--override auto.create.topics.enable=true \--override auto.leader.rebalance.enable=true \--override background.threads=10 \--override compression.type=producer \--override delete.topic.enable=false \--override leader.imbalance.check.interval.seconds=300 \--override leader.imbalance.per.broker.percentage=10 \--override log.flush.interval.messages=9223372036854775807 \--override log.flush.offset.checkpoint.interval.ms=60000 \--override log.flush.scheduler.interval.ms=9223372036854775807 \--override log.retention.bytes=-1 \--override log.retention.hours=168 \--override log.roll.hours=168 \--override log.roll.jitter.hours=0 \--override log.segment.bytes=1073741824 \--override log.segment.delete.delay.ms=60000 \--override message.max.bytes=1000012 \--override min.insync.replicas=1 \--override num.io.threads=8 \--override num.network.threads=3 \--override num.recovery.threads.per.data.dir=1 \--override num.replica.fetchers=1 \--override offset.metadata.max.bytes=4096 \--override offsets.commit.required.acks=-1 \--override offsets.commit.timeout.ms=5000 \--override offsets.load.buffer.size=5242880 \--override offsets.retention.check.interval.ms=600000 \--override offsets.retention.minutes=1440 \--override offsets.topic.compression.codec=0 \--override offsets.topic.num.partitions=50 \--override offsets.topic.replication.factor=3 \--override offsets.topic.segment.bytes=104857600 \--override queued.max.requests=500 \--override quota.consumer.default=9223372036854775807 \--override quota.producer.default=9223372036854775807 \--override replica.fetch.min.bytes=1 \--override replica.fetch.wait.max.ms=500 \--override replica.high.watermark.checkpoint.interval.ms=5000 \--override replica.lag.time.max.ms=10000 \--override replica.socket.receive.buffer.bytes=65536 \--override replica.socket.timeout.ms=30000 \--override request.timeout.ms=30000 \--override socket.receive.buffer.bytes=102400 \--override socket.request.max.bytes=104857600 \--override socket.send.buffer.bytes=102400 \--override unclean.leader.election.enable=true \--override zookeeper.session.timeout.ms=6000 \--override zookeeper.set.acl=false \--override broker.id.generation.enable=true \--override connections.max.idle.ms=600000 \--override controlled.shutdown.enable=true \--override controlled.shutdown.max.retries=3 \--override controlled.shutdown.retry.backoff.ms=5000 \--override controller.socket.timeout.ms=30000 \--override default.replication.factor=1 \--override fetch.purgatory.purge.interval.requests=1000 \--override group.max.session.timeout.ms=300000 \--override group.min.session.timeout.ms=6000 \--override inter.broker.protocol.version=2.2.0 \--override log.cleaner.backoff.ms=15000 \--override log.cleaner.dedupe.buffer.size=134217728 \--override log.cleaner.delete.retention.ms=86400000 \--override log.cleaner.enable=true \--override log.cleaner.io.buffer.load.factor=0.9 \--override log.cleaner.io.buffer.size=524288 \--override log.cleaner.io.max.bytes.per.second=1.7976931348623157E308 \--override log.cleaner.min.cleanable.ratio=0.5 \--override log.cleaner.min.compaction.lag.ms=0 \--override log.cleaner.threads=1 \--override log.cleanup.policy=delete \--override log.index.interval.bytes=4096 \--override log.index.size.max.bytes=10485760 \--override log.message.timestamp.difference.max.ms=9223372036854775807 \--override log.message.timestamp.type=CreateTime \--override log.preallocate=false \--override log.retention.check.interval.ms=300000 \--override max.connections.per.ip=2147483647 \--override num.partitions=3 \--override producer.purgatory.purge.interval.requests=1000 \--override replica.fetch.backoff.ms=1000 \--override replica.fetch.max.bytes=1048576 \--override replica.fetch.response.max.bytes=10485760 \--override reserved.broker.max.id=1000 "env:- name: KAFKA_HEAP_OPTSvalue : "-Xmx512M -Xms512M"- name: KAFKA_OPTSvalue: "-Dlogging.level=INFO"volumeMounts:- name: datadirmountPath: /var/lib/kafkareadinessProbe:tcpSocket:port: 9092timeoutSeconds: 1initialDelaySeconds: 5securityContext:runAsUser: 1000fsGroup: 1000volumeClaimTemplates:- metadata:name: datadirspec:accessModes: [ "ReadWriteMany" ]storageClassName: nfs-csiresources:requests:storage: 10Gi

部署集群

部署集群

[root@k8s-master ~]# kubectl apply -f zk.yaml
[root@k8s-master ~]# kubectl apply -f kafka.yaml

检查状态
在这里插入图片描述
出现启动失败情况,解决不了可以下方评论,专业大神会提供解决方案

验证zk集群

进入zk pod中,查看zk集群是否正常

[root@k8s-master test]# kubectl exec -it -nkafka zk-0 bash

在这里插入图片描述
使用

[root@k8s-master test]# zkCli.sh

在这里插入图片描述
查看kafka brokers
在这里插入图片描述
通过验证,zk集群正常

验证Kafka集群

进入kafka pod节点中

[root@k8s-master ~]# kubectl exec -it -nkafka kafka-0 bash

在这里插入图片描述
创建测试topic

/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic mytopic --replication-factor 3 --partitions 3

这里要使用绝对路径
在这里插入图片描述
使用describe 查看topic分区数以及副本数正常

/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic mytopic

这里要使用绝对路径
在这里插入图片描述
至此,kafka集群在kubernetes上部署已经完成。
有什么问题可以下方评论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/57412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

股价创52周新高,云顶新耀成为“黑马”的启示录

踏入2024年以来,创新药产业持续释放积极信号。今年本土创新药出海交易额已超200亿美元,最近医保续约和谈判也有望促进国内创新药长期放量。 市场预期转好之下,生物医药板块在新一轮牛市中进入了估值修复的阶段。HSHKBIO(恒生香港…

【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)

零.前置篇章 本篇前置文章为【LVGL快速入门(一)】LVGL开源框架入门教程之框架移植 一.UI设计 介绍使用之前,我们要学习一款LVGL官方的UI设计工具SquareLine Studio,使用图形化设计方式设计出我们想要的界面,然后生成对应源文件导入工程使用…

openssh openssl zlib 升级至最新版解决安全问题

openssl依赖于zlib, openssh依赖于openssl和zlib, 所以我们要先安装zlib,然后是openssl,最后是openssh。 各软件下载地址: zlib 地址: zlib Home Site openssl 地址: Downloads | Library…

C#从零开始学习(接口,强制转化和is)(7)

有时根据对象能做什么来分组,而不是根据他们继承的类.这就引入了接口 让无关的类做相同的动作 接口定义一个类必须实现的方法和属性 一个类实现一个接口时,必须包含接口中列出的所有方法和属性 向下强制转化 Appliance是CoffeeMaker的基类 Appliance powerConsumer new Co…

时空智友企业流程化管控系统uploadStudioFile接口存在任意文件上传漏洞

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 时空智友…

【密码分析学 笔记】ch3 3.1 差分分析

ch3 分组密码的差分分析和相关分析方法 3.1 差分分析 评估分组密码安全性通用方法可用于杂凑函数和流密码安全性 预备知识: 迭代性分组密码(分组密码一般结构)简化版本 mini-AES CipherFour算法 3.1.1 差分分析原理 现象:密…

JMeter使用不同方式传递接口参数

1、使用 HTTP 请求中的参数: 在 JMeter 的测试计划中,添加一个 "HTTP 请求" 元件。 在 "HTTP 请求" 元件的参数化选项中,可以添加参数的名称和值。可以手动输入参数,也可以使用变量来传递参数值。 如果要使…

汇川机器人与PLC通信-ModbusTCP超详细案例

#SCARA机器人与H5UPLC通过ModbusTCP通信,HMI界面手动操作# 应用背景: 本项目案例部分软件界面已被更新,如机器人示教软件旧版本S01.19R03。但通信的原理基本一致,废话少说,我们直接上图。 一、PLC端配置 1.添加ROB通讯表(自定义),变量表内容包括ROB系统变量,IN区和…

【利用Seaborn进行高级数据可视化】创建美观且信息丰富的图表!

利用Seaborn进行高级数据可视化:创建美观且信息丰富的图表 数据可视化是数据分析和科学研究中不可或缺的部分。通过有效的图表,我们可以迅速了解数据的分布、趋势和关系。在Python的数据科学生态系统中,Seaborn是一个基于Matplotlib的高级库…

大厂面试真题-了解云原生吗,简单说一下docker和k8s

K8s(Kubernetes)和Docker都是容器化技术中的关键组件,但它们各自扮演着不同的角色。以下是对这两者的详细解析: 一、Docker Docker是一个开源的容器化平台,它允许开发人员将应用程序及其依赖项打包为一个独立的镜像&…

条款8 优先考虑nullptr而非0和NULL

目录 一、nullptr,0,NULL都是什么类型 二、正确调用函数指针版本的函数重载 三、模板推导时使用不能混用 一、nullptr,0,NULL都是什么类型 auto a = 0; -> int auto a = NULL; -> long auto a = nullptr; -> std::nullptr_t 二、正确调用函数…

Notepad++将搜索内容所在行选中,并进行复制等操作

背景 Notepad在非常多的数据行内容中,按照指定内容检索,并定位到具体行,而后对内容行的数据进行复制、剪切、删除等处理动作。 操作说明 检索并标记所在行 弹出搜索框:按下 Ctrl F。 输入查找字符串:在搜索框中输入要…

Cursor零基础小白教程系列「进阶」 - Cursor 智能代码补全详解(Tab)

最适合小白零基础的Cursor教程 网站lookai.top相同作者,最新文章会在网站更新,欢迎收藏书签 Cursor 智能代码补全详解(Tab) 概述 Cursor的智能代码补全,也就是快捷键Tab,是其最强大和独特的AI辅助编程工具之一。本教程将详细介绍…

“避免序列化灾难:掌握实现 Serializable 的真相!(二)”

文章目录 一、什么是序列化?二、Serializable 是如何起作用的?三、为什么不自动序列化所有对象?四、Java 序列化的底层原理序列化的核心步骤: 五、反序列化的原理六、总结:为什么必须实现 Serializable 才能序列化&…

最好的ppt模板网站是哪个?做PPT不可错过的18个网站!

现在有很多PPT模板网站,但真正免费且高质量的不多,今天我就分享主流的国内外PPT模板下载网站,并且会详细分析这些网站的优缺点,这些网站都是基于个人实际使用经验的,免费站点会特别标注,让你可以放心下载&a…

【Jmeter】jmeter指定jdk版本启动

背景: 因权限问题,不能修改操作系统的环境变量或者因jmeter启动加载的默认jdk8版本低,需要指定jdk XX版本启动Jmeter 解决办法: 进入jmeter bin目录选择jmeter.bat,记事本编辑jmeter.bat, 在最前面添加 set MINIMAL_…

go 中的斐波那契数实现以及效率比较

package mainimport ("fmt""math/big""time" )// FibonacciRecursive 使用递归方法计算斐波那契数列的第n个数 func FibonacciRecursive(n int) *big.Int {if n < 1 {return big.NewInt(int64(n))}return new(big.Int).Add(FibonacciRecursiv…

抗肺癌市场迎新突破,十款创新药物获批!

在肺癌治疗领域&#xff0c;近年来取得了令人瞩目的进展。随着科学技术的不断进步和临床研究的深入&#xff0c;多款创新肺癌药物相继获批上市&#xff0c;为患者带来了前所未有的治疗选择和希望。本文将详细介绍十款最新获批的肺癌创新药物&#xff0c;探讨它们的特点、适应症…

Leetcode 1135. 最低成本连通所有城市

1.题目基本信息 1.1.题目描述 想象一下你是个城市基建规划者&#xff0c;地图上有 n 座城市&#xff0c;它们按以 1 到 n 的次序编号。 给你整数 n 和一个数组 conections&#xff0c;其中 connections[i] [x_i, y_i, cost_i] 表示将城市 x_i 和城市 y_i 连接所要的cost_i&…

Stable Diffusion Web UI 大白话术语解释 (二)

归纳整理&#xff0c;Stable Diffusion Web UI 使用过程中&#xff0c;相关术语 ControlNet ControlNet 说简单点&#xff0c;就是你可以给 AI 一些“规则”&#xff0c;比如让它根据某些线条、结构或者骨架去画图。 这样能让 AI 画出更符合你要求的图片&#xff0c;特别适合画…