bar*_*ron 2 recovery apache-kafka
我们正在考虑使用 kafka 进行分布式开发,但也想将其用作数据库。具体案例:我们在kafka中写入“交易”主题,并希望依靠它来存储所有交易。问题是:这个设计是否需要恢复计划,Kafka会不会因为死机、磁盘故障而丢失数据?或者 Kafka 有自己的恢复机制,所以用户不需要他们这边的恢复计划?
对您问题的简短回答:
Kafka 提供了持久性和容错性,但是,您需要负责相应参数的配置以及可以处理故障转移的架构设计,以确保您永远不会丢失任何数据。
对您的问题的详细回答:
我将通过解释 Kafka 的一般工作原理以及它如何处理故障来回答您的问题。
每个主题,都是一个特定的数据流(类似于数据库中的表)。主题被分成多个分区(任意多),分区中的每条消息都有一个增量 ID,称为偏移量,如下所示。
分区 0:
+---+---+---+-----+
| 0 | 1 | 2 | ... |
+---+---+---+-----+
Run Code Online (Sandbox Code Playgroud)
分区 1:
+---+---+---+---+----+
| 0 | 1 | 2 | 3 | .. |
+---+---+---+---+----+
Run Code Online (Sandbox Code Playgroud)
现在一个Kafka集群由多个broker组成。每个代理都用一个 ID 标识,并且可以包含某些主题分区。
2 个主题的示例(每个主题分别有 3 个和 2 个分区):
经纪人1:
+-------------------+
| Topic 1 |
| Partition 0 |
| |
| |
| Topic 2 |
| Partition 1 |
+-------------------+
Run Code Online (Sandbox Code Playgroud)
经纪人2:
+-------------------+
| Topic 1 |
| Partition 2 |
| |
| |
| Topic 2 |
| Partition 0 |
+-------------------+
Run Code Online (Sandbox Code Playgroud)
经纪人3:
+-------------------+
| Topic 1 |
| Partition 1 |
| |
| |
| |
| |
+-------------------+
Run Code Online (Sandbox Code Playgroud)
请注意,数据是分布式的(并且Broker 3不保存主题 2 的任何数据)。
主题,应该有一个replication-factor> 1(通常是 2 或 3),这样当一个代理宕机时,另一个代理可以提供一个主题的数据。例如,假设我们有一个包含 2 个分区的主题,分区replication-factor设置为 2,如下所示:
经纪人1:
+-------------------+
| Topic 1 |
| Partition 0 |
| |
| |
| |
| |
+-------------------+
Run Code Online (Sandbox Code Playgroud)
经纪人2:
+-------------------+
| Topic 1 |
| Partition 0 |
| |
| |
| Topic 1 |
| Partition 0 |
+-------------------+
Run Code Online (Sandbox Code Playgroud)
经纪人3:
+-------------------+
| Topic 1 |
| Partition 1 |
| |
| |
| |
| |
+-------------------+
Run Code Online (Sandbox Code Playgroud)
现在假设Broker 2失败了。代理 1和 3 仍然可以为主题 1 提供数据。因此,a replication-factorof 3 始终是一个好主意,因为它允许一个代理出于维护目的而被关闭,也允许另一个代理意外关闭。因此,Apache-Kafka 提供了强大的持久性和容错性保证。
关于领导者的注意事项:
在任何时候,只有一个代理可以成为分区的领导者,并且只有该领导者可以为该分区接收和提供数据。其余的代理只会同步数据(同步副本)。另请注意,当replication-factor设置为 1 时,当代理失败时无法将领导者移动到其他地方。一般来说,当一个分区的所有副本都失败或离线时,leader将自动设置为-1。
关于保留期的注意事项 如果您计划使用 Kafka 作为存储,您还需要了解每个主题的可配置保留期。如果您不注意此设置,您可能会丢失数据。根据文档:
Kafka 集群使用可配置的保留期持久地保留所有已发布的记录(无论它们是否已被使用)。例如,如果保留策略设置为两天,那么在一条记录发布后的两天内,它可供消费,之后将被丢弃以释放空间。
| 归档时间: |
|
| 查看次数: |
4948 次 |
| 最近记录: |