当前位置: 首页 > 知识库问答 >
问题:

如何从Spring ListenerContainerIdleEvent执行手动偏移确认

冯泓
2023-03-14

我有一个Kafka侦听器,它实现了具有以下属性的确认消息侦听器接口

  1. 确认模式-手动_立即
  2. IDLEEVENTERVAL-3分钟

在监听器上使用消息时,它决定是否通过acknowledgment.acknowledge()来获取特定记录,并按预期工作。

此外,我还有一个场景,在X分钟后确认最后一个偏移量(将其保留在内存中)(如果没有消息到达)。为了克服这个要求,我决定使用ListenerContainerIdleEvent,根据我的配置每3分钟触发一次。

我的问题是:

>

空闲消息事件发送同步(与KafkaListener消费者的相同线程)吗?从代码中,默认实现是SimpleApplication EventMulticaster,它在没有TaskExecator的情况下初始化,因此它调用同一线程上的侦听器。你能批准吗?

我使用的是spring kafka 1.3.9。

共有1个答案

师增
2023-03-14

>

  • 是的,只需保留对最后一个确认的引用并再次调用确认()

    是的,默认情况下,该事件会在使用者线程上发布。

    即使事件发布在不同的线程(Multicast中的执行器)上,它也应该仍然有效,因为提交不会直接提交,而是在消费者从轮询中醒来时排队并由其处理。

    请参阅processAck()中的逻辑。

    在较新的版本(从2.0开始)中,事件有一个对使用者的引用,因此只要事件发布在使用者线程上,您就可以直接与它交互(获取当前位置并再次提交)。

  •  类似资料:
    • 我第一次使用Spring Kafka,我无法在我的消费者代码中使用Acknowledgement.acknowledge()方法进行手动提交。请让我知道我的消费者配置或侦听器代码中是否缺少任何内容。或者有其他方法可以根据条件处理确认偏移。在这里,我正在寻找解决方案,例如如果偏移没有手动提交/确认,它应该由消费者选择相同的消息/偏移量。 配置 听众

    • 我使用的是camel kafka组件,我不清楚在提交补偿时引擎盖下发生了什么。如下所示,我正在聚合记录,我认为对于我的用例来说,只有在记录保存到SFTP后提交偏移量才有意义。 是否可以手动控制何时可以执行提交?

    • 我正在用GridLayout做一个程序。在执行操作后,我尝试将按钮移动到另一个位置时出现问题。基本上,我在面板上有一个按钮大小的空白区域。我想把点击的按钮移到这个空白处,反过来,这个空白处会取代这个按钮。我正在使用一个数组来获得一个看起来像框架的模型。所以我知道空空间在我的数组中的位置(在JButton数组中是一个空值),我试图让这个按钮在数组中取空空间的位置,并反过来。但它并没有真正起作用。 任

    • 问题内容: 我想知道是否有任何可用资源描述浏览器的光标如何执行Javascript。 我知道它会在页面加载时加载并执行标签,并且您可以将函数附加到各种窗口事件,但是事情变得模糊的是,例如,当我通过AJAX检索远程页面并将其内容放入div中时。 如果该远程页面必须加载脚本库(例如),则何时加载“ anotherscript.js”并执行其内容? 如果我在当前页面上包含“ anotherscript.

    • 我正在调试我的web应用程序,我有一个POST请求。(使用ajax,使用xhrfields:{withcredentials:true})。dataType是'application/json',我的服务器是tomcat,我手动将我的“Access-Control-Allog-Origin”标头设置为“http://localhost:8080”。 跨源请求被阻止:同一源策略不允许读取http:/