producer确认数据返回值问题

我们在使用producer产生数据时,如何保证所产生的数据已经被kafka收录。我们在producer中可以通过配置返回值来确定这些。

props.put("request.required.acks", "1");

这个配置大概意思就是producer每产生一条数据到partitions都会有一个返回值,这个返回值有三种:“-1”,“0”,“1”。

返回值为“0”时,表示producer每生产一条数据不会等broker确认是否已经提交了数据到log。(0.7版本就是这样做的,这个选择提供了最小的时延但同时风险最大因为当server宕机时,数据将会丢失)。

 

返回值为“1”时,表示producer每生产一条数据会跟leader的replica确认是否收到数据。

这个选择延时较小同时确保了server确认接收成功

 

返回值为“-1”时,表示producer每生产一条数据会跟leader的所有replica确认是否收到数据。这个选择延时最大然而,这种方式并没有完全消除丢失消息的风险,因为同步replicas的数量可能是1。如果要完全消除丢失消息风险,还需要如下配置。

 

min.insync.replicas = -1

当producer设置request.required.acks为-1时,min.insync.replicas指定replicas的最小数目(必须确认每一个repica的写数据都是成功的),如果这个数目没有达到,producer会产生异常。)

 

我们可以根据实际需要选择不同的配置。

 

 

---
更多文章关注公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值