一种基于制造技术

技术编号:39878414 阅读:19 留言:0更新日期:2023-12-30 13:01
本发明专利技术提供一种基于

【技术实现步骤摘要】
一种基于Kafka的多环境有序性生产消费的方法


[0001]本专利技术涉及数据处理
,具体为一种基于
Kafka
的多环境有序性生产消费的方法


技术介绍

[0002]在软件系统业务逻辑处理的流程中,通常会采用
MQ
来解耦服务之间的耦合调用,通过异步消息,缩短响应时间,提升系统性能,在异步消费的场景下有诸多问题,会导致消息的生产和消费不能按照业务中事务提交的顺序来执行,消息乱序可能会导致严重的业务影响,可能出现脏数据,写入覆盖等诸多问题

并且随着微服务架构的流行,多副本多环境的架构下,一套系统可能存在多套环境,如:预发布环境,生产环境
V1
,生产环境
V2。
在这种多环境的架构下,
MQ
消息的消息者可能有多个,同一个队列中的消息会被并发消费,在并发消费的场景下仍会消息消费的乱序,有序消费在多环境架构下面临诸多挑战

[0003]由于业务方法执行时是并发执行的,生产者发送消息时,如果不通过技术手段来处理就会因本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.
一种基于
Kafka
的多环境有序性生产消费的方法,该方法通过一款技术框架来实现,其特征在于,所述技术框架工作在应用层,不是独立的中间件系统,通过
Maven
或者
Gradle
将依赖导入到项目中,开箱即用,所述技术框架通过多个应用程序的消息框架向
Kafka
中间项传输投递消息和消费消息,并且通过
DB
端查阅待投递的消息
。2.
根据权利要求1所述的一种基于
Kafka
的多环境有序性生产消费的方法,其特征在于,该方法的实现过程包括以下步骤:步骤一:消息的可靠性投递
S1.
应用程序在完成业务操作之后,在同一个事务内将需要发送的消息落库,存储在消息表
(msg_info)
中,消息表需要存储该消息要发往哪个队列,应该被路由到哪个分区,这里的分区索引是通过业务数据的主键和
Kafka
队列的分区数进行
hash
,消息表中的主键使用自增
ID
,由于消息数据是和业务数据在同一个事务内完成的,因此消息的产生可以满足原子性,由于事务对数据进行修改时,会添加行锁,因此,即便是应用程序并发地访问数据库,但是在数据库层面,操作同一条数据首先需要获取到数据的行锁,行锁是独占锁,所以并发的线程会等待,因此,事务提交的顺序就是消息执行的先后顺序
。S2.
获取分区粒度的分布式锁,避免有多个生产者并发地向同一个分区上生产消息,这样会导致生产者乱序投递
。S3.
生产者拉取消息表中未投递的数据,按照
Seq Id
排序,并将这些消息要操作的业务
ID
存储到针对每一个待发送的消息,将当前待发送的消息中,应该操作的
ID
存储到数据表
msg_id_info
中,便于后续消息在发送之前生成前驱消息
。S4.
保存完消息对应的业务
ID
之后,需要判断当前待发送的消息是否存在前驱消息;前驱消息:一个消息要想被消费,需要等待前驱消息消费完成才能开始消费当前消息,消息在发送时,需要判断是否存在前驱消息;前驱链表:假如一个消息的
Seq Id

11
,这个消息要操作的业务数据
ID
为3,那么根据
Seq Id
倒序,查看当前事件之前是否存在操作
ID
为3的消息,如果存在,则将消息内添加前置消息的
Seq Id

S5.
前驱关系绑定完成之后,将待发送的消息发送至
Kafka
,需要将生产者
ack
的确认机制改为
‑1,即
leader

fol lower
均收到消息之后,才认为消息投递成功,发送完成之后将消息在数据库中的状态改为已投递,消息投递和状态修改在一个事务内,如果消息投递失败,就不会修改状态,并且生产者将不会继续投递下一个事件,而会在当前消息上不断重试,如果跳过当前消息继续投递,就会导致之前的消息丢失

步骤二:生产者的容错处理与故障转移如果生产者宕机,或者
Kafka
宕机,都会导致消息投递失败,针对以上场景,生产者应具备失败重试,故障转移等能力,具体场景和解决方案如下:场景1:生产者宕机重试处理:在生产者重启之后,应该拉取所有未投递的消息,进行重试故障转移:如果集群内有多个生产者,一个生产者宕机,消息会被其他的生产者定时拉起重试,实现故障转移;场景2:
Kafka
宕机如果中间件宕机,生产者不断重试投递当前消息,直至成功为止

步骤三:消息消费的幂等性如果队列中有重复消息产生,消费者如果不做幂等性控制,会导致重复消费,可能会对业务产生严重影响,以下场景可能会产生重复消息:场景1:如果生产者出现网络抖动,实际消息已经投递成功,但生产者没收到
kafka

ACK
,并判定本次消息发送失败,生产者将会重试投递该消息场景2:由于
Kafka
消费者的偏移量通常是批量提交的,即消费完
10
条消息之后,提交一次偏移量,如果消息消费完成但是还没有提交偏移量,消费者宕机,此时
Kafka
未收到偏移量,消费者再次重启之后,
Kafka
会重新投递一次之前的消息,导致重复消费

步骤四...

【专利技术属性】
技术研发人员:梁鹏飞
申请(专利权)人:北京荣大科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1