- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据 /spring-kafka/docs/2.4.4.RELEASE/,关于 Kafka 的新功能,旨在否定确认,现在由 Spring-Kafka 支持。
“……
从 2.3 版开始,Acknowledgment 接口(interface)有两个额外的方法 nack(long sleep) 和 nack(int index, long sleep)。第一个用于记录监听器,第二个用于批处理监听器。为您的监听器类型调用错误的方法将引发 IllegalStateException。
...
使用记录监听器,当调用 nack() 时,将提交任何未决的偏移量,丢弃上次轮询的剩余记录,并在其分区上执行搜索,以便在下一次轮询时重新传递失败的记录和未处理的记录( )。 消费者线程可以在重新交付前暂停 ,通过设置 sleep 参数。这与在容器配置了 SeekToCurrentErrorHandler 时引发异常的功能类似。
"
好吧,如果消费者方面发生了一些错误,比如无法保存在数据库中,假设消费者没有 acknowledgment.acknowledge(),据我了解,消息仍在轮询中,它将被再次读取/使用。我想有人可以说,使用 nack(..., some time) 消费者可以 sleep ,从而有机会稍后再阅读/消费,而不会遇到错误。如果继续听这个话题不是问题,我的直截了当的问题是:
关于使用 nack 而不是根本不承认还有什么进一步的意义吗?
据我所知,该消息将在池中保存的时间比 nack sleep 长。因此,顺便说一句,如果消费者继续尝试获取消息并保存消息,假设问题在少于 sleep 时间的时间内得到解决,它将成功。
一个围绕点或优势将是生产者以某种方式收到使用 nack 的通知。如果是这样,我可以在某些特定情况下找到一些值(value)。假设使用 Log Compation(仅对最后一条消息状态感兴趣)或 Kafka 作为长期存储服务(我猜 future 的版本将提供这个 - KIP 405)
关于更一般的异常(exception)情况,我倾向于遵循 configure a SeekToCurrentErrorHandler and throw the exception 之类的方法。
最佳答案
nack
只是使用 SeekToCurrentErrorHandler
的替代方法- 它是在我们制作 SeekToCurrentErrorHandler
之前添加的默认错误处理程序(以前,默认只是简单地记录错误)。
STCEH 更复杂,您可以配置重试次数,配置在重试结束后调用的恢复器(例如 DeadLetterPublishingRecoverer
)。nack
不同于“不承认”;对于后者,如果您不抛出异常,您将从轮询中获取下一条记录(如果这是最后一条记录,则为下一条轮询);除非您使用 nack
,否则您将不会收到未确认记录的重新交付。或 STCEH 并引发异常。
关于java - 卡夫卡 : what is the point of using "acknowledgment.nack" if I can simply "not acknowledgment.acknowledge",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62413270/
我是一名优秀的程序员,十分优秀!