14.Kafka系列之K8S部署集群

news2024/11/27 16:36:02

1. 部署方式选择

基于Kafka3.X后的集群搭建方式主要分为两种,一种是基于Zookeeper管理方式,一种是基于KRaft模式,本文主要介绍Kafka-KRaft集群模式搭建

纠正文章1.Kafka系列之K8S部署单节点中基于Zookeeper方式的部署方式错误,其实是基于KRaft启动的,所以不部署Zookeeper也可以,可以通过把连接ZK的环境去掉看是否可以启动成功验证

2.KRaft模式介绍

Apache Kafka 不依赖 Apache Zookeeper的版本,被社区称之为 Kafka Raft 元数据模式,简称KRaft模式。

KRaft运行模式的Kafka集群,不会将元数据存储在 Apache ZooKeeper中。即部署新集群的时候,无需部署ZooKeeper集群,因为Kafka将元数据存储在 Controller 节点的 KRaft Quorum中。KRaft可以带来很多好处,比如可以支持更多的分区,更快速的切换Controller,也可以避免Controller缓存的元数据和Zookeeper存储的数据不一致带来的一系列问题

3. 编写install.sh

我们基于Helm进行安装,在此不在讲解Helm安装方式

helm repo add bitnami https://charts.bitnami.com/bitnami
# 指定命名空间为middleware,如果卸载后再次安装,install改为upgrade
helm install kafka bitnami/kafka --namespace middleware
    --set kafkaVersion=3.4.0
    --set replicaCount=3
    --set kafka.persistence.enabled=false
    --set kafka.kafkaConfigOverrides=transaction.state.log.replication.factor=3
    --set kafka.kafkaConfigOverrides=transaction.state.log.min.isr=2
    --set kafka.kafkaConfigOverrides=default.replication.factor=3
    --set kafka.kafkaConfigOverrides=num.io.threads=8
    --set kafka.kafkaConfigOverrides=num.network.threads=3
    --set kafka.kafkaConfigOverrides=log.message.format.version=3.4
    --set kafka.kafkaConfigOverrides=inter.broker.protocol.version=3.4
    --set kafka.kafkaConfigOverrides=offsets.topic.replication.factor=3
    --set kafka.kafkaConfigOverrides=transaction.state.log.num.partitions=50
    --set-string labels.app.kubernetes.io/managed-by=Helm
    --set-string labels.meta.helm.sh/release-name=kafka
    --set-string labels.meta.helm.sh/release-namespace=middleware

打印日志

space=middleware
NAME: kafka
LAST DEPLOYED: Sun May 21 13:56:26 2023
NAMESPACE: middleware
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: kafka
CHART VERSION: 22.1.2
APP VERSION: 3.4.0

** Please be patient while the chart is being deployed **

Kafka can be accessed by consumers via port 9092 on the following DNS name from within your cluster:

    kafka.middleware.svc.cluster.local

Each Kafka broker can be accessed by producers via port 9092 on the following DNS name(s) from within your cluster:

    kafka-0.kafka-headless.middleware.svc.cluster.local:9092
    kafka-1.kafka-headless.middleware.svc.cluster.local:9092
    kafka-2.kafka-headless.middleware.svc.cluster.local:9092

To create a pod that you can use as a Kafka client run the following commands:

    kubectl run kafka-client --restart='Never' --image docker.io/bitnami/kafka:3.4.0-debian-11-r28 --namespace middleware --command -- sleep infinity
    kubectl exec --tty -i kafka-client --namespace middleware -- bash

    PRODUCER:
        kafka-console-producer.sh \
            --broker-list kafka-0.kafka-headless.middleware.svc.cluster.local:9092,kafka-1.kafka-headless.middleware.svc.cluster.local:9092,kafka-2.kafka-headless.middleware.svc.cluster.local:9092 \
            --topic test

    CONSUMER:
        kafka-console-consumer.sh \
            --bootstrap-server kafka.middleware.svc.cluster.local:9092 \
            --topic test \
            --from-beginning

4. 验证生产者与消费者

