三、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.xdnf.cn/news/2102.html

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

相关文章

基于 Transformer 的语言模型

基于 Transformer 的语言模型 Transformer 是一类基于注意力机制(Attention)的模块化构建的神经网络结构。给定一个序列,Transformer 将一定数量的历史状态和当前状态同时输入,然后进行加权相加。对历史状态和当前状态进行“通盘…

大数据之文件服务器方案

大数据文件服务器方案 一,文件服务器常用框架 二,文件服务器常用框架的实现技术 文件服务器常用框架 文件服务器是一种专门用于存储、管理和共享文件的服务器,其常用框架的实现技术涉及多个方面,以下是一些主要的实现技术及其详…

【刷题15】字符串专题

目录 一、字符串相加二、最长公共前缀三、最长回文子串四、二进制求和五、字符串相乘 一、字符串相加 题目: 思路: 字符串中的每一位的字符转换为数字后要相加,相加的必须是同一位的,即个位加个位,十位加十位。所以…

企业数据安全举报投诉如何有效处理?

相关制度、流程图等获取请联系作者!! 在当今数字化和信息化的浪潮中,企业数据安全问题越来越受到重视,而对于数据安全的举报和投诉处理是保障企业数据安全、提升用户信任度的重要手段之一。一个完善的举报投诉处理机制能够有效应对…

[综述笔记]Deep learning for brain disorder diagnosis based on fMRI images

论文网址:Deep learning for brain disorder diagnosis based on fMRI images - ScienceDirect 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向…

论文提交步骤 | 2024年第五届MathorCup大数据竞赛

2024年第五届MathorCup数学应用挑战赛—大数据竞赛于2024年10月25日下午6点正式开赛。 论文和承诺书、支撑材料(可选)及计算结果文档由各参赛队队长电脑登录下方报名主页提交: https://www.saikr.com/vse/bigdata2024 初赛作品提交截止时间为…

[sa-token]StpUtil.getLoginId

闲聊 一般情况下,我们想用uid,可能需要前端将uid传过来,或者将token传来,然后我们进行识别。 用了sa-token之后,可以使用StpUtil.getLoginId()方法获取当前会话的用户id 代码展示 例如以下代码: public Res…

双向 Type-C 转 DP 线:高清视频输出的灵活解决方案

在当今数字化生活中,人们对高效能和高清晰度的需求日益增长。双向 Type-C 转 DP 线应运而生,它以其灵活便捷的特点,为用户提供了一种高清视频输出的解决方案。本文将详细介绍双向 Type-C 转 DP 线的技术原理、适用设备、性能参数以及市场选择…

一键式配置适合 Web 开发的Ubuntu系统

大家好,今天给大家分享一个专为Ubuntu设计的Web开发者配置方案Omakub。 项目介绍 Omakub是一个为开发者打造的、经过精心配置的 Ubuntu 环境项目,由 Ruby on Rails 的创造者 David Heinemeier Hansson(DHH)发起。目的是为了简化他…

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦!🤩 基本配置 打包工具:Vite 前端框架:ElementPlus 开发语言:Vue3、TypeScript、Sass 代码检查:ESLint、Prettier IDE&#xf…

【OpenGL】vs中glsl高亮显示插件

vs中glsl高亮显示插件 扩展搜索glsl安装

谷歌CEO劈柴吹了个牛,被自家员工“反诈”

Google的CEO Sundar Pichai,可以说是渲染“AI取代人类”的恐慌氛围的帮凶之一了。 谷歌大部分部门都启用了“AI人力”的策略,进行大规模裁员。与一年前相比,现在谷歌的员工整体数量减少了1112人。 甚至,在最新的公司财报电话会议…

一文了解什么是NLP(自然语言处理)

文章目录 简介NLP 的应用NLP 的工作原理步骤1:文本预处理步骤2:文本表示步骤3:分析和建模 结语主要参考 简介 自然语言处理(NLP)是一种专业分析人类语言的人工智能。(下文皆简称为“NLP”)&…

一个基于Zookeeper+Dubbo3+SpringBoot3的完整微服务调用程序示例代码

一、关于 Dubbo3 的一些优化改进介绍 Dubbo3 的官方文档地址: https://cn.dubbo.apache.org/zh-cn/overview/what/overview/ 其针对一些问题进行了优化和改变。个人整理3个小的方面: 1. 在服务注册方面使用 DubboService 注解,不再使用 Servi…

群控系统服务端开发模式-应用开发-上传配置功能开发

下面直接进入上传配置功能开发,废话不多说。 一、创建表 1、语句 CREATE TABLE cluster_control.nc_param_upload (id int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 编号,upload_type tinyint(1) UNSIGNED NOT NULL COMMENT 上传类型 1:本站 2&a…

一:时序数据库-Influx应用

目录 0、版本号 1、登录页面 2、账号基本信息 3、数据库案例 4、可视化 5、java案例 0、版本号 InfluxDB v2.4.0 1、登录页面 http://127.0.0.1:8086/signin 账号:自己账号 密码:自己密码 2、账号基本信息 查看用户id和组织id!&…

Linux高阶——1027—进程间关系相关

本章节介绍,进程间的各种关系:亲缘关系,终端进程,进程组,会话,孤儿进程,守护进程 1、亲缘关系 Linux或unix操作系统,进程间具备亲缘关系,分为强亲缘与弱亲缘 强亲缘&a…

leetcode动态规划(二十三)-打家劫舍III

题目 337.打家劫舍III 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。 除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树…

(七)Python运算符和优先级

一、算数运算符 算数运算符,如下表所示: x1 y2 z3 # 加法运算 axy print(a,a) # 减法运算 by-x print(b,b) # 乘法运算 cy*z print(c,c) # 除法运算 dz/y print(d,d) # 取模运算 ez%y print(e,e) # 幂运算 fy**z print(f,f) 输出结果: 二…

echarts地图,柱状图,折线图实战

1.地图 <template><div style"height: 100%;" class"cantainerBox"><div class"top"><div class"leftTop"><span class"firstSpan">推广进度</span><div>省份选择&#xff1a;&l…