实习很多天了,终于是接触到了业务代码,在企业实战的基础上给大家巩固下kafka的知识
如何保证消息可靠性?
在kafka中有一个acks应答机制,该机制可以告诉我们消息是否丢失,acks主要有三个值,all(-1),1,0
我们来分别解释下这三个参数。
all(-1) 该参数,我们企业用到的就是该参数,设置该参数后,只有当isr中的leader和所有的flower保存了该数据后,才会进行应答。 该方法数据安全性高。当然性能也会降低。
1 这个参数 只需要leader副本同步了数据就可以进行应答。
0 该参数 安全度最低,不需要副本的同步,当发送数据后,直接进行应答。
接下来我们就可以使用acks 加上retries 重试机制来保证数据的安全性。
解决重复消费
场景就是,当消费者消费消息时,默认配置下,会每隔一段时间自动提交一个offset,offset代表当前消费的消息在topic之中的位置,当消费者在消费消息时,宕机了,导致消息消费失败。这是我们就可以根据从kafka中读取最新提交的offset值进行开始消费,问题就来了,我们不能保证该offset是最新的offset,所以可能会导致重复消费。因为在默认配置下,会隔一段时间进行自动提交offset,那么在那一段时间内的消息将会被重复消费。
解决该问题,我们可以把自动提交设为false,我们手动提交,再每处理完一个消息的时候,我们手动的提交offset,这样我们就可以保证offset是最新的。也就不会重复消费。
对多个kafka集群进行监听消费
当我们监听一个kafka集群的时候我们直接可以根据指定topic,groupid,来对消息进行消费,因为此时springboot会自动给我们配置一个默认的kafka监听工厂来进行监听
当我们同时对多个kafka集群进行消息监听消费,我们就需要自定义监听工厂,并在@kakfalistener中进行监听工厂的配置。