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

red*_*ant 5 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与独立版本相比有什么缺点或配置限制?

Han*_*sen 8

这些是没有像卡夫卡经纪人在同一个盒子上运行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. 服务器故障会占用更多基础架构

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


vah*_*hid 5

尽管 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
Run Code Online (Sandbox Code Playgroud)

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