在同一台机器上的两个docker Conatiner中创建kafka broker和zookeeper的利弊是什么

在同一台机器上的两个docker Conatiner中创建kafka broker和zookeeper的利弊是什么,docker,apache-kafka,apache-zookeeper,kafka-consumer-api,kafka-producer-api,Docker,Apache Kafka,Apache Zookeeper,Kafka Consumer Api,Kafka Producer Api,我正在创建一个包含3个卡夫卡代理和3个动物园管理员的卡夫卡数据管道,因此我需要使用6台机器部署3个代理和3个动物园管理员。 有两种方法可以减少使用的机器数量 1) 在同一台物理机器中保留1名卡夫卡经纪人和1名动物园管理员 我在网上搜索并在quora中发现,由于kafka broker和zookeeper都使用同一个RAM,所以会出现延迟问题 2) 使用docker并在机器中为zookeeper和broker分别创建两个continer,并限制zookeeper容器的RAM,以便kafka bro

我正在创建一个包含3个卡夫卡代理和3个动物园管理员的卡夫卡数据管道,因此我需要使用6台机器部署3个代理和3个动物园管理员。 有两种方法可以减少使用的机器数量

1) 在同一台物理机器中保留1名卡夫卡经纪人和1名动物园管理员 我在网上搜索并在quora中发现,由于kafka broker和zookeeper都使用同一个RAM,所以会出现延迟问题

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

我想知道我的两个用例的更多优点和缺点

使用容器将zookeeper和broker保存在同一台机器中是否是一种好的做法


提前感谢

如果您仅为Kafka使用Zookeeper,而没有其他进程/应用程序使用该Zookeeper群集,那么Zookeeper将使用非常少的内存。卡夫卡也没有在内存中保存很多数据。因此,在同一台机器上运行一个Kafka和一个Zookeeper节点是安全的。您可以通过控制Zookeeper的最大JVM堆空间来限制Zookeeper使用更少的内存。
如果操作系统缓存的可用内存较少,则Kafka性能可能会产生影响。因为Zookeeper不会使用太多内存,所以您可以忽略这一点。

如果您仅为Kafka使用Zookeeper,而没有其他进程/应用程序使用该Zookeeper集群,那么Zookeeper将使用非常少的内存。卡夫卡也没有在内存中保存很多数据。因此,在同一台机器上运行一个Kafka和一个Zookeeper节点是安全的。您可以通过控制Zookeeper的最大JVM堆空间来限制Zookeeper使用更少的内存。
如果操作系统缓存的可用内存较少,则Kafka性能可能会产生影响。因为Zookeeper不会占用太多内存,所以您可以忽略这一点。

卡夫卡的一个非常明显的特点是,它利用磁盘上的顺序读/写来实现高水平的性能。让另一个应用程序主动使用同一个物理硬盘驱动器(就像zookeeper一样,因为它维护一个变更日志),将降低kafka的最大吞吐量

但这并不排除共享服务器,而且正如前面所说的,就所使用的资源而言,ZK是一项总体上非常轻的服务。如果您需要高水平的性能(每个代理每秒输出数百兆的数据),则不需要共享驱动器


<>你可能还想考虑一下,你会在这里互斥失败原因,如果你能避免失败的话,这通常不是最好的事情。如果您没有选择为ZK使用/租用3台非常小的机器,但却在给定的服务器库存上工作,那么这是一个可以接受的折衷方案。

kafka的一个非常独特的功能是,它利用磁盘上的顺序读/写来实现高水平的性能。让另一个应用程序主动使用同一个物理硬盘驱动器(就像zookeeper一样,因为它维护一个变更日志),将降低kafka的最大吞吐量

但这并不排除共享服务器,而且正如前面所说的,就所使用的资源而言,ZK是一项总体上非常轻的服务。如果您需要高水平的性能(每个代理每秒输出数百兆的数据),则不需要共享驱动器

<>你可能还想考虑一下,你会在这里互斥失败原因,如果你能避免失败的话,这通常不是最好的事情。如果您没有选择为ZK使用/租用3台非常小的机器,但正在使用给定的服务器库存,那么这是一个可以接受的折衷方案