是否应该在Kafka群集中的所有代理节点之间复制主题分区?

问题描述 投票:2回答:2

尽管有类似上述问题的答案。我的好奇心在于,假设n1-5个节点位于群集中,其中主题t1位于n1,n2和n3上,主题t2位于n3,n4,n5上。现在,如果假设p1将消息推送到t1中,则c1从t1中消耗,类似地,p2和c2对于t2消耗。

我在哪里有疑问?

  1. 假设节点n3- n5全部关闭,现在p1和c1仍将与群集建立活动连接,因为无论如何发布和使用都会失败,因此这是无用的。 (度量标准connection_count大于0表示存在来自生产者或消费者的集群连接)

  2. 将主题复制到Kafka集群中的所有节点的正确方法吗?

  3. 为什么在引导服务器属性中提供多个节点地址详细信息,一个地址就足够了?

注意:我是Kafka世界的初学者,仍在尝试本地设置以发现现实世界中可能发生的潜在问题。

apache-kafka kafka-consumer-api kafka-producer-api kafka-topic
2个回答
1
投票
  1. 为什么会失败?节点n1和n2仍在运行,并且假设该主题具有replication-factor=3,所有数据仍应可访问。

  2. 我会说这取决于。在所有节点上复制主题不会有任何危害,但是有时它是多余的(尤其是在集群中有大量代理时)。为了获得高可用性,您应该至少设置replication-factor=3。例如,这允许拆卸一个经纪人进行维护,而另一个经纪人意外失败。

  3. 请注意,无论bootstrap.servers中指定了哪个服务器,客户端(生产者或消费者)都使用所有代理。


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

  4. 经纪人1:

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

经纪人2:

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

经纪人3:

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

请注意,数据是分布式的(并且Broker 3

不包含topic 2
的任何数据)。

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

经纪人1:

replication-factor

经纪人2:

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

经纪人3:

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

现在假定代理2

已失败。 经纪人1和3仍然可以提供主题1的数据。因此,将+-------------------+ | Topic 1 | | Partition 1 | | | | | | | | | +-------------------+ 设为3总是一个好主意,因为它允许出于维护目的而删除一个经纪人,也可以删除另一个经纪人。意外下降。 因此,Apache-Kafka提供强大的持久性和容错保证。

关于领导人的说明:

在任何时候,只有一个代理可以成为该分区的领导者,并且只有该领导者可以接收和提供该分区的数据。其余的代理将仅同步数据(同步副本)。另请注意,当replication-factor设置为1时,当代理失败时,leader无法移动到其他位置。通常,当分区的所有副本失败或脱机时,replication-factor将自动设置为leader

0
投票

像在分布式系统中一样,数据的复制确保了一致性。 Kafka文档的-1中有一个不错的部分:

© www.soinside.com 2019 - 2024. All rights reserved.