欢迎光临
Kafka进阶之Replication,从理论到实践
   

Kafka进阶之Replication,从理论到实践

我们先来聊聊如何找“最近”的replica,其实开始有两个思路可以实现,一个是让client来查询broker中的meta data(比如说rackId, host information等),然后自己决定。另一种方法是由broker来根据client的信息决定哪个replica最好。当时选择的是后者,原因比较简单,是因为broker知道的信息更多一些,它甚至可以考虑备选replica的负载等各种因素,从而决定一个“最近”的replica,而不是单纯物理距离来判断。

而Fetch的protocol修改主要的保证是当我们从follower读数据的时候,只有被committed的message才能被consumer读取。这样我们就能保证从follower读和从leader读是类似的。要做到这件事,就需要所有的replica知道leader已经committed了哪个message,这就要求leader在发送数据到replica的时候,需要同时把high-water mark(last committed offset,详情见《Kafka基础介绍之消息commit》)发送给follower。这里需要额外注意的就是正是因为需要这个high-water mark的传送,所以follower其实是相比于leader是有一个延迟的。

Leader和follower的sync


Leader除了满足producer/consumer的request请求之外,一个很重要的工作就是和follower保持sync,它需要知道哪些follower目前是in-sync的,哪些follower不是。

Follower为了保持和Leader同步,需要给leader发送Fetch的request,就像一个consumer一样,不停地从leader那边获取数据。我们在《Kafka基础介绍之Consumers》中提到,获取数据的request中需要传入一个offset的值,表示下一步需要获取的信息的offset,而leader正是通过这个参数来知道follower都已经有了哪些数据,从而来判断follower的状态。

默认设置下,当一个follower有10s(可以配置)都没有发送fetch的request,那么则认为它是out-of-sync的,或者一个follower连续10s(同样可以配置)都没有能够catch-up到最新的message,也会认为它是out-of-sync。只有in-sync的follower才能成为新的leader candidate(unclean leader enable则是例外,后面会详细解释)。

这里还有一个特殊的节点:preferred leader,这个节点是当partition创建的时候的第一个leader,这个leader其实是考虑了各种load balance的。当这个节点不是leader的时候,只要它是in-sync的并且auto.leader.rebalance.enable=true,就会重新做leader election,让leader能够回到这个preferred的leader上。

Replication参数


我们前面也提到了一个partition可以有多个replication,那么究竟几个replication呢,这是由replication Factor决定的,当我们设置这个值为N的时候,就意味着我们有1个leader,N-1个follower。那我们如何来设置这个参数呢?一般考虑以下几个因素:

  1. Availability:这个比较容易理解,要想availability提高,那么就需要提高replication的数目。

  2. Durability:和Availability类似,因为replication都有数据的拷贝,也就意味着一个节点出现比如disk的问题,那么数据并不会丢失,同样的,replication的数目越高,Durability越好。

  3. Throughput:这里有两个因素需要考虑,越多的replication就意味着我们需要同步数据的traffic越多,但同时因为我们可以从follower进行读,也就意味着我们的读的速度会越高。这里需要两者综合考虑。

  4. End-to-end latency:假如我们的producer设置的是全部replica成功才返回,那么越多的replication数目则意味着latency越大。

  5. Cost:这个其实影响是最大的,也是我们通常来说只设置成3的主要原因,因为每多一份replication,你就需要一份的cost来支付存储,网络等等资源。所以通常来说会选择3来达到一定的availability和durability,又不会有太多的cost。

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

Kafka进阶之Replication,从理论到实践,img,第1张

Kafka进阶之Replication,从理论到实践,img,第2张

Kafka进阶之Replication,从理论到实践,img,第3张

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)

Kafka进阶之Replication,从理论到实践,img,第4张

1200页Java架构面试专题及答案

小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞

Kafka进阶之Replication,从理论到实践,第5张

Kafka进阶之Replication,从理论到实践,第6张

百度、字节、美团等大厂常见面试题

Kafka进阶之Replication,从理论到实践,第7张

11145616171)]

百度、字节、美团等大厂常见面试题

[外链图片转存中…(img-iiQBQUk9-1711145616171)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

 
 168支玫瑰代表什么  巍然  管仲论坛  绿色世纪  千花网  掣肘难书阅读答案 
打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Kafka进阶之Replication,从理论到实践》
文章链接:https://goodmancom.com/wl/176120.html