0
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

?

4

2 回答 2

3

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

主题中的每个分区都有一个领导者,如果复制因子大于 1,则它具有副本。当一条消息首先发送到一个分区时,它首先到达领导者(broker,它是分区领导者)。然后副本向领导者发送获取请求(定期发送获取请求)以复制消息。与领导者具有相同消息的副本称为同步副本。在领导者代理失败的情况下,这些也是分区领导者的候选者。(故障转移)

如果您设置ack=all生产者设置,则生产者会在所有同步副本都收到记录时得到确认。并且通过设置min.insync.replicas为大于一,你可以保证所有被确认的记录在kafka集群中至少有一个副本。

因此,如果两个代理是主题分区的同步副本,那么它们具有相同的消息,否则它们没有。

于 2020-01-18T15:33:51.637 回答
0

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

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

于 2020-01-19T10:36:33.910 回答