消息队列之kafka(HA)

发布时间:2020-07-02 00:30:22 作者:原生zzy
来源:网络 阅读:447

1. kafka的HA

消息队列之kafka(HA)

(1)zookeeper在kafka中的作用:

   - Zookeeper帮助kafka集群运行:存储一些元数据,还会帮助kafka集群进行管理(选主)
   - 存储关于消费者消费了哪些topic到那个进度的数据。

(2)kafka HA解决的问题:

   存在的问题:kafka在0.8以前的版本中,并不提供high available机制,一旦一个或者多个broker宕机,则宕机期间其上的partition都无法继续提供服务。若该broker永远不能回复或磁盘故障,则其上数据丢失。但是对于分布式来说尤其是集群上升到一定规模,一台或者多台机器宕机的可能性大大提高,对failover要求非常高。因此kafka开始在0.8版本以后提供高可用机制。
   解决的问题:Kafka的HA就是在数据层面上,即丢失一份数据,Consumer仍然可以正常消费(也表示一个broker宕机了,其上面的数据不会丢失)。
  解决的方案:使用replication(副本,对同一个数据进行数据备份)。其中副本之间有主副本和从副本之分(由zookeeper选出),每一个broker都会存储一些主副本,保证kafka集群的负载均衡

(3)kafka HA写数据的流程:

   - 使用zookeeper给多个副本的broker进行选主,选出一个leader
    这个leader相当于zookeeper中的一个临时节点,如果leader宕机之后,zookeeper会再次选主,如果ISR列表中所有的follower都宕机了,此时会等待,等待ISR列表有一个follower重新可以使用的时候,这是就将这个follower变成leader。(ISR是kafka在zookeeper中维护的一个可使用的集群节点列表)
   - 在进行写数据的时候,首先向leader写入数据(主副本)
   - 其他的broker(follower)到leader中fetch数据(从副本)
   - 数据抓取完成后,会向leader返回(ack)信息
解释 :在leader中会维护一个ISR(同步副本的列表),列表中存放的是所有的有效的follwer, 在这个列表中如果follower的数据和leader的数据落后太多的话(默认是4000条数据)或者一定时间没有向leader发送fetch请求(默认是10秒),这时候会自动的将这个follwer剔除这个ISR列表中,在这个ISR列表中,每一个follower进行fetch完成数据,就会向leader发送数据,最终leader如果接受到所有的follower反馈,然后向producer进行反馈,发送ACK。
其中ACK表示Producer写入数据的返回级别:

    0 表示只要producer发送数据,就表示写数据成功
    1 表示只要leader写入成功,就表示写数据成功
    all /-1 表示所有的副本写成功,才认为数据写入成功
推荐阅读:
  1. Centos7 RabbitMQ消息队列集群
  2. 高可用集群之heartbeat安装配置

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

kafka ha 列之

上一篇:php-fpm的CentOS开机自启脚本

下一篇:浅析runtime包中的三个方法Gosched、Goexit、GOMAXPROCS

相关阅读

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

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