如果服务崩溃,如何确保Kafka中的消息不会丢失

问题描述 投票:0回答:1

我们服务组中客户端的所有配置的拳头是enable.auto.commit = falseauto.offset.reset = earliest,以确保未提交未处理的消息。

现在,我想了解如何确保例如服务崩溃时消息不会丢失。我要确保的是以下情况:

  1. 接收到的偏移量为1的消息A-服务开始处理消息(异步)
  2. 接收到的偏移量为2的消息B-服务开始处理该消息(异步)
  3. 消息B的处理完成,并且偏移量2提交给Kafka。
  4. 服务在完成对消息A的处理并提交偏移量1之前重新启动。
  5. 服务再次启动,因为尚未提交,所以从偏移量1处理消息。

如果我理解正确,那么当服务再次启动时,它将接收从偏移量3开始的消息,而偏移量1中的消息将会丢失,对吗?

如果可以的话,我可以通过配置对其进行修复,或者需要某种管理的偏移量吗?

apache-kafka kafka-consumer-api
1个回答
0
投票

为了避免在消息A之前提交消息B(偏移量2),可以使用commitSync应用同步提交。

此外,请注意,主题中的每个分区都有其自己的偏移量计数。最多一名消费者可以从Kafka中读取一个分区。这意味着,如果您使用同步提交,则可以避免出现您所描述的情况。

由于每个分区只有一个使用者,因此还可以确保消息A在消息B之前到达使用者。

© www.soinside.com 2019 - 2024. All rights reserved.