Apache Kafka 删除 Apache ZooKeeper 的依赖

Posted @SmartSi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache Kafka 删除 Apache ZooKeeper 的依赖相关的知识,希望对你有一定的参考价值。

目前,Apache Kafka 使用 Apache ZooKeeper 来存储元数据,分区位置和主题配置之类的数据存储在 Kafka 之外一个单独的 ZooKeeper 集群中。2019 年,为了打破这种依赖关系并将元数据管理交由 Kafka,为此引入这个KIP-500 计划[1]。

那么 ZooKeeper 有什么问题吗?其实,问题不在于 ZooKeeper,而在于外部元数据管理的理念。

拥有两个系统会导致大量的重复。毕竟,Kafka 是一个分布式日志系统,在此之上提供了发布-订阅 API。ZooKeeper 也是一个分布式日志系统,在此之上提供了文件系统 API。这两个系统都有自己的网络通信、安全、监控和配置方法。同时使用这两个系统会给开发人员操作的复杂性增加一倍,这增加了不必要的学习成本,并增加了错误配置导致安全漏洞的风险。

在外部存储元数据并不是一种很有效的方式。我们至少需要运行三个额外的 Java 进程,有时可能更多。事实上,我们会经常看到 Kafka 集群的 ZooKeeper 节点与 Kafka 节点一样多!另外 ZooKeeper 中的数据也会反映到 Kafka 控制器上,会导致双重缓存。更糟糕的是,在外部存储元数据限制了 Kafka 的可扩展性。当 Kafka 集群启动,或者选举新的控制器时,控制器必须从 ZooKeeper 上加载集群的完整状态。随着元数据量的增加,加载过程也会变的更长。这限制了 Kafka 可以存储的分区数量。最后,在外部存储元数据可能会造成控制器内存状态与外部状态的不同步。</

以上是关于Apache Kafka 删除 Apache ZooKeeper 的依赖的主要内容,如果未能解决你的问题,请参考以下文章

kafka删除topic后再创建同名的topic报错(ERROR org.apache.kafka.common.errors.TopicExistsException)

windows环境下搭建kafka

Apache Kafka 持久化所有数据

使用 Apache Camel Source 从 S3 到 Kafka

卡夫卡动物园管理员的目的

「企业事件枢纽」Apache Kafka支持ACID事务吗?