Kafka问题:如何保证消息不丢失?

1.消息不丢失的含义

总结来说,Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。这里面主要有两个意思。

1.1 已提交的消息

当 Kafka 的若干个 Broker 成功地接收到一条消息并写入到日志文件后,它们会告诉生产者程序这条消息已成功提交。此时,这条消息在 Kafka 看来就正式变为“已提交”消息了。那为什么是若干个 Broker 呢?这取决于你对“已提交”的定义。你可以选择只要有一个 Broker 成功保存该消息就算是已提交,也可以是令所有 Broker 都成功保存该消息才算是已提交。不论哪种情况,Kafka 只对已提交的消息做持久化保证这件事情是不变的。

1.2 有限度的持久化保证

Kafka 不可能保证在任何情况下都做到不丢失消息。举个极端点的例子,如果整个太阳系都消失了,Kafka 还能保存任何消息吗?显然不能!倘若这种情况下你依然还想要 Kafka 不丢消息,那么只能在别的星系部署 Kafka Broker 服务器了。

2.消息丢失的场景

说道消息不能丢失,那我们需要先看下,在哪些场景下,消息会在哪些场景下会丢失吧

2.1 生产者程序丢失数据

目前 Kafka Producer 是异步发送消息的,也就是说如果你调用的是 producer.send(msg) 这个 API,那么它通常会立即返回,但此时你不能认为消息发送已成功完成。因此如果出现消息丢失,我们是无法知晓的。这个发送方式挺不靠谱。
如果用这个方式,可能会有哪些因素导致消

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值