Ter*_*nge 8 apache-kafka kafka-consumer-api
我们有一个应用程序,消费者读取消息,并且线程执行许多操作,包括在将消息生成到另一个主题之前进行数据库访问.在线程上消费和生成消息之间的时间可能需要几分钟.一旦向新主题生成消息,就会进行提交以指示我们已完成消费者队列消息的工作.因此,禁用自动提交.
我正在使用高级消费者,而我注意到的是zookeeper和kafka会话超时,因为在我们对消费者队列执行任何操作之前需要太长时间,所以每当线程返回以从消费者那里读取更多内容时,kafka最终会重新平衡队列并且在消费者在一段时间之后读取新消息之前它开始花费很长时间.
我可以将zookeeper会话超时设置得非常高,以免造成问题但是我必须相应地调整重新平衡参数,并且kafka将不会在其他副作用中提取新的消费者一段时间.
我有什么选择来解决这个问题?有没有办法让卡夫卡和动物园管理员心跳,让他们两个都开心?如果我使用简单的消费者,我还有这些相同的问题吗?
听起来你的问题归结为依赖高级消费者来管理上次读取的偏移量。使用简单的消费者可以解决该问题,因为您可以控制该偏移量的持久性。请注意,所有高级消费者提交所做的就是将最后读取的偏移量存储在zookeeper中。没有采取其他操作,您刚刚读取的消息仍然存在于分区中并且可供其他使用者读取。
借助 kafka 简单消费者,您可以更好地控制偏移存储发生的时间和方式。您甚至可以将该偏移量保留在 Zookeeper 之外的其他位置(例如数据库)。
坏消息是,虽然简单消费者本身比高级消费者更简单,但你还需要在代码方面做更多的工作才能使其工作。您还必须编写代码来访问多个分区——高级消费者可以很好地为您做到这一点。
| 归档时间: |
|
| 查看次数: |
8780 次 |
| 最近记录: |