在同一台机器上的两个 docker conatiners 中创建 kafka broker 和 zookeeper 的优缺点是什么

what are the pros and cons of creating kafka broker and zookeeper in two docker conatiners in same machine

我正在创建一个包含 3 个 kafka broker 和 3 个 zookeeper 的 kafka 数据管道,所以我需要使用 6 台机器来部署 3 个 broker 和 3 个 zookepers。 有两种方法可以减少使用 no/of 台机器

1) 在同一台物理机中保留1个kafka broker和1个zookeeper 我在网上搜索,在quora中发现会存在延迟问题,因为kafka broker和zookeeper都使用相同的RAM

2) 使用 docker 并在一台机器中分别为 zookeeper 和 broker 创建两个 continer 并限制 zookeeper 容器的 RAM,以便 kafka broker 占用更多 RAM 并减少延迟

我想了解我的两个用例的更多优缺点

使用容器将 zookeeper 和 broker 保持在同一台机器上是一个好习惯吗

提前致谢

如果您仅将 Zookeeper 用于 Kafka 而没有其他 processes/application 使用该 Zookeeper 集群,则 Zookeeper 将使用非常少的内存。 Kafka 也不会在内存中保存大量数据。因此,在同一台机器上 运行 一个 Kafka 和一个 Zookeeper 节点是安全的。您可以通过控制其最大 JVM 堆 space 来限制 Zookeeper 使用更少的内存。 如果 OS 缓存的可用内存较少,则 Kafka 性能可能会受到影响。由于 Zookeeper 不会占用太多内存,所以你可以忽略它。

kafka 的一个非常显着的特点是它利用磁盘上的顺序 read/writes 来实现其高性能。让另一个应用程序主动使用同一个物理硬盘驱动器(就像 zookeeper 会这样做,因为它维护一个变更日志),将降低您可以从 kafka 获得的最大吞吐量。

虽然这并不排除共享服务器,而且正如所说,ZK 在使用的​​资源方面是一个整体非常轻的服务。如果您需要高水平的性能(每个代理每秒传输数百兆数据),它只是不包括共享驱动器

您可能还想考虑一下,您将在这里共同考虑失败原因,如果可以避免的话,这通常不是最佳做法。如果您无法选择 use/rent 3 台用于 ZK 的非常小的机器,但正在使用给定的服务器库存,这可能是一个可以接受的权衡。