Kafka学习(7)- kafka使用Java开发-3-手动提交
目录:为什么要手动提交什么是手动提交一.为什么要手动提交问题一:已经消费的数据对于kakfa来说,会将该消费组里面的offset值进行修改。什么时候去修改的?当数据被消费者拿去之后就自动提交,而不关注消费者是否成功消费,如果消费者端出现故障,就会导致此条数据没有被消费,继续运行就会导致此数据丢失如果消费者成功消费此数据,而在提交的过程的出现故障,会导致再次发送此数据到消...
·
目录:
- 为什么要手动提交
- 什么是手动提交
一.为什么要手动提交
- 问题一:已经消费的数据对于kakfa来说,会将该消费组里面的offset值进行修改。什么时候去修改的?
- 当数据被消费者拿去之后就自动提交,而不关注消费者是否成功消费,如果消费者端出现故障,就会导致此条数据没有被消费,继续运行就会导致此数据丢失
- 如果消费者成功消费此数据,而在提交的过程的出现故障,会导致再次发送此数据到消费者,继续运行就会到此数据重复提交
- kafka没有提供一个绝对安全的方案,只提供了多种选择来供用户解决此类问题
- 问题二:比如消费者拿到数据之后,存入到mysql数据库中。但是mysql数据库这个时候,连接不上,抛出异常。但是在处理的时候已经进行提交了,那么kafka上的offset值已经修改了,可是mysql数据库中没有数据--数据丢失
解决方案:可以将数据在处理完成之后,再进行提交,然后进行offset值的修改。默认情况下是自动提交,需要修改为手动提交。 - 问题三:如果在处理代码中正常处理了,但是在提交的offset请求时,没有连接到kafka或者出翔了故障,那么该次请求,是失败的。那么下次进行读取同一个分区的数据时,会从已经处理掉的offset值在进行处理一次,那么在hbase中就会产生两条一样的数据,也就是重复提交
二.什么是手动提交
如果消费者在获得数据后需要加入处理,数据处理完毕后才确认offset值的修改,怎么使用程序来控制offset的确认?很简单
- 关闭自动确认选项
porps.put("enable.auto.commit","false"); - 消费者提交
consumer.commitSync();
更多推荐
已为社区贡献4条内容
所有评论(0)