首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何恢复卡夫卡的信息?

如何恢复卡夫卡的信息?
EN

Stack Overflow用户
提问于 2018-04-06 20:30:37
回答 2查看 6.8K关注 0票数 3

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-07 08:12:23

对您问题的简短回答:

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

对你问题的长篇回答:

我会回答你的问题,解释卡夫卡一般是如何工作的,它是如何处理失败的。

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

分区0:

代码语言:javascript
运行
复制
+---+---+---+-----+
| 0 | 1 | 2 | ... |
+---+---+---+-----+

分区1:

代码语言:javascript
运行
复制
+---+---+---+---+----+
| 0 | 1 | 2 | 3 | .. |
+---+---+---+---+----+

现在卡夫卡集群是由多个经纪人组成的。每个代理都有一个ID标识,可以包含特定的主题分区。

两个主题的示例(每个主题分别有3个分区和2个分区):

Broker 1:

代码语言:javascript
运行
复制
+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|     Topic 2       |
|   Partition 1     |
+-------------------+

Broker 2:

代码语言:javascript
运行
复制
+-------------------+
|      Topic 1      |
|    Partition 2    |
|                   |
|                   |
|     Topic 2       |
|   Partition 0     |
+-------------------+

Broker 3:

代码语言:javascript
运行
复制
+-------------------+
|      Topic 1      |
|    Partition 1    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

请注意,数据是分布式的( Broker 3不包含任何主题2的数据)。

主题,应该有一个replication-factor >1(通常是2或3),这样当代理关闭时,另一个可以服务于主题的数据。例如,假设我们有一个主题,其中有2个分区,将replication-factor设置为2,如下所示:

Broker 1:

代码语言:javascript
运行
复制
+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

Broker 2:

代码语言:javascript
运行
复制
+-------------------+
|      Topic 1      |
|    Partition 0    |
|                   |
|                   |
|     Topic 1       |
|   Partition 0     |
+-------------------+

Broker 3:

代码语言:javascript
运行
复制
+-------------------+
|      Topic 1      |
|    Partition 1    |
|                   |
|                   |
|                   |
|                   |
+-------------------+

现在假设Broker 2失败了。Broker 1和3仍然可以为主题1提供数据。因此,3的replication-factor总是一个好主意,因为它允许为维护目的而将一个代理删除,也允许另一个代理意外地被删除。因此,Apache为提供了强大的耐用性和容错性保证。

关于领导者的注释:在任何时候,只有一个代理可以是分区的领导者,而只有那个代理可以接收和服务该分区的数据。剩下的代理将只同步数据(同步副本)。还请注意,当replication-factor设置为1时,当代理失败时,不能将领导移到其他位置。通常,当分区的所有副本失败或脱机时,leader将自动设置为-1

关于保留期的注意事项,,如果您打算使用卡夫卡作为存储,您还需要知道每个主题的可配置保持期。如果不处理此设置,可能会丢失数据。根据文档

卡夫卡集群使用可配置的保留期,持久地保存所有已发布的记录--无论它们是否已被消耗。例如,如果保留策略设置为两天,则在记录发布后的两天内,它可供消费,之后将被丢弃以腾出空间。

票数 8
EN

Stack Overflow用户

发布于 2018-04-07 08:12:25

请阅读卡夫卡文档的复制部分,特别是“可用性和耐久性保证”一节。阅读完文档后,如果遇到问题,可以随意发布另一个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49700596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档