我阅读了 Kafka 网站上的文档,但是在尝试实现一个完整的最小示例(生产者 --> kafka --> 消费者)之后,我不太清楚“消费者状态”如何处理偏移量。
一些信息
- 我正在使用高级 API (Java)
- 我的消费者是一个带有 Main 的简单类,与“快速入门”Kafka 页面上的基本相同
- 我正在使用动物园管理员
- 我正在使用单个经纪人
现在,文档说 HighLevel API 消费者使用 zookeeper 存储其状态,所以我希望偏移量,因此消费者的状态将保持在
- Kafka 代理重新启动
- 消费者重启
但不幸的是,它没有:每次我重新启动代理或消费者时,所有消息都会重新传递。现在,可能这些都是愚蠢的问题,但是
在 Kafka 重启的情况下:我知道这取决于消费者来保持其状态,所以很可能当代理(重新)启动重新传递所有(!)消息并且消费者决定消费什么时......对吗?如果是这样,如果我有 10.0000.0000 条消息会发生什么?
如果 JVM 消费者重启:如果状态保持在 Zookeeper 上,为什么要重新传递消息?新的 JVM 是否有可能具有不同的消费者“身份”?而在这种情况下,如何绑定之前的身份呢?