Kafka 10.2是否需要单独安装Zookeeper?

8
我想使用随Kafka 10.2提供的嵌入式Zookeeper 3.4.9,而不是单独安装Zookeeper。每个Kafka代理始终在本地主机上拥有1:1的Zookeeper。
因此,如果我在A、B、C、D和E上有5个代理,每个代理上都运行着单个Kafka和Zookeeper实例,则仅运行Kafka提供的Zookeeper是否足够?
与独立版本相比,嵌入式3.4.9 Zookeeper有哪些缺点或配置限制(如果有)?

你好 @redgiant,我打算在同一台机器上运行kafka和zookeeper,想知道你是否遇到过任何问题?另外,你是否使用监管进程来管理你的zookeeper?谢谢。 - jumping_monkey
3个回答

11

有几个原因不要在相同的服务器上运行Zookeeper和Kafka brokers。

  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操作系统页面缓存来减少磁盘I/O。当其他应用程序在与Kafka相同的服务器上运行时,会减少或“污染”页面缓存,从而影响Kafka的缓存。

  4. 服务器故障会影响更多基础结构

如果该服务器重新启动,您将同时失去Zookeeper和broker。


谢谢,我同意1:1曲线在超过5个节点时会发散,因此不太有用。我有两个单独的SSD,可以将kafka和zookeeper的数据/日志/分区配置到其中。虚拟机配备了32G内存等强大的硬件,所以我们每天300m的吞吐量应该没问题。我现在将继续使用5/5嵌入式设置,并继续原型设计5/3的单独设置。 - redgiant

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

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


我知道如何配置可能的场景。我的问题是关于为什么不将它们放在同一位置,我能想到的唯一原因是:共享磁盘、共享操作系统文件句柄限制。 - redgiant
这篇文章提供了一个很好的总结:http://grokbase.com/t/kafka/users/144rzmzp0w/kafka-zookeeper-co-location#20140424mcqakbn96gvynnq9kchvrb3bbr。此外, 1)如果有不同的应用程序(除Kafka之外)依赖于ZooKeeper,那么在ZooKeeper节点上不要有Kafka Broker似乎是合理的。 2)服务器故障将影响其中之一,而不是两者。 - vahid
谢谢,我现在会继续使用我的5/5嵌入式Zookeeper设置,并继续研究未来的5/3分裂设置。 - redgiant

2
我们一直在运行一个与您描述的相同的设置,每个节点都运行一个kafka代理和与kafka分发版一起提供的zookeeper。到目前为止,这种设置没有任何问题,但我们的数据吞吐量不高。如果我们要扩展到5个以上的节点,我们会将它们分开,这样我们只会扩展kafka代理,但保持zookeeper集合较小。如果zookeeper和kafka开始争夺I/O,那么我们会将它们的数据目录移动到单独的驱动器上。如果它们开始争夺CPU,那么我们会将它们移到单独的盒子中。
总之,这取决于您预期的吞吐量以及如果它开始引起争用,您可以轻松地升级设置的灵活性。您可以从小处开始,简单易行地将kafka和zookeeper放置在同一位置,只要您有灵活性,在以后增加更多节点并引入分离即可。如果您认为以后很难添加,最好从一开始就将它们分开运行。我们已经将它们共同运行18个月以上,迄今为止还没有遇到资源争用的情况。

是的,这就是我正在做的事情。我使用Ansible来安装和配置从基础操作系统VM到上层的所有内容,因此如果需要,稍后可以轻松更改从5/5设置到5/3分割设置。 - redgiant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接