gpt4 book ai didi

apache-kafka - 如何恢复kafka消息?

转载 作者:行者123 更新时间:2023-12-05 01:00:27 25 4
gpt4 key购买 nike

我们正在考虑使用 kafka 进行分布式开发,但也想将其用作数据库。具体案例:我们在 kafka 中写入“交易”主题,并希望依靠它来存储所有交易。问题是:这个设计中是否需要一个恢复计划,Kafka 会因为崩溃、磁盘故障而丢失数据吗?或者 Kafka 有自己的恢复机制,所以用户不需要自己制定恢复计划?

最佳答案

简短回答您的问题:

Kafka 提供持久性和容错性,但是,您需要负责相应参数的配置和可以处理故障转移的架构设计,以确保您永远不会丢失任何数据。

对您的问题的详细回答:

我将通过解释 Kafka 的一般工作原理以及它如何处理故障来回答您的问题。

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

分区 0:

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

分区 1:

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

现在一个 Kafka 集群由多个 brokers 组成。每个代理都有一个 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的任何数据)。

Topics,应该有一个 replication-factor > 1(通常是 2 或 3),这样当一个 broker 宕机时,另一个 broker 可以为 topic 的数据提供服务。例如,假设我们有一个具有 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 为 3 始终是一个好主意,因为它允许一个代理被取消维护目的,以及另一个意外被拆除。 因此,Apache-Kafka 提供了强大的持久性和容错保证。

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

关于保留期的说明如果您计划将 Kafka 用作存储,您还需要了解每个主题的可配置保留期。如果您不注意此设置,您可能会丢失数据。根据docs :

The Kafka cluster durably persists all published records—whether or not they have been consumed—using a configurable retention period. For example, if the retention policy is set to two days, then for the two days after a record is published, it is available for consumption, after which it will be discarded to free up space.

关于apache-kafka - 如何恢复kafka消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49700596/

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