那么我們看下第一種情況,consumer接受到了消息,然后更新offset, 在沒有處理消息前就crash掉了,接著另外一個consumer來接受的時(shí)候,發(fā)現(xiàn)offset已經(jīng)被更新,然后就去取下一條消息,這時(shí)候上一條消息就被丟棄了。第二種情況,consumer同樣接受到了消息,但是先去處理了消息,但是在沒有保存offset之前就crash掉了,接著另外一個consumer來接受的時(shí)候,發(fā)現(xiàn)offset還是以前那個,這時(shí)候就會再去拉取一次,這樣就造成了重復(fù)投遞了。第三種情況,其實(shí)保證處理消息和更新offset在同一個事務(wù)中,這時(shí)候就可以保證只會投遞一次。
Summary
簡單介紹了Kafka的架構(gòu),以前我最搞不懂的是,如何做到replication, 只要明白kafka的replication是針對partition的,而且是ISR進(jìn)行l(wèi)eader, follower的同步,并且整個kafka的并發(fā)能力取決于partition的個數(shù).