当前位置: 首页 > news >正文

Kafka知识体系

一、认识Kafka

1. kafka适用场景

消息系统:kafka不仅具备传统的系统解耦、流量削峰、缓冲、异步通信、可扩展性、可恢复性等功能,还有其他消息系统难以实现的消息顺序消费及消息回溯功能。

存储系统:kafka把消息持久化到磁盘上,以及多副本机制,极大的降低的数据丢失风险,可以把kafka当做长期的数据存储系统使用。

流式处理平台:kafka为主流的流式处理框架提供了完整的处理类库

2. kafka架构

producer、consumer、broker、zookeeper

其中broker可看做kafka服务节点/实例,一个服务器可以部署一个或多个broker,多个broker组成Kafka集群。

zookeeper集群负责管理broker集群元数据、控制器的选举等。

3.主题与分区

消息按主题(Topic)进行分类,一个主题可以有多个分区(partition),一个分区就是一个可追加的Log文件,每个消息都分配一个特定的offset。

但offset不跨分区,所以只能保证单个分区内消息的有序性。

一个主题的分区,可以在不同的broker上,这样就能实现水平扩展。

每个分区又有多副本机制,一主多从,这样就具备了一定的容灾能力。但一般主从数据有一定滞后性,所以理论上是有一定数据丢失风险。

可以设置参数控制主从副本的数据滞后范围,replica.lag.time.max.ms。该参数并不能保证从副本一定会在指定时间内赶上主副本,若是从副本未在设定时间内赶上主副本,则会被认定为“不同步”,提出ISR集合,不能参与选举(也可以设置参数OSR的也可以参与选举)。

4. 分区副本同步机制ISR、OSR、HW、LEO

Kafka分区leader节点选举一般是在ISR(in-sync replicas)集合中选择节点,该集合是在主从数据同步滞后范围内的节点,也就是滞后没那么多的节点。OSR则是滞后太多或失效的节点。

Kafka一个分区的所有副本,同步最少数据的分区的offset,就是HW(heigh watermark)高水位线。就是水桶原理,最低位置处就是这个水桶的最高的水位线。HW之前的消息才能被消费者可见。在消息同步复制机制下,HW之前的消息,才会被认为是消息发送成功,也就是所有副本都持久化到了该消息。异步消息复制机制下,leader副本持久化了该消息即返回消息接收成功的ack。

但同步复制会极大影响性能,所以在异步复制下,kafka依靠ISR机制,容忍一定的复制滞后范围,权衡了性能和数据可靠性之间的关系。

二、生产者

1. 消息发送三种模式

即发即忘(fire-and forget)、同步(sync)、异步(async)

KafkaProducer的send方法返回Future对象,使用get()方法实现同步发送。

通过指定Callback实现异步发送。

public Future send(ProducerRecord rescord,CallBack callback)

2. 分区器

分区器是Kafka为消息分配分区的功能,若发送消息时ProducerRecord中没有指定partition,则使用默认分区器,若有消息有key,则对key做hash,在可用分区中选择,若没有key,则轮询所有分区。

分区器可以自定义,实现Partitioner,在生产者props中配置即可。

3. 生产者架构

生产者有两个线程,主线程负责创建消息及对消息做拦截、序列化、设置分区,打包到缓存批次里,被sender线程拉取走。

sender线程负责创建消息请求,发送消息、缓存已发送还未响应的消息及响应消息。

4. 生产者重要参数

acks:指定分区中必须有多少副本接收到,才算消息接收成功。1-leader副本接收成功即认为成功。0-不需要等待服务端响应。-1/all-全部副本接收成功才算成功。该参数为0性能最佳,可靠性最低,为-1可靠性最佳,性能最低。为1则是性能与可靠性的这种方案。

max.request.size:请求消息的最大值,默认1MB。

retries、retry.back.off.ms:重试次数与重试间隔时间

linger.ms:生产者发送ProducerBatch之前,等待更多消息加入的时间。默认为0 不等待,放大则会降低消息时效性,但提升吞吐量。

request.timeout.ms:生产者等待消息响应的超时时间。

三、消费者

1.消费者组合和消费者

kafka一个主题可以有多个消费者组,每个消费者组可以有多个消费者。

各个消费者组之间是独立的,同一个消息可以被多个消费者组消费。

一个消息在一个消费者组中,只能被一个消费者消费。

每个消费者组group.id唯一。

2.消费者和分区

一个主题可以有多个分区,每个分区都按一定策略均衡的分配给消费者进行订阅。

消费者数量若等于分区数量,1对1均衡分配。消费者数量小于分区数量,则消费者会分配多个分区。

但若消费者数量大于分区数量,则多出来的消费者不会被分配任何分区。所以消费者数量应小于等于分区数量。

3.投递模式

点对点(p2p):利用消费者组概念,所有消费者都在一个组内,实现一个消息只有一个消费者。

发布/订阅(pub/sub):利用消费者组概念,所有消费者在不同组中,实现广播效果。

4.消息消费及位移提交

使用poll(Duration)方法批量拉取到ConsumerRecords消息,此时主题中会记录最新消息被消费的位置lastConsumedOffset,以及下一个被拉取的位置position。当前拉取批次消息被消费完,则自动提交消费位移commited offset。

lastConsumedOffset到position之间的消息,就是正在被消费但还没提交位移的消息。消息消费完提交位移commitedOffset,则lastConsumedOffset变为最新位置

消费完成,位移提交

消费位移不仅可以自动提交,也可以手动提交。同步、异步,有参无参。commitSync、commitAsync方法。

5.消息重复及丢失

正是因为需要消费端提交位移,所以就可能出现某种原因导致未提交位移,消费者再次拉取,还是从上次拉取的位置开始,造成消息重复消费。所以用户需要做好幂等措施,kafka无法保证消息不重复。

又如果消费端拉取消息和处理消息是不同线程,或者异步提交位移。在已提交位移,但应用突然挂掉,导致消息丢失。所以需要在消息提交位移前用户自行缓存消息内容及消息处理状态,处理消息丢失后的重新消费逻辑。

6.消息回溯

若消息丢失,可以使用seek方法,指定分区及offset进行消息回溯,重新消费。

或者设置auto.offset.reset参数,从某个位置重新开始消费。

但有时候消息丢失了,也不一定依赖消息中间件处理。比如转账指令,指令消息发送方发送完转账消息,会对进行对账处理,也就是查询消息指令对应的业务指令状态,是否为已受理,过了一天转账指令仍然未被受理,则认为该消息未被消费、消费异常或者消息携带的业务数据有问题,则重新发起转账指令(消费端需做幂等校验)。

7.再均衡

再均衡是增减分区和消费者时,分区和消费者订阅关系再分配的行为。实现分区和消费者的可扩展性。

再均衡期间消费者是被暂停拉取到消息的,也不能提交位移。所以会导致消息重复消费问题。应当尽量避免。

或做好消息幂等。

再均衡有监听器:

1、再均衡开始前消费者停止拉取消息之后监听,可用于提交消费位移。

2、再均衡结束后,消费者拉取之前监听,可用于

8.拦截器

拦截消息消费之前(过滤过期消息)、位移提交之前(记录位移)

未完待续...

相关文章:

Kafka知识体系

一、认识Kafka 1. kafka适用场景 消息系统:kafka不仅具备传统的系统解耦、流量削峰、缓冲、异步通信、可扩展性、可恢复性等功能,还有其他消息系统难以实现的消息顺序消费及消息回溯功能。 存储系统:kafka把消息持久化到磁盘上&#xff0c…...

【Android】EventBus的使用及源码分析

文章目录 介绍优点基本用法线程模式POSTINGMAINMAIN_ORDEREDBACKGROUNDASYNC 黏性事件 源码注册getDefault()registerfindSubscriberMethods小结 postpostStickyunregister 介绍 优点 简化组件之间的通信 解耦事件发送者和接收者在 Activity、Fragment 和后台线程中表现良好避…...

【大数据学习 | Spark调优篇】Spark之内存调优

1. 内存的花费 1)每个Java对象,都有一个对象头,会占用16个字节,主要是包括了一些对象的元信息,比如指向它的类的指针。如果一个对象本身很小,比如就包括了一个int类型的field,那么它的对象头实…...

Linux:文件系统inode

早期,存储文件的设备是磁盘(当下的市场几乎都是SSD),但大家习惯的把它们都称为磁盘,磁盘是用来表示区分内存的存储设备。而在操作系统看来,这个存储设备的结构就是一个线性结构,这一点很重要。 …...

力扣难题解析

滑动窗口问题 76.最小覆盖子串 题目链接:76. 最小覆盖子串 - 力扣(LeetCode) 题目描述: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空…...

4.5-Channel 和 Flow:SharedFlow 和 StateFlow

文章目录 SharedFlow数据流的收集和事件订阅的区别launchIn() 和 shareIn() 的区别SharedFlow 与 Flow、Channel 的区别shareIn() 适用场景 shareIn() 的具体参数说明shareIn() 的 replay 参数shareIn() 的 started 参数WhileSubscribed() 的参数及适用场景 MutableSharedFlow、…...

Qt | TCP服务器实现QTcpServer,使用线程管理客户端套接字

点击上方"蓝字"关注我们 01、QTcpServer >>> QTcpServer 是 Qt 网络模块中的一个类,用于实现TCP服务器。它允许创建一个服务器,可以接受来自客户端的连接。QTcpServer 是事件驱动的,这意味着它将通过信号和槽机制处理网络事件。 常用函数 构造函数: QT…...

【提高篇】3.6 GPIO(六,寄存器介绍,下)

