Kafka消息至少一次在多消费者模式

qpgpyjmq  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(423)

kafka消息传递至少使用一次消息传递来确保每个消息都得到处理,并使用消息偏移量来指示下一个要传递的消息。
当有多个消费者时,如果某个致命消息在消息处理过程中导致消费者崩溃,该消息是否会重新传递给其他消费者并传播死亡信息?如果某个慢消息阻止了单个消费者,其他消费者是否可以继续处理后续消息?或者更糟糕的是,如果一条缓慢而致命的消息导致了消费者崩溃,它会不会导致其他消费者再次从它的抵消开始呢?

xtupzzrd

xtupzzrd1#

这里需要考虑以下几点:
一个kafka主题分区可以由一个使用者组中的一个使用者一次使用。因此,如果两个消费者属于两个不同的组,他们可以同时从同一分区消费。
存储的偏移量是按消费群体的。因此,每个主题分区都为每个活动(或最近活动)的消费者组存储了一个偏移量,消费者订阅了该分区。
偏移量可以按一定的间隔自动提交,也可以(由使用者应用程序)手动提交。
让我们看看你描述的场景。
一些致命的消息在消息处理过程中导致消费者崩溃
如果偏移量是自动提交的,那么当消息处理失败并使使用者崩溃时,偏移量就已经提交,并且接管的组中的下一个使用者将不再看到该消息。
如果在处理完成后手动提交偏移量,那么由于使用者崩溃,将不会提交该消息的偏移量(为简单起见,我假设一次读取和处理一条消息,但这很容易概括)。因此,组中订阅该主题的任何其他使用者将在接管该分区后再次读取该消息。因此,它也有可能让其他消费者崩溃。如果在消息处理之前提交了偏移量,那么下一个使用者将看不到消息,因为当第一个使用者崩溃时,偏移量已经提交。
一些慢消息阻止了单个消费者:只要消费者被认为是活着的,组中的其他消费者就不会接管。如果慢度超出了消费者的承受能力 session.timeout.ms 消费者将被视为死亡,并从群中移除。因此,组中的另一个使用者是否会读取该消息取决于提交偏移量的方式/时间。
缓慢而致命的信息会导致消费者崩溃:就Kafka的处理方式而言,这种情况应该与之前的情况类似。要么首先检测到慢度,要么首先发生崩溃。同样重要的是如何/何时提交偏移量。
我希望这对你的问题有帮助。

相关问题