Kafka 集群如何实现数据同步
Kafka 介绍
Kafka 是一个高吞吐的分布式消息系统,不但像传统消息队列(RaabitMQ、RocketMQ等)那样能够【异步处理、流量消峰、服务解耦】
还能够把消息持久化到磁盘上,用于批量消费。除此之外由于 Kafka 被设计成分布式系统,吞吐量和可用性大大提高
Kafka 角色
- kafka 客户端
- 生产者(producer):也叫发布者,负责创建消息
- 消费者(consumer):也叫订阅者,负责消费(读取)消息
- Kafka 服务端(broker)
- leader:对外提供读写服务
- follower:不提供服务,负责向 leader 同步数据
Topic(主题)和 partition(分区)
topic 就是消息发布的地方,消费者通过订阅 topic 来消费到对应的消息
为了提高吞吐量,实现 topic 的负载均衡,Kafka 在 topic 下又引用了分区(partition)的概念,每个 topic 可以被划分成多个分区
分区允许消息在 Topic 下水平分割和存储,每个分区都是一个有序且不可变的消息队列,消费者可以以并行的方式消费同一个 topic 中的消息
PS:topic 是逻辑上的概念,消息真正是存储到 partition 中去的

例如某个 topic 下被划分成 n 个分区,那么这个 topic 的并发度就提高 n,同时可以支持 n 个 consumer 并行消费该 topic 中的消息
log(日志)
对于每一个 topic ,Kafka 都会维护一个分区日志

每个分区都是一个有序的、不可变的消息队列,且可以持续地添加消息。消息在分区中分配了唯一的序列号,被称为偏移量(Offset)
offset 用来唯一的标识分区中每一条记录
Kafka 会保留所有分区中的消息,不会自动删除消息。消息的保留策略由 Kafka 配置参数控制,消息可以在一定时间或达到一定大小后过期,过期的消息会被删除
消费者在 Kafka 中只保留自己的 Offset,用于标识它在分区中的位置。通常情况下,当 消费者消费消息时,它的 Offset 会线性增加,表示它已经消费了这些消息
消费者可以选择将 Offset 重置为更旧的值,从而重新开始读取消息
每个消费者实例唯一负责一个分区,Kafka 只保证分区内的记录是有序的,而不保证主题中不同分区的顺序
Kafka 集群
Kafka 是分布式架构,有集群(cluster)的概念
Kafka 中的一个实例被称为 broker,它接收生产者的消息并存入磁盘,消费者连接 broker 消费消息
多个 broker 组成一个 Kafka cluster,集群内某个 broker 会成为集群控制器(cluster controller),负责管理整个 Kafka 集群,包括分配分区给 broker,监控 broker 等
分区被复制成了多个副本(replica)然后均分在不同的 broker 上 ,其中一个副本 Leader,其他的是 Follower
创建副本的单位是 topic 的 分区
正常情况下,每个分区都有一个 leader 和零或多个 followers 。这样即使某个 broker 发生故障,其他 broker上的副本仍然可以继续提供服务

