比方说,我有一个服务,它通过kafka-rest代理来消费消息,并且总是在同一个消费者群体上。我们还可以说,它正在消耗一个有一个分区的主题。当服务启动时,它在kafka-rest代理中创建一个新的使用者,并使用生成的使用者url直到服务被关闭。当服务恢复时,它将在kafka-rest代理中创建一个新的消费者,并使用新的url (和新的消费者)进行消费。
我的问题
*编辑*我相信我的部分问题是用这个配置回答的,但不是全部。
consumer.instance.timeout.ms -在使用者实例被自动销毁之前空闲时间的数量。类型: int默认: 300000重要性:低
发布于 2016-07-08 22:39:38
consumer.instance.timeout.ms来控制这个超时。try/catch/finally的finally块来破坏使用者。如果一个人活着,它最终会恢复。除此之外,如果应用程序能够容忍这种情况,可以考虑将consumer.instance.timeout.ms设置调整得更低。它只需要大于使用使用者的调用之间最长的时间(并且您应该记住可能出现的错误情况,例如,如果处理消息需要与另一个系统交互,并且该系统可能变得缓慢/不可访问,则在设置此配置时应考虑到这一点)。您可以持久化URL,但即使这样也有可能失去对用户的跟踪,因为您无法原子地创建使用者并将其URL保存到其他持久性存储中。此外,由于完全不受控制的失败,如果您没有机会清理,不应该是一个常见的情况,它往往没有什么好处,你这样做。如果您需要从该故障中快速恢复,那么对于您的应用程序来说,可能会大大减少使用者实例超时。
Re:强制重新启动代理,这将是相当罕见的,因为REST代理通常是一个共享服务,这样做会影响使用它的所有其他应用程序。
https://stackoverflow.com/questions/38256910
复制相似问题