栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Kafka Consumer、Producer如何实现精确一次消费数据、生产数据

Kafka Consumer、Producer如何实现精确一次消费数据、生产数据

Kafka Consumer、Producer如何实现精确一次消费数据、生产数据

3种信息交付可靠性保障幂等性 Producer

作用范围 事务型 ProducerConsumer如何设置总结


3种信息交付可靠性保障

最多一次(at most once):消息可能会丢失,但绝不会被重复发送。至少一次(at least once):消息不会丢失,但有可能被重复发送。精确一次(exactly once):消息不会丢失,也不会被重复发送。

在性能上比较 最多一次>至少一次>精确一次(幂等性>事务型)

目前默认Kafka是第二种交付情况

幂等性 Producer

0.11.0.0 版本引入的新功能,指定 Producer 幂等性的方法很简单,仅需要设置一个参数即可,即 props.put(“enable.idempotence”,ture),或props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true)。


底层具体的原理很简单,就是经典的用空间去换时间的优化思路,即在Broker 端多保存一些字段。当 Producer 发送了具有相同字段值的消息后,Broker 能够自动知晓这些消息已经重复了,于是可以在后台默默地把它们“丢弃”掉。

作用范围

保证在一个Topic的单分区上保持幂等性,也就是说当重启生产者进程后,就会消失。

所以如何在多分区以及多会话连接上消息无重复呢?




事务型 Producer

和幂等性一样 开启 enable.idempotence =true
设置 Producer 端参数 transctional. id。最好为其设置一个有意义的名字。

并且在代码中添加 事务的初始化、开启、提交和停止

producer.initTransactions();
try {
 	producer.beginTransaction();
 	producer.send(record1);
	producer.send(record2);
 	producer.commitTransaction();
} catch (KafkaException e) {
 	producer.abortTransaction();
}



Consumer如何设置

需要一些变更的。修改起来也很简单,设置 isolation.level参数的值即可。当前这个参数有两个取值:

    read_uncommitted:这是默认值,表明 Consumer 能够读取到 Kafka 写入的任何消息,不论事务型 Producer提交事务还是终止事务,其写入的消息都可以读取。很显然,如果你用了事务型 Producer,那么对应的Consumer 就不要使用这个值。read_committed:表明 Consumer 只会读取事务型Producer 成功提交事务写入的消息。当然了,它也能看到非事务型 Producer 写入的所有消息。




总结

由于幂等性Producer和事务型Producer性能太差,还要更具具体场景进行使用,不可能见好就用,离开了业务做技术没有意义。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/774828.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号