前言:这是一个MQ消费程序的业务优化改造场景,我们支付服务的消费方,主要功能是根据规则过滤一些消息,继而处理剩下的消息
? ? ? ? 消息来源:框架监听binlog后向kafka中写入消息(只监听新增)
背景:现有一个topicA ,kafka(消息体中有一个:userId字段),日两亿消息
生产方:其他服务
现状:5个库(4个业务库+1个灰度库),每个库拥有4个服务节点,共计20个服务节点,所有节点作为一个消费集群共同消费topicA的消息
? ? ? ? ? 5个库名字分别为01、02、03、04、99(灰度库)
现需改造:5个库根据规则各自消费自己应处理的数据
? ? ? ? ? ? ? ? ? eg:1库消费ID尾号为00-24的客户消息,2库消费25-49的客户消息
限制:
????????1、生产方一个topic不能增加,消息头 体什么都不能改
????????2、节约成本,不再新加机器
方案:
????????1. 新增5个topic,分别为:topic01、topic02、topic03、topic04、topic99
????????2. 5个库在消费topicA的前提下?再消费新增的对应topic(01库多消费一个topic01)
????????3. topicA现有消费逻辑改造:
????????????????i. 消费后,比对消息体中userId,和自身能处理的区间值配置
????????????????ii: 相同则按之前流程正常处理,不相同则根据配置发送到 新增的topic中(userId尾号为01则发送到topic01中)
????????????????
注:为了避免从topicA消费后异步写入新topic时消息丢失,我们有做双MQ方案,kafka写入失败后会写入备用MQ,消费做幂等