分享

Apache Kafka 2.7.0,新版本加速移除Zookeeper

阿飞 2020-12-28 10:50:36 发表于 常识型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 2582

问题导读

1.为何说Zookeeper限制了Kafka集群的规模扩展?
2.Apache Kafka 2.7.0新的AlterIsr API有什么作用?
3.Zookeeper在旧版本kafka中扮演什么角色?


分布式发布与订阅系统Apache Kafka社区,发布了2.7.0这个迟来的版本,该版本的几个重点更新,包括持续将Apache Kafka中的ZooKeeper替换掉,加入了新的内部代理API,并且增加新的Core Raft共识演算法,现在Apache Kafka中具有单独包含核心共识协定的Core Raft模块。另外,分层储存的工作也持续进行中,以提供无限扩展和更快达到重新均衡的能力。

Zookeeper原本是在Apache Kafka中,扮演协调代理的角色,所有代理服务器启动时,都会连接到Zookeeper进行注册,当代理状态发生变化时,Zookeeper便会储存这些数据,Kafka的代理会通过Zookeeper与其他代理沟通进行同步,也就是说Kafka没有Zookeeper,也就无法顺利运行。

不过,Zookeeper并非Kafka的一部分,因此运行每一个Kafka集群,都必须部署两套系统,这产生了许多问题,包括造成多余资源的耗费,包括更多网路、监控功能以及安全性等资源配置,而Kafka集群规模增加,也就代表Zookeeper必须要跟着扩展,必须使用更多的存取,且Zookeeper作为外部的数据储存服务,当数据越来越多,使得控制器载入时间越来越长,限制了Kafka集群的规模扩展。

因此在2019年的时候,Apache Kafka社区就开始移除Zookeeper的工作,要由Kafka本身提供数据管理功能,而Apache Kafka 2.7.0总共有7个更新,与移除Zookeeper工作有关,包括了KIP-497新增内部代理API,来替换原本的内部同步副本(In-Sync Replica,ISR)。

目前Kafka分区负责程序(Partition Leader)和ISR信息,皆储存在Zookeeper中,控制器与分区负责程序都可以更新此状态,但由于任一方都可以更新状态,也就存在共享信息的机制,而这会使ISR的更新出现延迟,也就代表数据请求可能会收到旧信息。

Apache Kafka 2.7.0加入了一个新的AlterIsr API,赋予控制器独占能力,更新分区负责程序和ISR的状态,新API的好处是让数据请求,总能获得最新的状态。官方提到,要删除ZooKeeper,添加此API是重要的一步。

因为Kafka集群的规模日益增加,用户需要在Kafka中储存更多的数据,因此他们开始引入分层储存的概念。Kafka的储存现在分为本地端与远端两层,用户可以将数据在本地暂存之后,丢到远端进行较长期的储存,如此,本地端储存层留存资料的时间,将会从数天降到数小时,使用HDFS或S3等储存系统的远端层,就可以将资料留存数天甚至数月的时间。



最新经典文章,欢迎关注公众号




原文链接
https://mp.weixin.qq.com/s/C2s5RMH6H0dXLtbvTVzGxA

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条