【发布时间】:2020-06-30 17:33:34
【问题描述】:
好吧,我正在尝试以下场景:
- 在 application.properties 中将 max.poll.records 设置为 50。
- 在 application.properties 中将 enable-auto-commit=false 和 ack-mode 设置为手动。
- 在我的方法中添加了@KafkaListener,但不提交任何消息,只阅读、记录但不发送ACK。
实际上,在我的 Kafka 主题中,我有 500 条消息要消耗,所以我期待以下行为:
- Spring Kafka poll() 50 条消息(偏移量 0 到 50)。
- 正如我所说,我没有提交任何内容,只是记录了 50 条消息。
- 在下一次 Spring Kafka poll() 调用中,获取与步骤 1 相同的 50 条消息(偏移量 0 到 50)。据我了解,Spring Kafka 应该继续此循环(步骤 1-3),始终阅读相同的消息。
但是会发生以下情况:
- Spring Kafka poll() 50 条消息(偏移量 0 到 50)。
- 正如我所说,我没有提交任何内容,只是记录了 50 条消息。
- 在下一次 Spring Kafka poll() 调用中,获取与步骤 1 不同的 NEXT 50 条消息(偏移量 50 到 100)。
Spring Kafka 以 50 条消息为单位读取 500 条消息,但不提交任何内容。如果我关闭应用程序并重新启动,则再次收到 500 条消息。
所以,我的疑惑:
- 如果我将 max.poll.recors 配置为 50,如果我没有提交任何内容,spring Kafka 如何获取接下来的 50 条记录?我知道 poll() 方法应该返回相同的记录。
- Spring Kafka 有缓存吗?如果是,如果我在缓存中获得 100 万条记录而没有提交,这可能是个问题。
【问题讨论】:
标签: spring apache-kafka spring-kafka