Apache Kafka:消费者状态

And*_*rea 8 messaging asynchronous apache-kafka

我在Kafka网站上阅读了文档,但在尝试实现一个完整的最小例子(生产者 - > kafka - >消费者)后,我不太清楚"消费者状态",偏移量是如何处理的.

一些信息

  1. 我正在使用HighLevel API(Java)
  2. 我的消费者是一个带有Main的简单类,基本上可以在"快速启动"Kafka页面上找到
  3. 我正在使用Zookeeper
  4. 我正在使用一个经纪人

现在,文档说HighLevel API使用者使用zookeeper存储其状态,所以我希望偏移量因此消费者的状态将保持在

  • Kafka经纪人重启
  • 消费者重启

但不幸的是它没有:每次重新启动代理或消费者时,都会重新传递所有消息.现在,可能这些都是愚蠢的问题但是

  1. 在Kafka重启的情况下:我明白这取决于消费者保持其状态所以可能当经纪人(重新)启动重新发送所有(!)消息并且消费者决定要消费什么......是吗?如果是这样,如果我有10.0000.0000的消息会怎么样?

  2. 如果JVM使用者重新启动:如果状态保留在Zookeeper上,为什么重新传递消息?是否有可能新的JVM具有不同的消费者"身份"?在这种情况下,我如何绑定以前的身份?

And*_*rea 3

看来我一直是一个糟糕的读者......这一切都在配置页面中。具体来说,我的两个问题都是通过设置一个标志“autooffset.reset”来解决的,该标志默认为“最小”,因此会产生所描述的效果。

现在,以“最大”作为值,在消费者和代理重新启动的情况下,一切都按预期进行,因为偏移量始终是最大的。