为什么kafka集群中的单节点多个代理不是首选?

时间:2017-05-22 10:06:54

标签: apache-kafka kafka-consumer-api

我正在尝试将kafka投入生产。想知道为什么单节点,多代理kafka实例不是首选。很少有人建议如果在单个节点上使用多个代理,则应为它们分配单独的磁盘空间,但这样做的原因尚不清楚。

有人可以解释单个代理与多个代理kafka实例在单个节点上的影响。

4 个答案:

答案 0 :(得分:2)

如果单个节点上有多个代理并且有一个磁盘,那么所有代理都必须读取并写入单个磁盘。这使得系统进行大量随机读取和随机写入,而Kafka集群的性能将会很差。

相反,如果单个节点上有多个磁盘,并且每个代理读取和写入不同的磁盘,则可以避免随机读/写问题。

<强>更新

此外,如果您在一台计算机上拥有太多代理,则网络带宽可能成为瓶颈。由于所有经纪人都必须共享网络带宽。

答案 1 :(得分:0)

与大多数事情一样,这个问题的答案是“它取决于”。你的问题本质上是通用的。如果您对系统的哪些属性感兴趣可以更具体,那将会有所帮助 - 性能,可用性等。从性能角度来看,如果有很多资源,那么在box(节点)上有很多实例就可以了。但是从可用性的角度来看,它不会帮助你,即你的系统会出现单点故障,并且如果一个节点发生故障就会面临巨大的风险(除非你有多个这样的高资源节点可供你使用:-))< / p>

答案 2 :(得分:0)

如果同一节点上有多个代理,则可能仅在单个节点中得到主题的所有分区。如果该节点发生故障,则特定主题将无响应。

答案 3 :(得分:0)

每个 topic ,都是特定的数据流(类似于数据库中的表)。主题分为 partitions (任意多个),分区中的每条消息都会获得一个增量ID,称为偏移量,如下所示。

分区0:

+---+---+---+-----+
| 0 | 1 | 2 | ... |
+---+---+---+-----+

分区1:

+---+---+---+---+----+
| 0 | 1 | 2 | 3 | .. |
+---+---+---+---+----+

现在,Kafka集群由多个经纪人组成。每个代理都有一个ID标识,并且可以包含某些主题分区。

2个主题的示例(每个主题分别具有3个分区和2个分区):

经纪人1:

+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|     Topic 2       |
|   Partition 1     |
+-------------------+

经纪人2:

+-------------------+
|      Topic 1      |
|    Partition 2    |
|                   |
|                   |
|     Topic 2       |
|   Partition 0     |
+-------------------+

经纪人3:

+-------------------+
|      Topic 1      |
|    Partition 1    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

请注意,数据是分布式的(并且经纪人3 不保存任何主题2 的数据)。

主题,应该具有replication-factor> 1(通常为2或3),以便在代理崩溃时,另一个代理可以提供主题数据。例如,假设我们有一个包含2个分区的主题,其中replication-factor设置为2,如下所示:

经纪人1:

+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

经纪人2:

+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|     Topic 1       |
|   Partition 0     |
+-------------------+

经纪人3:

+-------------------+
|      Topic 1      |
|    Partition 1    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

现在假定经纪人2 失败了。 经纪人1 和3仍然可以为主题1提供数据。因此,replication-factor为3始终是一个好主意,因为它允许出于维护目的以及出于维护目的而删除一个经纪人。另一个被意外删除。 因此,Apache-Kafka提供了强大的耐用性和容错保证。