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

Popular posts from this blog

amazon web services - S3 Pre-signed POST validate file type? -

c# - Check Keyboard Input Winforms -