同一主题在不同代理上的相同Kafka分区是否包含相同消息(彼此重复)?

时间:2020-01-18 14:59:16

标签: apache-kafka kafka-topic kafka-partition

Broker 1:

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

+-------------------+
|      Topic 1      |
|    Partition 2    |
|                   |
|                   |
|     Topic 2       |
|   Partition 0     |
+-------------------+
Broker 3:

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

Broker 1 Topic 1 Partition 1包含与Broker 3 Topic 1 Partition 1相同的内容


但是Broker 3 Topic 1 Partition 1包含与Broker 3 Topic 1 Partition 2

不同的内容

2 个答案:

答案 0 :(得分:2)

必须指定复制因子才能创建主题。它定义了Kafka集群中某个主题的副本数。

主题中的每个分区都有一个领导者,如果复制因子大于1,则它具有副本。当消息首先发送到分区时,它到达领导者(代理,即分区领导者)。然后副本将提取请求(定期发送提取请求)发送给领导者以复制消息。与领导者具有相同消息的副本称为in-sync-replicas。在领导者经纪人失败的情况下,这些人也可能成为分区领导者。 (故障转移)

如果您设置了ack=all生产者设置,那么当所有同步副本都收到记录时,生产者将得到确认。此外,通过将min.insync.replicas设置为大于1,可以保证所有已确认的记录在kafka群集中至少具有一个副本。

因此,如果两个代理在主题分区中处于同步复制状态,那么它们将具有相同的消息,否则它们不会。

答案 1 :(得分:0)

简短的回答是。 在所有代理上,相同的分区是相同的。不同的分区包含不同的消息。

但是,Kafka是一个移动的系统,因此并非所有内容都始终对齐。 它取决于生产者的“确认”价值,网络吞吐量和分区以及许多其他因素。