运维.售后
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
博客
Blog
ToB门户
了解全球最新的ToB事件
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
大数据
›
数据仓库与分析
›
图解Kafka | 彻底弄明白 Kafka 两个最重要的配置 ...
图解Kafka | 彻底弄明白 Kafka 两个最重要的配置
九天猎人
金牌会员
|
2024-8-27 00:02:38
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
893
|
帖子
893
|
积分
2679
我已经利用 Kafka 近两年了,我发现有两个配置很重要,但是不太容易理解。这两个配置分别是acks和min.insync.replicas。
本文将通过一些插图来资助理解这2个配置,以便更好的利用Kafka为我们服务。
复制
我假设你已经熟悉 Kafka了 ,但为了更好地理解这些配置,照旧有必要回首一下Kafka的基础知识。
在Kafka中,每个主题的分区由一个 leader 副本 和若干个 follower 副本 构成,副本个数(leader副本和follower副本之和)可以通过replication.factor举行配置,其默认值是3,这也是一般场景下推荐的值,这种设置能够提供肯定的容错本领和数据冗余,确保数据的可靠性。见下图。
生产者客户端
只会向leader副本写入数据,
而follower副本只负责异步复制数据,不会对外提供服务,也就是说对于客户端而言,Kafka的Follower副本并不起直接作用。
由于分布式体系的复杂性,我们需要一种方法来判断这些follower是否跟上leader的步调——它们是否将生产者写入到leader中的最新数据同步过来?
同步副本(In-sync Replicas)
在数据同步过程中,follower副本 相对于 leader副本 而言大概会有肯定程度上的滞后。根据这个特性,Kafka 中的副本被分为两个集合:ISR(In-Sync Replicas) 和 OSR(Out-of-Sync Replicas)。
ISR集合:全部与 leader 副本保持肯定程度同步的副本(包括 leader 副本在内)构成的集合。当Leader副本出现故障后,只有这个集合中的 副本才气被选举为leader((不外可以修改参数配置来改变这个举动)。)。
OSR集合:与 leader 副本同步滞后过多的副本构成的集合。
leader副本负责维护和跟踪 ISR 集合中全部 follower 副本的同步状态,当某个 follower 副本的滞后程度过高时,leader副本 会将它从 ISR 集合中剔除。固然,如果 OSR 集合中有 follower 同步进度追上了 leader,那么 leader 也会把它从 OSR 集合中转移至 ISR 集合。
acks配置
相识了 Kafka 的副本机制后,我们可以探讨 acks 配置了。
acks是生产者客户端的一个配置选项,它表示生产者发送的消息要有多少个副本节点接收到,生产者才认为消息发送乐成,其取值可以为0、1、-1(也可以表示为 all)。
acks=0
当 acks 设置为 0 时,生产者在发送消息后不需要等待来自broker的确认信息,生产者在消息发送出去后就认为写入乐成。这种设置具有最高的服从,但最容易导致消息丢失,因为生产者不等待任何确认。
acks=1
当 acks 设置为 1 时,只要leader副本已经收到消息并将其写入当地日志中,就会返回ack给生产者,这种方式的安全性较高,但仍旧存在肯定的消息丢失风险:考虑到这样一个场景,生产者发送的消息确实乐成写入到了leader副本,leader副本就会返回乐成相应给生产者,但是这条消息还没来得及同步到follower副本中,此时leader副本崩溃,那么这条消息照旧会丢失,因为新选举的leader副本中并没有这条对应的消息。
相对别的两种设置,ack=1这种配置性能和安满是最平衡的。
acks=all
当 acks 设置为 -1 大概all时,leader等待全部同步副本都收到该消息后才会返回ack给生产者。保证了只要有⼀个同步副本存在,消息就不会丢失,这种方式最安全,但性能最差。
min.insync.replicas
如果体系对数据安全性要求高,不允许丢数据,那么需要将acks配置为all。但是仅配置acks=all照旧会存在问题。
如果一个分区有3个副本,正常环境ISR里面就是3个副本,但由于网络等问题ISR集合里面的副本数量大概会变化,当ISR集合的副本减少到只有 1 个时,也就是说leader是唯一同步副本,acks=all其实就退化成acks=1了(只需要leader副本保存好消息就返回ack),前面我们已经介绍过,acks = 1是会存在消息丢失的大概。
为了防止这种环境发生,可以利用 min.insync.replicas 配置。
min.insync.replicas
是broker上的配置,
它指定了当acks=all时,ISR 中必须存在的最少同步副本数量。
如果 ISR 中的同步副本数量小于这个值,写入操作将会失败,对于不能忍受消息丢失的体系来说,写入失败总比写进去然后丢了强。
例如,在下图中,有2个同步副本(Broker 3 不是同步副本),并且在生产者上设置了acks=all, broker上设置了min.insync.replicas=2,那么意味着当两个同步副本都收到消息后,leader才会返回ack给生产者。
如果同步副本数量低于这个值,生产者将收到异常,下图中, Brokers 2 and 3都不是同步副本,同步副本只有leader1个,但是min.insync.replicas=2,也就是说同步副本数小于这个min.insync.replicas设置的值,因此,任何消息的写入都将会失败。
需要留意的是,对于下图这种环境,利用acks=0或acks=1配置的生产者会乐成将消息6写入分区。
误区
一个常见的误解是:认为min.insync.replicas表示有多少副本需要收到消息才气让leader相应ack给生产者。
事实并非云云,实际上,min.insync.replicas表示在处理哀求时需要存在的最少同步副本数量。
以下图为例。纵然配置了min.insync.replicas=2,leader也不会在仅有2个副本确认的环境下相应ack给生产者,而是等待全部3个副本确认才会相应ack给生产者。
这就是全部内容!共同插图是不是很容易理解?
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
九天猎人
金牌会员
这个人很懒什么都没写!
楼主热帖
C# 使用流读取大型TXT文本文件 ...
从洞察到决策,一文解读标签画像体系建 ...
Flink的API分层、架构与组件原理、并行 ...
JVM
袋鼠云平台代码规范化编译部署的提效性 ...
打穿你的内网之三层内网渗透 ...
SpringBoot(八) - 统一数据返回,统一 ...
SQL中的排座位问题
微服务(三)之负载均衡(服务端和客户端) ...
MySQL中USER()和CURRENT_USER()的区别 ...
标签云
存储
服务器
快速回复
返回顶部
返回列表