那如何将所有的副本均匀分布在不同 broker 上呢?
分配副本的算法如下:
- 将所有 broker(假设共
n个 broker)和待分配的分区排序 - 将第
i个分区分配到第(i mod n)个 broker上 - 将第
i个分区的第j个副本分配到第((i + j) mode n)个 broker 上
如何实现数据同步?
我们先来看下 Kafka 中的 ISR(In-Sync Replicas) 机制
既然每个 leader 下面都有至少一个 follower,于是便有了 ISR,ISR 就是 Kafka 动态维护的一组同步副本集合
ISR 中所有的 follower 都与 leader 保持同步状态,而且 leader 也在 ISR 列表中,只有在自己 ISR 列表中的副本才能参与 leader 竞选
当生产者写入数据时,leader 更新数据,follower 是怎么知道 leader 更新然后去同步数据的呢?
follower 会通过定期向 leader 发送 fetch 请求来实现数据同步,这个是由 fetcher 线程来负责的
当一个副本被选举成为 follower 后,会启动副本的 fetcher 线程,随后 Follower 会定期向 Leader 发送心跳请求,以保持连接,并发送 fetch 请求来获取最新的数据。
如果 follower 发现自己的 LEO(Log End Offset,日志结束偏移量)与 Leader 的 LEO 有差距时,会触发同步数据请求,以便将自身日志同步至 Leader 的对应位置,确保与 Leader 的数据保持一致
如果一个 follower 在指定时间内(配置字段为 replica.lag.time.max.ms)没有发送 fecth 请求或者没有追上 leader 的 LEO,就会从 ISR 中移除
相关文章:
Kafka 集群如何实现数据同步
Kafka 介绍 Kafka 是一个高吞吐的分布式消息系统,不但像传统消息队列(RaabitMQ、RocketMQ等)那样能够【异步处理、流量消峰、服务解耦】 还能够把消息持久化到磁盘上,用于批量消费。除此之外由于 Kafka 被设计成分布式系统&…...
opencv- CLAHE 有限对比适应性直方图均衡化
CLAHE(Contrast Limited Adaptive Histogram Equalization)是一种对比度有限的自适应直方图均衡化技术,它能够提高图像的对比度而又避免过度增强噪声。 在OpenCV中,cv2.createCLAHE() 函数用于创建CLAHE对象,然后可以…...
IOS免签封装打包苹果APP的方法
IOS免签app封装打包苹果APP的方法如下: 准备一个未签名的IPA文件。获取一个企业证书或个人证书,用于签名IPA文件。将证书添加到Keychain Access中。安装iOS App Signer(可以在网上找到相关下载链接)。打开iOS App Signer…...
Springboot引入分布式搜索引擎Es RestAPI
文章目录 RestAPI初始化RestClient创建索引库删除索引库判断索引库是否存在总结 RestClient操作文档增加文档数据查询文档删除文档修改文档批量导入文档小结 RestAPI ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通…...
Lua脚本解决redis实现的分布式锁多条命令原子性问题
线程1现在持有锁之后,在执行业务逻辑过程中,他正准备删除锁,而且已经走到了条件判断的过程中,比如他已经拿到了当前这把锁确实是属于他自己的,正准备删除锁,但是此时他的锁到期了,那么此时线程2…...
Vatee万腾独特科技力量的前沿探索:Vatee的数字化奇点
在当今科技的浪潮中,Vatee万腾以其独特的科技力量成为前沿探索的引领者,正迎来数字化奇点的新时代。Vatee万腾不仅仅是一家科技公司,更是一支探索未知领域、开创数字时代新局面的先锋力量。 Vatee万腾的数字化奇点体现在其对前沿技术的深刻理…...
C++面试,const的使用
#include <iostream> #include <cstring>int main() {const int x 1;int b 10;int c 20;const int* a1 &b;int* const a2 &b;const int* const a3 &b;x 2;a1 &c;*a1 1;a2 &c;*a2 1;a3 &c;*a3 1;return 0; }错误1:…...
小总结----长度
看了上一篇文章,已经一年没发了。CSDN也越来越封闭了,查点东西,也很不友好。 来个小总结吧:完成团队建设,招聘11人。完成26项开发,内部9项,科创10项。2023发明专利申请两项,软著申请…...
【深度学习】如何选择神经网络的超参数
1. 神经网络的超参数分类 神经网路中的超参数主要包括: 1. 学习率 η 2. 正则化参数 λ 3. 神经网络的层数 L 4. 每一个隐层中神经元的个数 j 5. 学习的回合数Epoch 6. 小批量数据 minibatch 的大小 7. 输出神经元的编码方式 8. 代价函数的选择 9. 权重初始化的方法 …...
jQuery 3.0 新增了哪些特性?(jQuery 3 所引入的那些最重要的变化)
文章目录 前言简介新增特性Use of requestAnimationFrame() for Animationsunwrap() 方法 有变更的特性data() 方法Deferred 对象SVG 文档 已废弃、已移除的方法和属性废弃 bind()、unbind()、delegate() 和 undelegate() 方法移除 load()、unload() 和 error() 方法移除 conte…...
MindStudio学习一 整体介绍
一场景介绍 二 安装介绍 1.LINUX 采用无昇腾硬件采用linux 分部署 2.WINDOWS 3.linux下安装整体步骤 3.1安装依赖 3.2 安装步骤 1.gcc cmake 等依赖 2.python3.7.5 3.pip 安装依赖 4.安装JDK 5.安装 Ascend-cann-toolkit 6.解压安装Mindstudio 7.进入bin路径 ./…...
excel表中慎用合并单元格,多用跨列居中
如下一个excel例表: 要将首行居中,最好的办法如下: 1、选中首行单元格 2、按下ctrl1,调出“设置单元格格式”,选中“对齐”,在“水平对齐”中选择“跨列居中” 3、完成任务 这样居中的好处是:可…...
linux网络编程之UDP编程
linux网络编程之UDP编程 UDP编程模型服务端客户端 tcp与udp的区别 UDP编程模型 服务端 1.创建socket 2.构建服务器协议地址簇 3.绑定 4. 通信 sendto(多了两个参数) send connect #include <stdio.h> #include <sys/types.h> /*…...
YB4556 28V、1A、单节、线性锂电池充电IC
YB4556 28V 、 1A 、单节、线性锂电池充电 IC 概述: YB4556H 是一款完整的采用恒定电流 / 恒定电压的高压、大电流、单节锂离子电池线性充电 IC。最高耐压可达 28V,6.5V 自动过压保护,充电电流可达 1A。由于采用了内部 PMOSFET 架构,加上防倒…...
基于单片机设计的大气气压检测装置(STC89C52+BMP180实现)
一、前言 本项目设计一个大气气压检测装置,该装置以单片机为基础,采用STC89C52作为核心控制芯片,结合BMP180模块作为气压传感器。大气气压,也就是由气体重力在大气层中产生的压力,其变化与天气预报、气象观测以及高度…...
【ChatGLM3-6B】Docker下部署及微调
【ChatGLM2-6B】小白入门及Docker下部署 注意:Docker基于镜像中网盘上上传的有已经做好的镜像,想要便捷使用的可以直接从Docker基于镜像安装看Docker从0安装前提下载启动访问 Docker基于镜像安装容器打包操作(生成镜像时使用的命令࿰…...
编程常见报错信息及解决方案汇总
编程常见报错信息及解决方案汇总 1.Java语言编程 1.1 jdk相关 Java API java8帮助文档 Java最新JDK和API下载(持续同步更新于官网) jdk1.8.0_212 全平台下载 官网下载JDK1.7的方法和步骤 力扣 (LeetCode) PTA题库 1.2 编程工具Eclipse Eclips…...
从Redis反序列化UserDetails对象异常后发现FastJson序列化的一些问题
最近在使用SpringSecurityJWT实现认证授权的时候,出现Redis在反序列化userDetails的异常。通过实践发现,使用不同的序列化方法和不同的fastJson版本,异常信息各不相同。所以特地记录了下来。 一、项目代码 先来看看我项目中redis相关配置信息…...
0001Java程序设计-springboot基于微信小程序批发零售业商品管理系统
文章目录 **摘 要****目录**系统实现开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅🐧裙:776871563 摘 要 本毕业设计的内容是设计并且实现一个基于微信小程序批发零售业商品管理系统。它是在Windows下,以MYSQL为数据库开发平台…...
中国防锈油市场深度调研与投资战略报告(2023版)
内容简介: 防锈油是在石油类基本组分中加入油溶性缓蚀剂及清净分散剂、抗氧抗腐剂、极压抗磨剂等辅助添加剂,多用于金属制品工序间、运输和贮存时的暂时防锈,是一种较理想、有效的防护方法,具有效果好、使用方便、成本低廉、易施…...
别再只测距了!用HC-SR04+STM32做个智能防撞小车(附完整代码)
从HC-SR04到智能防撞小车:STM32实战开发全指南 在创客圈里,HC-SR04超声波模块常被当作入门级的测距玩具——接上几根杜邦线,跑个示例代码,测量下距离就束之高阁。但你想过吗?这个售价不到10元的小模块,配合…...
STL文件缩略图生成器:让3D模型文件一目了然
STL文件缩略图生成器:让3D模型文件一目了然 【免费下载链接】stl-thumb Thumbnail generator for STL files 项目地址: https://gitcode.com/gh_mirrors/st/stl-thumb stl-thumb是一款专为STL文件设计的快速轻量级缩略图生成工具,能够在Linux和Wi…...
别再傻傻用乘除了!C/C++里用移位操作给代码提速(附性能对比测试)
移位操作 vs 乘除运算:现代C/C性能优化的实测指南 在嵌入式系统开发、高频交易算法或游戏引擎优化中,每一纳秒的延迟都可能成为瓶颈。传统教材常建议用移位操作替代乘除法来提升效率,但在现代编译器和多架构环境下,这种优化是否依…...
告别‘Hello World’就卡住:保姆级Android Studio安装与环境变量配置(Win/Mac通用)
告别‘Hello World’就卡住:保姆级Android Studio安装与环境变量配置(Win/Mac通用) 第一次打开Android Studio时,满心欢喜准备大展拳脚,却在"Hello World"之前就被各种报错拦住了去路?你不是一个…...
别再为Aspose水印发愁了!手把手教你用15.8.0旧版jar+license.xml搞定Word转PDF
企业级文档处理实战:Aspose.Words无水印转换方案深度解析 在中小型企业的技术栈中,文档处理往往是最容易被忽视却又频繁引发问题的环节。当市场部门急着要生成上百份客户报告,当财务系统需要自动导出合规的PDF账单,或是当HR系统要…...
别再死记硬背公式了!用Python+NumPy手把手带你理解矩阵白化(附完整代码)
用Python实战理解矩阵白化:从数学恐惧到代码掌控 很多数据科学初学者在面对矩阵白化这类数学概念时,常常陷入公式推导的泥潭而难以自拔。我们不妨换个思路——用Python代码和可视化手段,让抽象的数学原理变得触手可及。本文将带你用NumPy一步…...
【会议征稿通知 | 台州学院主办 | IET出版 | EI 、Scopus稳定检索】第二届新能源与电力电网国际学术会议(NEPG 2026)
第二届新能源与电力电网国际学术会议(NEPG 2026) 2026 2nd International Conference on New Energy and Power Grid 2026年5月29-31日 | 中国台州 大会官网:www.ic-nepg.org 截稿时间:见官网(早投稿,早…...
统信UOS蓝牙管理实战:从服务控制到硬件开关
1. 统信UOS蓝牙管理入门指南 第一次接触统信UOS的蓝牙管理时,我完全被各种专业术语搞晕了。后来才发现,其实掌握几个核心命令就能解决90%的日常问题。作为国产操作系统的代表,统信UOS在蓝牙管理方面提供了完整的命令行工具链,特别…...
别再只会docker run了!这15个Docker CLI命令,让你效率翻倍(附真实场景案例)
别再只会docker run了!这15个Docker CLI命令,让你效率翻倍(附真实场景案例) Docker已经成为现代开发和运维的标配工具,但很多人在日常工作中仍然停留在基础的docker run和docker ps命令上。本文将带你深入15个高效Dock…...
哔哩下载姬DownKyi完整指南:3分钟学会免费下载B站高清视频
哔哩下载姬DownKyi完整指南:3分钟学会免费下载B站高清视频 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&a…...
