消息队列之kafka(HA)

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 表示所有的副本写成功,才认为数据写入成功

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/192643.html

(0)
上一篇 2021年11月15日
下一篇 2021年11月15日

相关推荐

发表回复

登录后才能评论