三、Kafka集群

一、Kafka集群的概念

1、目的

高并发、高可用、动态扩展。

主备数据架构、双活节点、灾备数据中心。

如果是服务的地理范围过大也可以使不同的集群节点服务不同的区域,降低网络延迟。

2、Kafka集群的基本概念

1)复制(镜像)

kafka的分区数据支持复制操作。

2)天生的集群功能

搭建集群的能力使Kafka在消息中间件市场上有很强的竞争力。

Kafka天生支持分布式、集群、动态扩容。

RocketMQ和Kafka比较相似,在Kafka的功能基础上做了一些增强。

二、搭建Kafka集群

1、修改配置文件参数

配置文件名称:config/server.properties 

broker.id=0

kafka broker 在集群中的唯一标识,每一个broker节点的id都不同。 

由于所有kafka节点都注册到了相同的ZooKeeper集群中,所以需要一个唯一标识做区分。

listeners=PLAINTEXT://127.0.0.1:9092       

配置为本机的IP地址

zookeeper.connect=127.0.0.1:2181

配置ZooKeeper的连接地址,所有kafka节点都配置相同的ZooKeeper集群。

如果ZooKeeper有多个节点,那么就需要配置多个ZooKeeper地址。

2、启动ZooKeeper

启动一台kafka自带的ZooKeeper。

nohup ./zookeeper-server-start.sh ../config/zookeeper.properties -> zk.log &

3、启动Kafka

nohup ./kafka-server-start.sh ../config/server.properties -> kafka.log & 

4、集群的结构

三、Kafka集群的特点

1、集群创建主题

./kafka-topics.sh --bootstrap-server 127.0.0.1:9020 --create --topic allwe_1 --partitions 2 --replication-factor 2

./kafka-topics.sh                                    // 创建主题脚本

--bootstrap-server 127.0.0.1:9020        // 指定连接的Kafka节点,实际上连接的是集群

--create --topic allwe_1                         // 指定要创建的主题名称

--partitions 2                                         // 指定分区数,这里是2个分区 

--replication-factor 2                             // 指定复制因子,表示每个分区复制几份,一般有几台kafka节点就设置为几,如果超过就会让相同的分区分布在同一台kafka节点上,没什么实际作用。

2、集群创建的主题结构

可以看到,在每一个kafka节点中,保存的数据都是一样的,在相同主题中,每一个分区都有几个备份(复制体),并且是一主多从的结构。

但是,每一个分区的首领副本分布的位置却不同,有的在broker 1上,有的在broker 2上,这是因为kafka自动将分区的首领副本做了离散操作,避免一台kafka掉线影响过大。

3、控制器

控制器的本质:

在启动kafka集群的时候,会选择一个控制器,本质就是一个broker节点。

在集群中所有broker指向的控制器是同一个,可以看到图片里选择的控制器就是broker.id=0。

控制器的作用:

1、被选择为控制器的broker不但需要做broker的工作,还要做【首领副本】的选举工作。

4、首领副本(Leader)

首领副本的本质:

首领的本质是一个数据副本。

在集群中创建主题的时候,针对一个主题的不同分区,会选举一个首领副本,每个分区只有一个首领副本。

相同主题不同分区的首领副本一般会岔开分布到不同的broker,这样就能维持高可用。

客户端在生产、消费消息的时候,只会和首领副本交互,跟随者副本仅仅是复制首领副本的数据。这一点类似Redis的主从架构。

5、跟随者副本(Follower)

跟随者副本的数量被参数--replication-factor(复制因子)决定,replication-factor减去 1 (首领副本的数量)就是跟随者副本的数量。

跟随者副本不会与客户端做交互,只是额外保存了一份首领副本的数据。如果首领副本所在的broker掉线,跟随者副本才有可能会转正为首领副本与外界交互。

6、查询Topic的详细信息

./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --describe

主题信息

Topic:laoli                        // 主题名称

TopicId:                           // 主题ID 

PartitionCount:2              // 主题分区数

RepliocationFactor:2      // 主题复制因子 - 每一个分区复制的份数

分区信息

Topic:laoli                         // 所属主题名称

Partition:0                         // 分区序号

Leader:0                           // 此分区的Leader副本存储在哪个broker上,这里的broker_id=0

Replicas:0,1                     // 分区副本保存在哪些broker上

Isr:0,1                               // 

如果一个kafka集群有2个broker,创建一个3分区的主题,复制因子为1,那么主题的分区副本如何分布?