安装打印日志的提示,我们发送 算法小生 消息至test主题,并进行消费,OK

5. 节点部分失败模拟

我们手工删除kafka01,由于是Statefulsets部署方式:和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同的是, StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID。这些 Pod 是基于相同的规约来创建的, 但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID

所在再次进行消费的时候,还可以看到 算法小生 仍然正常消费

6. 安装卸载uninstall.sh

#!/bin/bash

set -e

# 定义变量
NAMESPACE="middleware"
RELEASE_NAME="kafka"

# 删除Kafka实例
helm delete "$RELEASE_NAME" --namespace "$NAMESPACE"

# 等待Kafka实例完全删除
echo "等待Kafka实例删除..."
while kubectl get statefulsets -n "$NAMESPACE" | grep "$RELEASE_NAME"; do
  echo "等待Kafka实例删除..."
  sleep 5
done

echo "卸载完成"

注意:当我们执行install.sh后,再次执行消费test主题,也可以看到 算法小生 输出,这个证明了Statefulsets在删除后,不会删除持久卷,即数据不会被删除

欢迎关注公众号算法小生

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

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

相关文章

Godot引擎 4.0 文档 - 入门介绍 - Godot设计理念

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Godots design philosophy — Godot Engine (stable) documentation in English Godot设计理念 既然你已经了解了,让我们来谈谈 Godot 的设计。 每个游戏…

(转载)MATLAB智能算法30个案例分析(1)——遗传算法工具箱

以下内容大部分来源于《MATLAB智能算法30个案例分析》,仅为学习交流所用。 1理论基础 1.1遗传算法概述 遗传算法(genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代…

第11届蓝桥杯Scratch选拔赛真题集锦

目录 一、编程题 第11届蓝桥杯Scratch选拔赛真题集锦 一、编程题 第 1 题 问答题 马克思的手稿 题目说明 背景信息: 马克思手稿中有一道趣味数学问题: 有30个人,其中有男人、女人和小孩。在一家饭馆吃饭共花了50先令;每个男人花了3先令,每个女人花了…

draw.io如何绘制带箭头的弧线

好长时间没有写draw.io相关的技巧了。今天再补充一个小技巧。 如何绘制像下图中蓝色的带箭头的弧线? 本来以为这个问题应该很简单,但是在仔细研究了很久之后我发现这个问题并没有想像得那么容易。 众所周知,draw.io中带箭头的线叫作“connect…

软件工程 | 期末复习习题

一、软件工程概述 1、选择 软件有无可行性和不可控性 软件工程是一门工程性学科 软件生存周期常见模型:螺旋模型、增量模型、瀑布模型、原型模型、融合模型、快速应用开发模型、敏捷模型 软件生存周期中时间最长的阶段是维护阶段 瀑布模型是一种软件生存周期模…

微搭低代码实现aad的sso

微搭低代码平台是一种可帮助您快速构建和部署应用程序的工具,而无需手动编写大量代码。要在微搭低代码平台上实现Azure Active Directory(AAD)的单点登录(SSO),您需要遵循以下步骤: 注册Azure …

SpringBoot整合Mybatis(3000字)

SpringBoot整合Mybatis 文章目录 SpringBoot整合Mybatis依赖导入配置信息(application.yml)代码分层数据库(建库建表语句)各层代码enity:dao:service:controller: 测试 Mybatis分页查询和模糊查询分页查询:测试: 模糊查询:测试: Mybatis的分布查询多对一:测试:一对多: Mybatis的…

邮箱营销不再难:如何提高邮件的到达率和打开率?

在数字时代,电子邮件是企业与客户以及潜在客户沟通的重要渠道,是企业培养客户的有效方式之一。然而,由于每个人每天也要收到大量的垃圾邮件,所以企业必须确保在正确的时间将邮件传递给正确的人。在这篇文章中,小编将探…

BEVDet 论文学习

1. 解决了什么问题? 自动驾驶系统感知周围的环境再进行决策,极具挑战。基于视觉的自动驾驶系统对准确性和效率的要求很严格,人们会采用不同的范式来解决 3D 检测和分割任务。对于多相机 3D 目标检测,image-view-based 方法如 FCO…

缓存更新策略

缓存更新策略 内存淘汰超时剔除主动更新说明利用Redis的内存淘汰机制,不用自己维护,当内存不足时会自动淘汰部分数据。下次查询时更新缓存。给缓存数据添加TTL(过期时间),到期后自动删除缓存。下次查询时更新缓存。编写业务逻辑,…

CSAPP Lab4- PerfLab

代码优化 typedef struct { unsigned short red; /* R value */ unsigned short green; /* G value */ unsigned short blue; /* B value */ } pixel图像用一维数组表示,第(i,j)个像素表示为I[RIDX(i,j,n)],n为图像的维数 #def…

Datacom-HCIE 02(10月26日更新)--含解析

单选题 1.[试题编号:189785] (单选题)如图所示,VTEP1上在BD20域内开启了ARP广播抑制功能,并且VTEP1通过 BGP EVPN路由学习到了PC2的ARP信息,则PC1发送的针对PC2的ARP请求,VIEP1在转发给VIEP2时…

sqli-labs Less-11,12

less-11(基于错误的POST型单引号字符型注入) sqlmap 1.使用bp抓包 2.保存为1.txt在本地,使用sqlmap查询数据库 sqlmap.py -r "C:\Users\wy199\Desktop\1.txt" --dbs 3.查询当前数据库的所有表 sqlmap.py -r "C:\Users\wy199\Desktop\1.txt"…

正点原子ALPHA开发板核心资源分析

目录 正点原子ALPHA开发板核心资源分析I.MX6ULL实物图对比SOC 主控芯片(MCIMX6Y2CVM08AB)NAND FLASHEMMCDDR3L 正点原子ALPHA开发板核心资源分析 I.MX6ULL实物图对比 I.MX6ULL NAND BTB 接口核心板资源图与 I.MX6ULL EMMC BTB 接口核心板资源图如上图&a…

安装ElasticSearch之前的准备工作jdk的安装

一.windows 下载jdk的软件 (1).进入jdk1.8官网 (2).根据电脑是32位还是64位按需下载 (3).点击下载之后就会跳转到Oracle账号登录界面 没有 Oracle账号的注册一下就可以了 下载好的jdk如下: 双击下一步下一步安装jdk 默认安装就可以了 配置环境变量 (1).电脑左下方设置选项 (2).…

UFT软件的安装与注意事项

安装包下载 UFT软件的安装包网上也有许多,这里我分享下我使用的--->UFT安装包 下载完成解压后进行安装。 要注意关闭杀毒软件,否则安装过程中某些组件可能会安装不上。 部分电脑在安装过程中出现以下提示,可以点击确定 然后我们查看桌面上…

学习open62541 --- [77] 修改String类型变量的注意点

对于String类型的节点,其值的类型是UA_String,在这篇文章中我们解释了UA_String的生成方法。 当我们修改String类型节点的值时,会事先准备一个UA_String变量,这时就会遇到一个选择:是否需要动态分配内存,即…

一种基于数值的横向相互作用

( A, B )---144*30*2---( 1, 0 )( 0, 1 ) 让网络的输入有144个节点,训练集AB各由12张二值化的图片组成,让A中每行有1个1,B中全是0,排列组合A ,统计迭代次数的顺序。 前面实验已经表明对于A中每行只有1个1,…

虚幻or现实?堆区、栈区真实存在吗?是操作系统在骗你罢了...

文章目录 💐专栏导读💐文章导读🐧引例 🐦进程地址空间🐦虚拟地址与物理内存的联系🔔回答引例中的问题🔓写时拷贝 🐦虚拟地址存在的意义🔓malloc的本质 💐专栏…

Lift, Splat, Shoot 论文学习

1. 解决了什么问题? LSS 在工业界具有非常重要的地位。自从 Tesla AI Day 上提出了 BEV 感知后,不少公司都进行了 BEV 工程化的探索。当前 BEV 下的感知方法大致分为两类: 自下而上:利用 transformer 的 query 机制,…