我们有一个应用程序,消费者读取消息,线程执行许多操作,包括在向另一个主题生成消息之前访问数据库。在线程上消费和产生消息之间的时间可能需要几分钟。一旦为新主题生成消息,就会完成提交以指示我们已完成对消费者队列消息的工作。由于这个原因,自动提交被禁用。
我正在使用高级消费者,我注意到 Zookeeper 和 kafka 会话超时,因为我们在消费者队列上做任何事情需要很长时间,所以每次线程返回以从消费者那里读取更多内容时,kafka 最终都会重新平衡队列,并且消费者在一段时间后读取新消息之前开始需要很长时间。
我可以将 Zookeeper 会话超时设置得非常高,以免造成问题,但随后我必须相应地调整重新平衡参数,并且 kafka 在一段时间内不会接收新的消费者以及其他副作用。
我有什么办法来解决这个问题?有没有办法让 kafka 和 zookeeper 心跳,让双方都开心?如果我使用一个简单的消费者,我还会遇到同样的问题吗?