gpt4 book ai didi

apache-kafka - Kafka 能保证零消息丢失吗?

转载 作者:行者123 更新时间:2023-12-04 15:44:49 25 4
gpt4 key购买 nike

我正在阅读关于此的相互矛盾的观点。我有一个关键应用程序,每条消息都很重要。那么kafka是否保证了与IBM MQ等其他传统消息系统同等级别的消息零丢失?

最佳答案

每个主题,都是一个特定的数据流(类似于数据库中的表格)。主题被分成分区(任意多个),其中分区中的每条消息都有一个增量 ID,称为偏移量,如下所示。

分区 0:

+---+---+---+-----+
| 0 | 1 | 2 | ... |
+---+---+---+-----+

分区 1:

+---+---+---+---+----+
| 0 | 1 | 2 | 3 | .. |
+---+---+---+---+----+

现在一个 Kafka 集群由多个 broker 组成。每个代理都用一个 ID 标识,并且可以包含特定的主题分区。

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 设置为 3,如下所示:

经纪人 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 为 3 始终是一个好主意,因为它允许一个 broker 被关闭维护目的,也为了另一个被意外拆除。 因此,Apache-Kafka 提供强大的持久性和容错保证。

关于领导者的注意事项:在任何时候,只有一个 broker 可以成为分区的领导者,并且只有该领导者才能接收和提供该分区的数据。其余代理将只同步数据(同步副本)。另请注意,当 replication-factor 设置为 1 时,leader 无法在代理失败时移动到其他地方。一般情况下,当一个partition的所有replica都失效或者下线时,leader会自动设置为-1

关于apache-kafka - Kafka 能保证零消息丢失吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56340058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com