由于每一个分区只有一个Leader副本,那么就要看这三个Lader副本分别分布在哪个Broker上。

四、Kafka集群处理请求的内部机制

1、连接kafka集群中的哪一台?

在kafka客户端中,连接任意一台kafka服务器都可以实现消息的发送、消费。

比如生产者连接的是服务器A,消费者连接的是服务器B,也是可以正常工作的。

2、消息生产的ACKS

1)生产者角度

发送确认的ACK机制,用来表示发出去一条消息后,生产者需要接收到多少条发送成功的确认回复才认为发送成功。

ACKS = 0:默认配置下,生产者发送消息的ACKS数量为0,表示只要发送出去了,就认为发送成功了。

ACKS = 3:表示需要有最少三个分区副本收到该消息,且返回了成功的回复后,才认为发送成功了。

ACKS = all / -1:表示需要所有的分区副本都回复成功。(数量=min.insync.replicas参数配置的数值,默认=3)

2)消费者角度

站在消费者的角度,只有生产者消息确认数达到ACKS,消费者才能接收这条消息。

如果追求性能:min.insync.replicas = 1。leader同步成功了就返回成功。但是如果leader宕机必然会丢失数据。

如果追求数据安全:min.insync.replicas = 副本数。如果出现任意一台broker掉线,那么发送消息返回失败。

如果追求均衡:min.insync.replicas = 中间数。实际上broker掉线是一个小概率事件,多台broker掉线的概率更小,所以没必要配置很大的ACKS。

Kafka以权衡的方式配置ACKS的数值。

数值越大,消息丢失概率小,消费者接收数据越慢。

数值越小,消息丢失概率大,消费者接收数据越快。

3)消费者客户端的重要参数

group.id :消费者所加入的消费者群组id。

auto.offset.reset:首次消费的偏移量,earliest-最早的偏移量,latest-最近的偏移量。

enable.auto.commit:true-自动提交(默认),false-手动提交(.commitAsync()-异步提交不重试;.commitSync()-同步提交一直重试)。

auto.commit.interval.ms:自动提交的间隔时间,默认5000ms。

3、消息获取的ISR

五、Kafka的存储机制

kafka的最小存储单元是“分区”。

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

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

相关文章

关于Android Studio Koala Feature Drop | 2024.1.2下载不了插件的解决办法

解决 androidStudio Settings->Plugins下载插件,点击install后没反应,同时插件描述相关显示不出来 第一步: 第二步: 点击设置,勾选Auto-detect proxy settings,输入网址 https://plugins.jetbrains.com…

笔记本双系统win10+Ubuntu 20.04 无法调节亮度亲测解决

sudo add-apt-repository ppa:apandada1/brightness-controller sudo apt-get update sudo apt-get install brightness-controller-simple 安装好后找到一个太阳的图标,就是这个软件,打开后调整brightness,就可以调整亮度,可…

若依微服务架构遇到的一些问题记录

一、nacos启动问题 需要看官网的准备工作,认真看,版本问题卡了两天 https://doc.ruoyi.vip/ruoyi-cloud/document/hjbs.html#%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C 1.下载nacos,版本需要对应上 版本说明链接 2.记得运行数据库&#xff0…

Linux_shell编程

shell介绍 概念: 用户编写的shell命令通过shell解释器解释后交给linux内核去执行. shell是一个程序(解释器程序) 用户和linux内核的桥梁. Shell 是一个 C 语言编写的脚本语言,它是用户与 Linux 的桥梁,用户输入命令交给 Shell 处理 Shell 将相应的操作传…

Java 多线程(八)—— 锁策略,synchronized 的优化,JVM 与编译器的锁优化,ReentrantLock,CAS

前言 本文为 Java 面试小八股,一句话,理解性记忆,不能理解就死背吧。 锁策略 悲观锁与乐观锁 悲观锁和乐观锁是锁的特性,并不是特指某个具体的锁。 我们知道在多线程中,锁是会被竞争的,悲观锁就是指锁…

国内PLC市场份额报告,西门子老大的地位从未动摇

【导读】国内PLC市场占有率,西门子依然是老大。 PLC市场集中度很高,从销售额来看,TOP3厂家占据一半以上的市场份额,以外资品牌为主,其中西门子排名第一,2022年市场份额约47.1%;三菱排名第二&…

使用uniapp + Vue3 + uni.createInnerAudioContext()实现播放歌曲及歌词滚动、拖动进度条

一、大致效果 二、使用步骤 1.歌词详情页代码块 <template><view class"play"><view class"play_centent" :style"{ background-image: url( playInfo.siPic ) }"><div class"cover-mask" style"opacit…

无人机维护保养、部件修理更换技术详解

无人机作为一种精密的航空设备&#xff0c;其维护保养和部件修理更换是确保飞行安全、延长使用寿命的重要环节。以下是对无人机维护保养、部件修理更换技术的详细解析&#xff1a; 一、无人机维护保养技术 1. 基础构造理解&#xff1a; 熟悉无人机的基本构造&#xff0c;包括…

解决Redis缓存穿透(缓存空对象、布隆过滤器)

文章目录 背景代码实现前置实体类常量类工具类结果返回类控制层 缓存空对象布隆过滤器结合两种方法 背景 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库 常见的解决方案有两种&#xff0c;分别…

【运动的&足球】足球场景目标检测系统源码&数据集全套:改进yolo11-ASF-P2

改进yolo11-RetBlock等200全套创新点大全&#xff1a;足球场景目标检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.03 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或…

【STM32】GPIO通用输入输出口

文章目录 一、GPIO的概念二、STM32中GPIO的基本结构三、GPIO位结构输入部分分析输出部分分析GPIO的8种模式 四、GPIO相关函数 一、GPIO的概念 GPIO&#xff08;General Purpose Input Output&#xff09;&#xff0c;意为通用输入输出口&#xff0c;在嵌入式系统中&#xff0c;…

华为荣耀曲面屏手机下面空白部分设置颜色的方法

荣耀部分机型下面有一块空白区域&#xff0c;如下图红框部分 设置这部分的颜色需要在themes.xml里面设置navigationBarColor属性 <item name"android:navigationBarColor">android:color/white</item>

电子电气架构 --- 整车控制系统

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

STM32 HAL库 SPI驱动1.3寸 OLED屏幕

目录 参考硬件引脚与接线 点亮屏幕CubeMX 配置OLED 驱动程序代码 参考 基于STM32F103C8T6最小系统板HAL库CubeMX SPI驱动7针 OLED显示屏&#xff08;0.96寸 1.3寸通用&#xff09;0.96 oled HAL库驱动 SPI STM32SPI驱动0.96/1.3寸 OLED屏幕&#xff0c;易修改为DMA控制STM32驱…

iOS 18.2 可让欧盟用户删除App Store、Safari、信息、相机和照片应用

升级到 iOS 18.2 之后&#xff0c;欧盟的 iPhone 用户可以完全删除一些核心应用程序&#xff0c;包括 App Store、Safari、信息、相机和 Photos 。苹果在 8 月份表示&#xff0c;计划对其在欧盟的数字市场法案合规性进行更多修改&#xff0c;其中一项更新包括欧盟用户删除系统应…

[前端] 为网站侧边栏添加搜索引擎模块

前言 最近想给我的个人网站侧边栏添加一个搜索引擎模块&#xff0c;可以引导用户帮助本站SEO优化&#xff08;让用户可以通过点击搜索按钮完成一次对本人网站的搜索&#xff0c;从而实现对网站的搜索引擎优化&#xff09;。 最开始&#xff0c;我只是想实现一个简单的百度搜索…

C++ STL 学习指南:带你快速掌握标准模板库

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 大家好呀&#xff01;&#x1f917; 今天我们来聊一聊 C 程序员的必备神器——STL&#xff08;Standard Template Library&#xf…

Oracle视频基础1.3.5练习

Oracle视频基础1.3.4练习 1.3.5 检查数据库启动状态 ps -ef | grep oracle ipcs clear演示alter向前向后改database阶段 sqlplus /nolog conn / as sysdba startup mount alter database nomount # 报错 alter database open启动restricted mode&#xff0c;创建一个connect&…

Unity3D包管理bug某些版本Fbx Exporter插件无法搜索到的问题

这个问题是在使用unity的时候发现的 有些版本里没有Fbx Exporter插件也是没法搜到 经过测试&#xff0c;在package manager中开启Enable Preview Packages也没有用 这个插件在2020已经是正式版了&#xff0c;不需要再开启 后来发现可能是版本bug 需要手动开启 在工程的Pac…

深度学习-学习率调整策略

在深度学习中&#xff0c;学习率调整策略&#xff08;Learning Rate Scheduling&#xff09;用于在训练过程中动态调整学习率&#xff0c;以实现更快的收敛和更好的模型性能。选择合适的学习率策略可以避免模型陷入局部最优、震荡不稳定等问题。下面介绍一些常见的学习率调整策…