允许来自Kafka主题的同一服务的不同实例使用同一消息

时间:2019-10-21 11:11:18

标签: apache-kafka kafka-consumer-api

我有几个相同服务的实例订阅了Kafka主题。生产者向主题发布1条消息。我希望所有实例都使用此消息。启动实例时,应从主题/分区的末尾读取消息。我不希望实例接收在服务启动之前发布的消息(但是,如果服务处理了一些旧消息,这些将不是一个大问题)。如果实例与Kafka断开连接一段时间或Kafka宕机,我不希望实例丢失消息,这意味着我需要定期提交偏移量。邮件可以处理两次,这不是什么大问题。

  1. 以下是归档所描述行为的最佳方法:每次启动实例时,为每个实例使用新的Guid或时间戳生成新的Kafka组ID?

  2. 上面第1条所述方法的缺点是什么?

1 个答案:

答案 0 :(得分:1)

做两件事就足够了。首先,服务的每个实例都应具有自己的group.id。这样可以保证每个人都能阅读所有已发布的消息,并在重新连接后会收到已发布的消息。该ID是每个实例的,不需要在启动时重新生成。其次,每个实例应具有属性auto.offset.reset=latest,这也是默认属性。这样可以确保使用者不会读取在实例首次启动之前发布的消息。

当然,您的实例需要在处理完消息后提交偏移量。