kafka消息的可靠性怎么保证?

本文探讨了Kafka消息的可靠性保障,包括生产者、Kafka本身和消费端如何防止数据丢失。通过设置多个副本、合理调整flush间隔、配置replication.factor、min.insync.replicas、acks参数以及重试机制,可以有效保证消息的完整性。同时,消费端通过禁用自动提交offset和使用幂等性处理来避免数据丢失和重复消费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kafka架构设计:

在这里插入图片描述
一个topic分多个partition,多个partition可能存在于多个broker(计算机节点上),每个partition又分主从(leader+follower)

(1)对于生产者丢失数据:

(1)配置多个副本,保证数据的完整性。
leader 接收到消息,所有的 follower 都同步到了消息之后,才认为本次写成功了。如果没满足这个条件,生产者会自动不断的重试,所以在生产者方面消息可靠性较高,通过follower的消息一致性保证了写入成功性。通过 replica机制保证数据不丢,代价就是需要更多资源,尤其是磁盘资源,kafka 当前支持 GZip 和 Snappy压缩,来缓解这个问题 是否使用 replica 取决于在可靠性和资源代价之间的 balance。
(2)合理设置flush间隔。
kafka 的数据一开始就是存储在 PageCache 上的,定期 flush 到磁盘上的,也就是说,不是每个消息都被存储在磁盘了,如果出现断电或者机器故障等,PageCache 上的数据就丢。可以通过 log.flush.interval.messages 和 log.flush.interval.ms 来配置 flush 间隔,interval大,丢的数据多些,但小会影响性能。

(2)对于Kafka丢失数据:

Kafka 某个 broker 宕机,然后重新选举 partition 的 leader。若此时其他的 follower 刚好还有些数据没有同步,结果此时 leader 挂了,然后选举某个 follower 成 leader 之后,不就少了一些数据?

所以此时一般是要求起码设置如下 4 个参数:

(1)给 topic 设置 replication.factor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值