主题分区是否应该跨 Kafka 集群中的所有代理节点进行复制?
Should topic partitions be replicated across all broker nodes in a Kafka cluster?
虽然上面类似的问题都有答案。我的好奇心在于假设 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集群中的所有节点是否正确?
为什么我们在bootstrap服务器中给出多个节点地址的详细信息属性一个地址就足够了吗?
注意:我是 Kafka 世界的初学者,仍在尝试使用本地设置来发现现实世界中可能出现的潜在问题。
为什么会失败?节点 n1 和 n2 仍在运行并且 运行 并假设该主题有 replication-factor=3
所有数据应该仍然可以访问。
我会说这取决于。跨所有节点复制主题不会有什么坏处,但有时它是多余的(尤其是当集群中有大量代理时)。为了获得高可用性,您应该至少设置 replication-factor=3
。例如,这允许一个代理被关闭进行维护,而另一个代理意外失败。
bootstrap.servers
用于设置Kafka集群的连接。一个地址通常足以访问整个集群,但最好始终提供所有地址,以防其中一台服务器出现故障。请注意,无论 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 的任何数据)。
主题,应该有一个 replication-factor
> 1(通常是 2 或 3),这样当一个 broker 宕机时,另一个可以提供主题的数据。例如,假设我们有一个包含 2 个分区的主题,其中 replication-factor
设置为 2,如下所示:
经纪人 1:
+-------------------+
| Topic 1 |
| Partition 0 |
| |
| |
| |
| |
+-------------------+
经纪人 2:
+-------------------+
| Topic 1 |
| Partition 0 |
| |
| |
| Topic 1 |
| Partition 0 |
+-------------------+
经纪人 3:
+-------------------+
| Topic 1 |
| Partition 1 |
| |
| |
| |
| |
+-------------------+
现在假设 Broker 2 失败了。 Broker 1 和 3 仍然可以为主题 1 提供数据。因此 replication-factor
of 3 始终是一个好主意,因为它允许为了维护目的而关闭一个 broker还有另一个意外被取消。 因此,Apache-Kafka 提供了强大的持久性和容错保证。
关于领导者的注意事项:
在任何时候,只有一个 broker 可以成为分区的领导者,并且只有该领导者才能接收和提供该分区的数据。其余代理将只同步数据(同步副本)。另请注意,当 replication-factor
设置为 1 时,当代理失败时 leader 无法移动到其他地方。一般情况下,当一个分区的所有副本都失效或下线时,leader
会自动设置为-1
。
Assume nodes n3- n5 are all down, now still p1 and c1 will have active
connection to cluster which is kind of useless as anyways publishing
and consuming fails. (metric connection_count is greater than 0 means
there are connections to cluster from either producer or consumer)
答案: 如果作为您的主题副本的三个代理都已关闭,那么您将无法从该主题中生产或消费。为避免这种情况,建议将代理定位在不同的机架中并在代理配置中提供 broker.rack
信息。
broker.rack: Rack of the broker. This will be used in rack aware
replication assignment for fault tolerance. Examples: RACK1
,
us-east-1d
Is it correct way to replicate a topic to all nodes in a Kafka
cluster?
答:这完全取决于您的容错需求。如果您将主题复制到所有 6 个代理,那么您最多可以容忍 5 个代理失败。 (当然 min.insync.replicas
和 acks
配置也很重要。如果副本数为 6,min.insync.replicas=2
,acks=all
那么您最多可以容忍 4 个代理失败以继续发送消息)
Why do we give multiple node address details in bootstrap server
property is one address is sufficient?
回答:bootstrap.servers
配置用于初始连接到 Kafka 集群。是的,一个地址就够了,但是如果这个地址的broker挂了怎么办。您无法连接到集群。所以建议多提供一个地址,避免这种冗余的情况。
虽然上面类似的问题都有答案。我的好奇心在于假设 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集群中的所有节点是否正确?
为什么我们在bootstrap服务器中给出多个节点地址的详细信息属性一个地址就足够了吗?
注意:我是 Kafka 世界的初学者,仍在尝试使用本地设置来发现现实世界中可能出现的潜在问题。
为什么会失败?节点 n1 和 n2 仍在运行并且 运行 并假设该主题有
replication-factor=3
所有数据应该仍然可以访问。我会说这取决于。跨所有节点复制主题不会有什么坏处,但有时它是多余的(尤其是当集群中有大量代理时)。为了获得高可用性,您应该至少设置
replication-factor=3
。例如,这允许一个代理被关闭进行维护,而另一个代理意外失败。bootstrap.servers
用于设置Kafka集群的连接。一个地址通常足以访问整个集群,但最好始终提供所有地址,以防其中一台服务器出现故障。请注意,无论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 的任何数据)。
主题,应该有一个 replication-factor
> 1(通常是 2 或 3),这样当一个 broker 宕机时,另一个可以提供主题的数据。例如,假设我们有一个包含 2 个分区的主题,其中 replication-factor
设置为 2,如下所示:
经纪人 1:
+-------------------+
| Topic 1 |
| Partition 0 |
| |
| |
| |
| |
+-------------------+
经纪人 2:
+-------------------+
| Topic 1 |
| Partition 0 |
| |
| |
| Topic 1 |
| Partition 0 |
+-------------------+
经纪人 3:
+-------------------+
| Topic 1 |
| Partition 1 |
| |
| |
| |
| |
+-------------------+
现在假设 Broker 2 失败了。 Broker 1 和 3 仍然可以为主题 1 提供数据。因此 replication-factor
of 3 始终是一个好主意,因为它允许为了维护目的而关闭一个 broker还有另一个意外被取消。 因此,Apache-Kafka 提供了强大的持久性和容错保证。
关于领导者的注意事项:
在任何时候,只有一个 broker 可以成为分区的领导者,并且只有该领导者才能接收和提供该分区的数据。其余代理将只同步数据(同步副本)。另请注意,当 replication-factor
设置为 1 时,当代理失败时 leader 无法移动到其他地方。一般情况下,当一个分区的所有副本都失效或下线时,leader
会自动设置为-1
。
Assume nodes n3- n5 are all down, now still p1 and c1 will have active connection to cluster which is kind of useless as anyways publishing and consuming fails. (metric connection_count is greater than 0 means there are connections to cluster from either producer or consumer)
答案: 如果作为您的主题副本的三个代理都已关闭,那么您将无法从该主题中生产或消费。为避免这种情况,建议将代理定位在不同的机架中并在代理配置中提供 broker.rack
信息。
broker.rack: Rack of the broker. This will be used in rack aware replication assignment for fault tolerance. Examples:
RACK1
,us-east-1d
Is it correct way to replicate a topic to all nodes in a Kafka cluster?
答:这完全取决于您的容错需求。如果您将主题复制到所有 6 个代理,那么您最多可以容忍 5 个代理失败。 (当然 min.insync.replicas
和 acks
配置也很重要。如果副本数为 6,min.insync.replicas=2
,acks=all
那么您最多可以容忍 4 个代理失败以继续发送消息)
Why do we give multiple node address details in bootstrap server property is one address is sufficient?
回答:bootstrap.servers
配置用于初始连接到 Kafka 集群。是的,一个地址就够了,但是如果这个地址的broker挂了怎么办。您无法连接到集群。所以建议多提供一个地址,避免这种冗余的情况。