【问题标题】:Separate zookeeper install or not using kafka 10.2?单独的zookeeper安装或不使用kafka 10.2?
【发布时间】:2017-12-18 19:56:23
【问题描述】:

我想使用 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 与独立版本相比有哪些缺点或配置限制?

【问题讨论】:

  • 你好@redgiant,我打算在同一个盒子上运行kafka和zookeeper,我想知道你是否遇到任何问题?另外,您是否使用监督流程来管理您的动物园管理员?谢谢。

标签: apache-kafka apache-zookeeper


【解决方案1】:

这些是不在与 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 操作系统页面缓存来减少磁盘 I/O。当其他应用程序在与 Kafka 相同的机器上运行时,您会使用从 Kafka 缓存中带走的其他数据减少或“污染”页面缓存。

  4. 服务器故障会导致更多基础架构瘫痪

如果盒子重新启动,您会同时失去 zookeeper 和 broker。

【讨论】:

  • 谢谢,我同意 1:1 曲线在超过 5 个节点时发散是没有用的。我确实有 2 个单独的 SSD,我在其中配置了 kafka vs zookeeper 数据/日志/分区。虚拟机有 32G 内存等等,所以我应该对我们每天 300m 的吞吐量感到满意。我现在将继续我的 5/5 嵌入式使用,并继续对 5/3 单独设置进行原型设计。
【解决方案2】:

尽管 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 地址。

【讨论】:

  • 对,我知道如何配置可能的场景。我的问题具体是关于为什么你不会将它们放在一起,我能想到的唯一事情是:共享磁盘、共享操作系统文件句柄限制。
  • 这篇文章给出了一个很好的总结:grokbase.com/t/kafka/users/144rzmzp0w/…。另外,1)如果有不同的应用程序(除了 Kafka)依赖 ZooKeeper,在 ZooKeeper 节点上没有 Kafka Broker 似乎是合理的。 2)服务器故障会影响两者之一,而不是两者。
  • 谢谢,我现在将继续使用我的 5/5 嵌入式 Zookeeper 设置,并继续研究未来的 5/3 拆分设置。
【解决方案3】:

我们一直在运行您所描述的设置,有 3 到 5 个节点,每个节点运行一个 kafka 代理和在相同节点上随 kafka 分发一起提供的 zookeeper。到目前为止,该设置没有问题,但我们的数据吞吐量并不高。

如果我们要扩展超过 5 个节点,我们会将它们分开,这样我们就只扩展 kafka 代理,但保持 zookeeper 集成很小。如果 zookeeper 和 kafka 开始过度竞争 I/O,那么我们会将它们的数据目录移动到单独的驱动器。如果它们开始争夺 CPU,那么我们会将它们移动到单独的盒子中。

总而言之,这取决于您的预期吞吐量以及在开始引起争用时升级设置的难易程度。只要您可以灵活地使用更多节点升级您的设置并在以后引入分离,您就可以从小处着手,将 kafka 和 zookeeper 放在一起。如果您认为以后很难添加,最好从一开始就单独运行它们。我们已经在同一地点运行它们 18 多个月了,到目前为止还没有遇到资源争用。

【讨论】:

  • 是的,这就是我正在做的。我使用 Ansible 安装和配置从基本操作系统 VM 开始的所有内容,因此如果需要,我可以在以后轻松地从 5/5 设置更改为 5/3 拆分设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 2020-06-19
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多