kafka项目实战(如何保证消息可靠性,解决重复消费,对多个kafka集群进行监听消费)

24 阅读2分钟

实习很多天了,终于是接触到了业务代码,在企业实战的基础上给大家巩固下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中进行监听工厂的配置。