背景
我们在日常工作中,消费kafka消息是一个最常见的操作,不过由于kafka队列中经常包含重复的消息,并且消息量巨大,所以我们消费端总是需要先把消息进行去重后在消费,以减少消费端的压力,那么日常中我们一般有哪几种方案呢
kafka消费端消息去重方案
方案一:
kafka消息+redis的zset集合去重: 主要的逻辑在于使用Redis的zset数据结构进行数据去重,该方案的缺点就是需要依赖于redis的zset数据结构存放中间结果,而且如果数据量巨大,数据的重合率低时,很容易导致这个redis的zset集合变成一个大key,影响redis集群的性能
方案二:
kafka消息+flink窗口聚合去重:主要的逻辑在于使用flink进行窗口聚合,然后在聚合后的窗口中对消息进行去重,flink最后再把去重后的结果通知消费端进行消费
两种方案的示意图如下所示: