kafka是如何保证消息的可靠性与一致性

发布时间:2021-12-15 09:27:26 作者:柒染
来源:亿速云 阅读:305

这篇文章将为大家详细讲解有关kafka是如何保证消息的可靠性与一致性,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

在kafka中主要通过ISR机制来保证消息的可靠性。下面通过几个问题来说明kafka如何来保证消息可靠性与一致性

在kafka中ISR是什么?

在zk中会保存AR(Assigned Replicas)列表,其中包含了分区所有的副本,其中 AR = ISR+OSR

kafka如何控制需要同步多少副本才可以返回确定到生产者消息才可用?
对于kafka节点活着的条件是什么?
kafka分区partition挂掉之后如何恢复?

在kafka中有一个partition recovery机制用于恢复挂掉的partition。

每个Partition会在磁盘记录一个RecoveryPoint(恢复点), 记录已经flush到磁盘的最大offset。当broker fail 重启时,会进行loadLogs。首先会读取该Partition的RecoveryPoint,找到包含RecoveryPoint点上的segment及以后的segment, 这些segment就是可能没有完全flush到磁盘segments。然后调用segment的recover,重新读取各个segment的msg,并重建索引。

优点:

  1. 以segment为单位管理Partition数据,方便数据生命周期的管理,删除过期数据简单

  2. 在程序崩溃重启时,加快recovery速度,只需恢复未完全flush到磁盘的segment即可

什么原因导致副本与leader不同步的呢?

一个partition的follower落后于leader足够多时,被认为不在同步副本列表或处于滞后状态。

正如上述所说,现在kafka判定落后有两种,副本滞后判断依据是副本落后于leader最大消息数量(replica.lag.max.messages)或replicas响应partition leader的最长等待时间(replica.lag.time.max.ms)。前者是用来检测缓慢的副本,而后者是用来检测失效或死亡的副本

如果ISR内的副本挂掉怎么办?

1. 两种选择:服务直接不可用一段时间等待ISR中副本恢复(祈祷恢复的副本有数据吧) 或者 直接选用第一个副本(这个副本不一定在ISR中)作为leader,这两种方法也是在可用性和一致性之间的权衡。

2. 服务不可用方式这种适用在不允许消息丢失的情况下使用,适用于一致性大于可用性,可以有两种做法

3. 直接选择第一个副本作为leader的方式,适用于可用性大于一致性的场景,这也是kafka在isr中所有副本都死亡了的情况采用的默认处理方式,我们可以通过配置参数 unclean.leader.election.enable来禁止这种行为,采用第一种方法。

那么ISR是如何实现同步的呢?

broker的offset大致分为三种:base offset、high watemark(HW)、log end offset(LEO)

kafka是如何保证消息的可靠性与一致性

  1. broker 收到producer的请求

  2. leader 收到消息,并成功写入,LEO 值+1

  3. broker 将消息推给follower replica,follower 成功写入 LEO +1 …

  4. 所有LEO 写入后,leader HW +1

  5. 消息可被消费,并成功响应

上述过程从下面的图便可以看出:kafka是如何保证消息的可靠性与一致性

解决上一个问题后,接下来就是kafka如何选用leader呢?

选举leader常用的方法是多数选举法,比如Redis等,但是kafka没有选用多数选举法,kafka采用的是quorum(法定人数)。

quorum是一种在分布式系统中常用的算法,主要用来通过数据冗余来保证数据一致性的投票算法。在kafka中该算法的实现就是ISR,在ISR中就是可以被选举为leader的法定人数。

关于kafka是如何保证消息的可靠性与一致性就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. RabbitMQ和Kafka怎么保证消息队列的可靠性传输
  2. RocketMQ事务消息是怎么保证数据的一致性

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kafka

上一篇:WCF基础知识有哪些

下一篇:WCF是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》