【问题标题】:Kafka persist message until consumed by all groups卡夫卡坚持消息,直到被所有组消费
【发布时间】:2018-11-07 20:17:17
【问题描述】:

我有一个包含多个消费者组的 Kafka 主题。如果尚未被所有消费者组读取,我需要在持久性持续时间到期时不删除有关该主题的消息。
是否可以在持续时间之外设置其他持久性规则?如果消息从未被消费过,我需要消息始终停留在某个主题上。
如果消息没有被消费并且持续时间到期,是否可以“刷新”消息的超时?

【问题讨论】:

  • 您可以配置每个主题的保留策略,以便针对特定主题将其设置为无限期或很长时间
  • 我看到保留策略通常基于时间或大小。这样做的问题是,如果消息的时间到期而没有被消费,它就会丢失。大小政策也一样。由于我正在处理的数据量很大,无限期或非常长时间的保留也不是一种选择。
  • 这可能有助于理解这个概念:stackoverflow.com/a/28594172/2143846

标签: apache-kafka


【解决方案1】:

这在 Kafka 中是不可能的。 Kafka - 与许多更传统的消息代理不同 - 不跟踪已消费或未消费的消息。这是消费者的责任。并且因为 broker 不跟踪这个,所以它不能基于这个做主题清理。

在某些情况下,您可以使用compacted topics,它将保留每个键的最后一条消息。多亏了这一点,即使是连接较晚的消费者也可能能够恢复状态。但这仅适用于特定数据类型,例如状态更改等。

【讨论】:

  • 好的,我现在了解他们的职责结构。您能否指出我如何更好地处理我的情况的方向?我需要确保消息在被删除之前已经被消费。
  • 也许你应该从解释你为什么使用 Kafka 开始。 Kafka 是一个很棒的工具,但要发挥出色,它需要使用它的系统的稍微具体的体系结构。所以我认为你通常有三个选择: a) 开始使用不同的消息传递系统; b) 重新设计您的消费者和生产者以使用 Kafka; c) 将保留时间和大小设置得足够大,以确保不会丢失任何消息。
  • 使用Kafka的主要原因是我有多个生产者,每个生产者都从各种来源获取数据。然后这些将数据转换为通用格式,然后放入主题中。有多个消费者组,每个消费者组都需要对这些公共数据执行自己的流程。我认为这里的关键是建立故障保险,以确保我所有的消费者群体都在运行,并有足够长的保留期
  • 老实说,这听起来不像你有任何特定于 Kafka 的东西。大多数消息传递系统允许您拥有多个生产者,并且可能诸如持久订阅之类的东西更适合您的消费者模型。您是否大规模运行(您的主题有多少个节点/分区)?
  • 目前规模比较小,3个节点4个分区。但这会随着时间的推移而增长,我需要处理更多的生产者/消费者。您会推荐哪些其他消息传递系统,以允许我添加具有持久订阅的额外生产者和消费者组?当我使用大数据类型的环境时,这需要能够扩展。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 2017-05-11
  • 2021-01-26
  • 2021-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多