producer确认数据返回值问题
我们在使用producer产生数据时,如何保证所产生的数据已经被kafka收录。我们在producer中可以通过配置返回值来确定这些。props.put("request.required.acks","1");这个配置大概意思就是producer每产生一条数据到partitions都会有一个返回值,这个返回值有三种:“-1”,“0”,“1”。返回值为“0”时,表示produce
我们在使用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会产生异常。)
我们可以根据实际需要选择不同的配置。
---
更多文章关注公众号
更多推荐
所有评论(0)