【问题标题】:Allow consumption of same message by different instances of the same service from a Kafka topic允许来自 Kafka 主题的相同服务的不同实例使用相同的消息
【发布时间】:2019-10-21 23:48:12
【问题描述】:

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

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

  2. 上述第 1 项中描述的方法有哪些缺点?

【问题讨论】:

  • 您可能会发现这个问题不在此处讨论,您可能会在Software Engineering找到更好的回复

标签: apache-kafka kafka-consumer-api


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2019-06-22
    • 2013-03-14
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多