尽管有类似上述问题的答案。我的好奇心在于,假设n1-5个节点位于群集中,其中主题t1位于n1,n2和n3上,主题t2位于n3,n4,n5上。现在,如果假设p1将消息推送到t1中,则c1从t1中消耗,类似地,p2和c2对于t2消耗。
我在哪里有疑问?
假设节点n3- n5全部关闭,现在p1和c1仍将与群集建立活动连接,因为无论如何发布和使用都会失败,因此这是无用的。 (度量标准connection_count大于0表示存在来自生产者或消费者的集群连接)
将主题复制到Kafka集群中的所有节点的正确方法吗?
为什么在引导服务器属性中提供多个节点地址详细信息,一个地址就足够了?
注意:我是Kafka世界的初学者,仍在尝试本地设置以发现现实世界中可能发生的潜在问题。
为什么会失败?节点n1和n2仍在运行,并且假设该主题具有replication-factor=3
,所有数据仍应可访问。
我会说这取决于。在所有节点上复制主题不会有任何危害,但是有时它是多余的(尤其是在集群中有大量代理时)。为了获得高可用性,您应该至少设置replication-factor=3
。例如,这允许拆卸一个经纪人进行维护,而另一个经纪人意外失败。
请注意,无论bootstrap.servers
中指定了哪个服务器,客户端(生产者或消费者)都使用所有代理。
[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 | | | | | | | | | +-------------------+
请注意,数据是分布式的(并且Broker 3
不包含topic 2
Topics,应具有[C0 1(通常为2或3)”,以便在代理崩溃时,另一个代理可以提供主题数据。例如,假设我们有一个包含2个分区的主题,replication-factor
设置为2,如下所示:
经纪人1:
replication-factor
经纪人2:
+-------------------+ | Topic 1 | | Partition 0 | | | | | | | | | +-------------------+
经纪人3:
已失败。 经纪人1和3仍然可以提供主题1的数据。因此,将+-------------------+ | Topic 1 | | Partition 0 | | | | | | Topic 1 | | Partition 0 | +-------------------+
现在假定代理2
+-------------------+
| Topic 1 |
| Partition 1 |
| |
| |
| |
| |
+-------------------+
设为3总是一个好主意,因为它允许出于维护目的而删除一个经纪人,也可以删除另一个经纪人。意外下降。 因此,Apache-Kafka提供强大的持久性和容错保证。关于领导人的说明:
在任何时候,只有一个代理可以成为该分区的领导者,并且只有该领导者可以接收和提供该分区的数据。其余的代理将仅同步数据(同步副本)。另请注意,当replication-factor
设置为1时,当代理失败时,leader无法移动到其他位置。通常,当分区的所有副本失败或脱机时,replication-factor
将自动设置为leader
。像在分布式系统中一样,数据的复制确保了一致性。 Kafka文档的-1
中有一个不错的部分: