asynchronous - How to control sequence of Kafka Messages sent Asynchronously -
i have developed kafka version : 0.9.0.1
application.
one important aspect of application messages need consumed in correct sequence. because propagating database rows between 2 databases. means need ensure records within each unit of work sent uow-insert arriving before uow-update.
if use asynchronous message production, how can guarantee messages consumed in correct sequence?
i employ kafka producer
send callback
notified whether or not each message successfuly sent.
i have acks=all
, retries=0
, batch.size=16384
, kafka topics have single partition.
my consumer can cope duplicate messages, e.g. in case of retries being necessary, consumers cannot cope messages out of sequence.
my retry approach fail fast, e.g. messages fails send report records log record sequence number (lrsn) or relative byte address (rba) , stop sending messages.
then reset source database logs reported lrsn or rba , restart message production.
for example send messages
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
when message m5 failed send successfully, stop sending anymore messages. have issue consumer have received messages m1, m2, m3, m4, m6, m7, & m8.
to recover situation reset source database log reader reported lrsn or rba of m5 , start resending messages point.
now consumer receives
message uow duplicate m5 uow-0001 no m6 uow-0001 yes m7 uow-0001 yes m8 uow-0002 yes
with approach speed of asynchronous messaging , "hopefully" messages consumed in desired sequence.
Comments
Post a Comment