我们在使用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会产生异常。)

 

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

 

 

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

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