首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卡夫卡Rest代理消费者创造

卡夫卡Rest代理消费者创造
EN

Stack Overflow用户
提问于 2016-07-07 23:40:10
回答 1查看 1.2K关注 0票数 2

比方说,我有一个服务,它通过kafka-rest代理来消费消息,并且总是在同一个消费者群体上。我们还可以说,它正在消耗一个有一个分区的主题。当服务启动时,它在kafka-rest代理中创建一个新的使用者,并使用生成的使用者url直到服务被关闭。当服务恢复时,它将在kafka-rest代理中创建一个新的消费者,并使用新的url (和新的消费者)进行消费。

我的问题

  1. 因为卡夫卡每个分区最多只能有一个消费者。当消费者重新启动时,卡夫卡和卡夫卡的rest代理会发生什么?也就是说,一个新的消费者被创造在卡夫卡-休息-代理,但旧的一个没有机会被摧毁。因此,在kafka-rest-proxy重新启动我的服务之后,现在就有了'n‘消费者,但他们中只有一个在积极消费。我甚至能够在我的新使用者上使用消息吗?因为有更多的使用者而不是分区?
  2. 让我们把这变得更加复杂,假设我在同一个使用者组上有5个服务实例,在主题中有5个分区。在我的服务的所有5个实例重新启动之后,我会不会在不确保现有使用者被正确破坏的情况下使用所有消息?也就是说,卡夫卡和卡夫卡-rest-代理在消费者创造过程中,当消费者对分区进行编号时,会做什么?
  3. 什么被认为是卡夫卡-休息-代理的最佳实践,以确保陈旧的消费者总是清理?你建议继续使用消费者网址吗?我是否应该强制重新启动kafka-rest代理,以确保在启动我的服务之前,现有的消费者被销毁?

*编辑*我相信我的部分问题是用这个配置回答的,但不是全部。

consumer.instance.timeout.ms -在使用者实例被自动销毁之前空闲时间的数量。类型: int默认: 300000重要性:低

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-08 22:39:38

  1. 如果您不能干净地关闭使用者,它将在上次向它发出请求后继续运行一段时间。对于这种情况,代理将垃圾收集陈旧的消费者--如果没有完全关闭,消费者将无限期地保留一些分区。通过自动垃圾收集使用者,您不需要单独的持久存储来跟踪您的使用者实例。正如您所发现的,您可以通过配置consumer.instance.timeout.ms来控制这个超时。
  2. 由于实例将被垃圾收集,因此保证您最终会使用所有消息。但是在超时期间,一些分区可能仍然分配给旧的一组使用者,您将不会在这些分区上取得任何进展。
  3. 理想情况下,不干净地关闭应用程序是罕见的,所以最好的做法就是在应用程序关闭时清理用户。即使在特殊情况下,也可以使用try/catch/finallyfinally块来破坏使用者。如果一个人活着,它最终会恢复。除此之外,如果应用程序能够容忍这种情况,可以考虑将consumer.instance.timeout.ms设置调整得更低。它只需要大于使用使用者的调用之间最长的时间(并且您应该记住可能出现的错误情况,例如,如果处理消息需要与另一个系统交互,并且该系统可能变得缓慢/不可访问,则在设置此配置时应考虑到这一点)。

您可以持久化URL,但即使这样也有可能失去对用户的跟踪,因为您无法原子地创建使用者并将其URL保存到其他持久性存储中。此外,由于完全不受控制的失败,如果您没有机会清理,不应该是一个常见的情况,它往往没有什么好处,你这样做。如果您需要从该故障中快速恢复,那么对于您的应用程序来说,可能会大大减少使用者实例超时。

Re:强制重新启动代理,这将是相当罕见的,因为REST代理通常是一个共享服务,这样做会影响使用它的所有其他应用程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38256910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档