使用kafka 10.2分开zookeeper安装与否?

时间:2017-07-13 20:53:09

标签: apache-kafka apache-zookeeper

我想使用Kafka 10.2附带的嵌入式Zookeeper 3.4.9,而不是单独安装Zookeeper。每个Kafka经纪人在localhost上总是有一个1:1的Zookeeper。

因此,如果我在主机A,b,C,D和E上有5个代理,每个代理都运行一个Kafka和Zookeeper实例,那么只运行Kafka提供的Zookeeper就足够了吗?

如果嵌入式3.4.9 Zookeper与独立版本相比有什么缺点或配置限制?

3 个答案:

答案 0 :(得分:8)

有些理由不在与Kafka经纪人相同的盒子上运行zookeeper。

  1. 他们的比例不同

    5 zk和5 Kafka工作,但6:6或11:11不工作。即使对于相当大的Kafka群集,您也不需要超过5个zookeeper节点。与Kafka不同,Zookeeper会将数据复制到所有节点,因此当您添加更多节点时,它会变慢。

  2. 他们争夺磁盘I / O

    Zookeeper对磁盘I / O延迟非常敏感。您需要将它放在与Kafka提交日志不同的物理磁盘上,否则您将面临大量发布到Kafka的风险,这会使zookeeper失灵并导致它退出整体而导致潜在问题。

  3. 他们争夺页面缓存

    Kafka使用Linux OS页面缓存来减少磁盘I / O.当其他应用程序与Kafka在同一个盒子上运行时,你会减少或者污染"污染"页面缓存包含其他数据,这些数据从Kafka的缓存中删除。

  4. 服务器故障会占用更多基础设施

  5. 如果盒子重新启动,你会同时失去一个动物园管理员和经纪人。

答案 1 :(得分:3)

即使ZooKeeper附带了每个Kafka版本,但这并不意味着它们应该在同一台服务器上运行。实际上,建议在生产环境中,它们运行在不同的服务器上。

在Kafka代理配置中,您可以指定ZooKeeper地址,它可以是本地地址或远程地址。这是来自经纪人配置(config/server.properties):

# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=localhost:2181

您可以将localhost替换为任何其他可访问的服务器名称或IP地址。

答案 2 :(得分:0)

我们已经按照您的描述运行了一个设置,有3到5个节点,每个节点运行一个kafka代理,并且在同一节点上运行kafka分发的zookeeper。到目前为止,该设置没有任何问题,但我们的数据吞吐量并不高。

如果我们要扩展到超过5个节点,我们将它们分开,这样我们只能扩展kafka经纪人,但保持动物园管理员合奏小。如果zookeeper和kafka开始竞争I / O太多,那么我们将他们的数据目录移动到不同的驱动器。如果他们开始竞争CPU,那么我们将它们移动到单独的框中。

总而言之,它取决于您的预期吞吐量以及如果它开始引起争用,您可以轻松升级设置。只要您可以灵活地使用更多节点升级您的设置并在以后引入分离,您可以从小而轻松开始,kafka和zookeeper位于同一位置。如果您认为以后很难添加,最好从一开始就单独开始运行它们。我们已将它们共同运营了18个多月,目前尚未遇到资源争用。