异步—如何控制异步发送的kafka消息的顺序

o0lyfsai  于 2021-06-07  发布在  Kafka
关注(0)|答案(0)|浏览(331)

我已经开发了一个 Kafka version : 0.9.0.1 应用程序。
这个应用程序的一个非常重要的方面是,消息需要按正确的顺序使用。这是因为我在两个数据库之间传播数据库行。这意味着我需要确保每个工作单元中的所有记录都已发送,并且在uow更新之前uow insert已到达。
如果使用异步消息生成,如何保证消息按正确的顺序使用?
我将雇用 Kafka Producer 发送 Callback 通知是否成功发送每条消息。
我会的 acks=all , retries=0 , batch.size=16384 我的Kafka主题只有一个分区。
我的消费者可以处理重复的消息,例如在需要重试的情况下,但是消费者不能处理顺序错误的消息。
我的重试方法是快速失败,例如,一旦消息发送失败,我就报告记录日志记录序列号(lrsn)或相对字节地址(rba),并停止发送任何消息。
然后将源数据库日志重置为报告的lrsn或rba,并重新开始生成消息。
例如,我发送消息

Message               UOW
M1                    uow-0000 
M2                    uow-0000 
M3                    uow-0000 
M4                    uow-0001 
M5                    uow-0001 
M6                    uow-0001 
M7                    uow-0001 
M8                    uow-0002

当消息m5未能成功发送时,我将停止再发送消息。但是,我有一个问题,消费者将收到消息m1,m2,m3,m4,m6,m7和m8。
为了恢复这种情况,我将把源数据库日志读取器重置为报告的lrsn或m5的rba,并从该点开始重新发送消息。
现在消费者收到

Message               UOW                    Duplicate
M5                    uow-0001                  No
M6                    uow-0001                  Yes
M7                    uow-0001                  Yes
M8                    uow-0002                  Yes

通过这种方法,我可以获得异步消息传递的速度,并“希望”按所需顺序使用所有消息。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题