如何保证kafka生产者数据可靠性

ack参数的设置:

0: 生产者发送过来的数据,不需要等数据落盘应答

假如发送了Hello 和 World两个信息,Leader直接挂掉,数据就会丢失

生产者 ---> Kafka集群 一放进去就跑

数据可靠性分析:丢数

1: 生产者发送过来的数据,Leader收到数据后应答

生产者把数据发送给了Leader,Leader保存成功,应答完毕,此时生产者就以为数据发送成功了,但是此时,Leader挂了,但是Follower 并没有同步数据过来,Follower此时变成了Leader, 此时的Leader就没有Hello这个数据了,数据丢失了。

-1(all) :生产者发送过来的数据,Leader和ISR队列里面的所有节点收齐数据后应答。

Leader收到数据,所有Follower都开始同步数据, 但有一个Follower,因为某种故障,迟迟不能与Leader进行同步,那这个问题怎么解决呢?

解决方案:

Leader维护了一个动态的in-sync replica set(ISR),意为和 Leader保持同步的Follower+Leader集合(leader:0,isr:0,1,2)。

如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该时间阈值由replica.lag.time.max.ms参数设定,默认30s。例如2超时,(leader:0, isr:0,1)。 这样就不用等长期联系不上或者已经故障的节点。

数据可靠性分析:

如果分区副本设置为1个(只有一个leader),或者ISR里应答的最小副本数量 ( min.insync.replicas 默认为1)设置为1,和ack=1的效果是一样的,仍然有丢数的风险(leader:0,isr:0)。

数据完全可靠条件 = ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2

副本数是2,但是ISR中不一定有两个,因为会挂掉。

可靠性总结:

acks=0 ,生产者发送过来数据就不管了,可靠性差,效率高;

acks=1 ,生产者发送过来数据 Leader 应答,可靠性中等,效率中等;

acks=-1,生产者发送过来数据Leader和ISR队列里面所有Follwer应答,可靠性高,效率低;

在生产环境中,acks=0很少使用;acks=1,一般用于传输普通日志,允许丢个别数据;

acks=-1,一般用于传输和钱相关的数据,对可靠性要求比较高的场景。

相关推荐
juniperhan1 小时前
Flink 系列第10篇:Flink 分布式缓存详解
分布式·缓存·flink
Devin~Y2 小时前
大厂Java面试实战:Spring Boot/WebFlux、Redis+Kafka、K8s可观测性与Spring AI RAG/Agent三轮连环问
java·spring boot·redis·kafka·kubernetes·resilience4j·spring webflux
indexsunny3 小时前
互联网大厂Java求职面试实战:Spring Boot与微服务架构解析
java·spring boot·redis·kafka·spring security·flyway·microservices
gihigo19983 小时前
分布式发电的配电网有功-无功综合优化 MATLAB 实现
开发语言·分布式·matlab
脑子加油站4 小时前
OpenEuler24.03 分布式配置redis 集群
数据库·redis·分布式·php·nginx代理
想你依然心痛5 小时前
HarmonyOS 5.0工业物联网开发实战:构建分布式智能制造监控与数字孪生预测维护系统
分布式·物联网·harmonyos·数字孪生
zhixingheyi_tian5 小时前
Hadoop 之 native 库
大数据·linux·hadoop·分布式
蓝魔Y5 小时前
Apache—Kafka实践
分布式·kafka·apache
七夜zippoe5 小时前
DolphinDB数据模型:表、分区与分布式表
分布式·wpf·数据模型··dolphindb
ZC跨境爬虫6 小时前
纯requests+Redis实现分布式爬虫(可视化4终端,模拟4台电脑联合爬取)
redis·分布式·爬虫·python