我已经开发了一个 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
通过这种方法,我可以获得异步消息传递的速度,并“希望”按所需顺序使用所有消息。
暂无答案!
目前还没有任何答案,快来回答吧!