目录 2.3 输出速度寄存器OSPEEDR(GPIOx_OSPEEDR) (x = A..I) 2.4 上拉/下拉寄存器 (GPIOx_PUPDR) (x = A..I) 2.5 输入数据寄存器(IDR) 2.6 输出数据寄存器(ODR) 2.7 置位/复位寄存器(BSRR) 2.8 BSRR与ODR寄存器的区别 2.3 输出速度寄存器OSPEEDR(GPIOx_OSPEEDR) (…...

【AI】数据,算力,算法和应用(3)

三、算法 算法这个词,我们都不陌生。 从接触计算机,就知道有“算法”这样一个神秘的名词存在。象征着专业、权威、神秘、高难等等。 算法是一组有序的解决问题的规则和指令,用于解决特定问题的一系列步骤。算法可以被看作是解决问题的方法…...

深度学习笔记——生成对抗网络GAN

本文详细介绍早期生成式AI的代表性模型:生成对抗网络GAN。 文章目录 一、基本结构生成器判别器 二、损失函数判别器生成器交替优化目标函数 三、GAN 的训练过程训练流程概述训练流程步骤1. 初始化参数和超参数2. 定义损失函数3. 训练过程的迭代判别器训练步骤生成器…...

网络安全开源组件

本文只是针对开源项目进行收集,如果后期在工作中碰到其他开源项目将进行更新。欢迎大家在评论区留言,您在工作碰到的开源项目。 祝您工作顺利,鹏程万里! 一、FW(防火墙) 1.1 pfSense pfSense项目是一个免费…...

Python毕业设计选题:基于django+vue的智慧社区可视化平台的设计与实现+spider

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 养老机构管理 业主管理 社区安防管理 社区设施管理 车位…...

Oracle LinuxR7安装Oracle 12.2 RAC集群实施(DNS解析)

oracleLinuxR7-U6系统Oracle 12.2 RAC集群实施(DNS服务器) 环境 RAC1RAC2DNS服务器操作系统Oracle LinuxR7Oracle LinuxR7windows server 2008R2IP地址172.30.21.101172.30.21.102172.30.21.112主机名称hefei1hefei2hefei数据库名hefeidbhefeidb实例名…...

M2芯片安装es的步骤

背景:因为最近经常用到es,但是测试环境没有es,自己本地也没安装,为了方便测试,然后安装一下,但是刚开始安装就报错,记录一下,安装的版本为8.16.1 第一步:去官网下载maco…...

macos下brew安装redis

首先确保已安装brew,接下来搜索资源,在终端输入如下命令: brew search redis 演示如下: 如上看到有redis资源,下面进行安装,执行下面的命令: brew install redis 演示效果如下: …...

第六届金盾信安杯-SSRF

操作内容: 进入环境 可以查询网站信息 查询环境url https://114.55.67.167:52263/flag.php 返回 flag 就在这 https://114.55.67.167:52263/flag.php 把这个转换成短连接,然后再提交 得出 flag...

【论文投稿】国产游戏技术:迈向全球引领者的征途

【IEEE出版南方科技大学】第十一届电气工程与自动化国际会议(IFEEA 2024)_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看:https://ais.cn/u/nuyAF3 目录 国产游戏技术能否引领全球? 一、国产游戏技术的崛起之路 1.1 初期探索与积…...

腾讯微众银行大数据面试题(包含数据分析/挖掘方向)面试题及参考答案

为什么喜欢使用 XGBoost,XGBoost 的主要优势有哪些? XGBoost 是一个优化的分布式梯度增强库,在数据科学和机器学习领域应用广泛,深受喜爱,原因主要在于其众多突出优势。 首先,它的精度高,在许多机器学习竞赛和实际应用中,XGBoost 都展现出卓越的预测准确性。其基于决策…...

【Linux】死锁、读写锁、自旋锁

文章目录 1. 死锁1.1 概念1.2 死锁形成的四个必要条件1.3 避免死锁 2. 读者写者问题与读写锁2.1 读者写者问题2.2 读写锁的使用2.3 读写策略 3. 自旋锁3.1 概念3.2 原理3.3 自旋锁的使用3.4 优点与缺点 1. 死锁 1.1 概念 死锁是指在⼀组进程中的各个进程均占有不会释放的资源…...

Spring Web开发(请求)获取JOSN对象| 获取数据(Header)

大家好,我叫小帅今天我们来继续Spring Boot的内容。 文章目录 1. 获取JSON对象2. 获取URL中参数PathVariable3.上传⽂件RequestPart3. 获取Cookie/Session3.1 获取和设置Cookie3.1.1传统获取Cookie3.1.2简洁获取Cookie 3. 2 获取和存储Session3.2.1获取Session&…...

用c语言完成俄罗斯方块小游戏

用c语言完成俄罗斯方块小游戏 这估计是你在编程学习过程中的第一个小游戏开发,怎么说呢,在这里只针对刚学程序设计的学生,就是说刚接触C语言没多久,有一点功底的学生看看,简陋的代码,简陋的实现&#xff0…...

SpringBoot整合Retry详细教程

问题背景 在现代的分布式系统中,服务间的调用往往需要处理各种网络异常、超时等问题。重试机制是一种常见的解决策略,它允许应用程序在网络故障或临时性错误后自动重新尝试失败的操作。Spring Boot 提供了灵活的方式来集成重试机制,这可以通过…...

JS API事件监听(绑定)

事件监听 语法 元素对象.addEventListener(事件监听,要执行的函数) 事件监听三要素 事件源:那个dom元素被事件触发了,要获取dom元素 事件类型:用说明方式触发,比如鼠标单击click、鼠标经过mouseover等 事件调用的函数&#x…...

ceph手动部署

ceph手动部署 一、 节点规划 主机名IP地址角色ceph01.example.com172.18.0.10/24mon、mgr、osd、mds、rgwceph02.example.com172.18.0.20/24mon、mgr、osd、mds、rgwceph03.example.com172.18.0.30/24mon、mgr、osd、mds、rgw 操作系统版本: Rocky Linux release …...

superset load_examples加载失败解决方法

如果在执行load_examples命令后,出现上方图片情况,或是相似报错(url error\connection error),大概率原因是python程序请求github数据,无法访问. 因此我们可以将数据下载在本地来解决. 1.下载zip压缩文件,存放到本地 官方示例地址:GitHub - apache-superset/examples-data …...

wareshark分析mysql协议的数据包

使用wareshark 分析mysql协议的数据包,是每个dba都应该掌握的技能,掌握以后,就可以通过tcpdump抓包分析,得到连接报错的信息了。 tcpdump抓包命令: tcpdump -nn -i bond0 dst 10.21.6.72 and port 4002 -w 1129_tcpdu…...

HarmonyOS4+NEXT星河版入门与项目实战(25)------UIAbility启动模式(文档编辑案例)

文章目录 1、启动模式2、Specified启动模式实现步骤3、文档编辑案例1、文件创建2代码实现3、Statge 创建4、添加配置1、启动模式 Singleton启动模式: 每个 UIAbility 只存在一个实例,是默认的启动模式,任务列表中只会存在一个相同的 UIAbilityStandard启动模式: 每次启动 U…...

webpack 项目访问静态资源

使用 webpack dev serve 启动 react 项目后,发现无法使用 http://localhost:8080/1.png 访问到项目的 /static 目录下的 1.png 文件。我的 webpack-dev.js 配置如下: const webpack require(webpack) const webpackMerge require(webpack-merge) cons…...

‌UNION和UNION ALL区别

文章目录 结果集的处理方式‌:‌对重复记录的处理‌:‌排序处理‌:‌执行效率‌: ‌UNION和UNION ALL的主要区别在于结果集的处理方式、对重复记录的处理、排序处理以及执行效率。‌‌ 结果集的处理方式‌: ‌UNION‌…...

Rook入门:打造云原生Ceph存储的全面学习路径(下)

文章目录 六.Rook部署云原生CephFS文件系统6.1 部署cephfs storageclass6.2 创建容器所需cephfs文件系统6.3创建容器pod使用rook-cephfs提供pvc6.4 查看pod是否使用rook-cephfs 七.Ceph Dashboard界面7.1 启用dashboard开关7.2 ceph-dashboard配置外部访问7.3 Dashboard web ad…...

59网站一起做网店广州/在线建站网页制作网站建设平台

SimpleDateFormat转24小时类型时间字符串:yyyy-MM-dd HH:mm:ss...

网站ip访问做图表/seo优化是指

1.arduino ide添加esp32硬件支持 Arduino ide配置esp32硬件支持_qqliuzhitong的博客-CSDN博客 2.重构ros_lib库 这里直接看这个链接就可以。 rosarduino学习(六):重构ros_lib库文件_qqliuzhitong的博客-CSDN博客 3.esp32代码 #include …...

上海企业建设网站电话/办公软件速成培训班

点击上方 "Python人工智能编程" 关注,星标或者置顶每天11点准时推送,第一时间送达来自:量子位 报道 | 公众号 QbitAI | 编辑:真经君正文你是否也在朋友圈看过这样的小推广:「你要悄悄学Python,然…...

学做网站书籍/谷歌seo排名优化

1.#fdisk -l (如果你的已有磁盘是IDE的,用该命令查看系统识别到的新磁盘,如果是磁盘是IDE的,显示可能是hdb,如果磁盘是SCSI的,显示可能是sda)2.#mkdir /mnt/disk (创建一个挂载点目录)3.#mount /dev/hdb /mnt/disk (将…...

安乡网站制作/免费b站推广短视频

大家多多少少应该都会对红帽公司有些了解,我们发现,现在越来越多的人想要通过红帽认证考试来提升个人价值,但也有一部分人对红帽认证不了解,正在犹豫是否要参加红帽考试,不知道红帽认证含金量如何。下面腾科教育小编就…...

权威的南昌网站建设/响应式网站模板的应用

我想在我的x86 ubuntulinux上交叉编译ARM内核模块.我已经下载了内核源代码(linux 2.6.26,因为目标ARM机器正在运行这个linux版本).和apt-get’ed arm交叉编译器.如你看到的.rootdeclspec-desktop:/var/www/module_test# arm-linux-gnueabi-arm-linux-gnueabi-addr2line arm-lin…...