通过外部触发寻求偏移

时间:2018-11-24 00:05:28

标签: spring-kafka

当前,我使用AcknoledgingMessageListener通过spring-Kafka实现Kafka使用者。此实现可帮助我收听特定主题并通过手动确认处理消息。 我现在需要构建以下功能: 让我们假设,对于某些环境异常或通过此主题输入的不良数据,我需要从特定偏移量回放特定主题的数据。这将是一个手动触发器(主要是通过Java类的执行)。

如果我可以检索这些偏移量之间的消息并将其作为重播主题,以便新用户可以处理这些消息,从而使偏移量保持原始主题不变,那将是一个理想的选择。

  1. CosumerSeekAware接口-如果这是答案,我如何从外部触发此问题?通过说一个mvn -Dexec。我不确定这是否可能
  2. 也可以说我有一个崩溃时间戳记,是否有可能会进行自我反思以找到与崩溃相对应的偏移量,以便我可以从该偏移量重播?
  3. 我可以找到对应于某些特定数据的偏移量,以便重播这些特定偏移量吗?

所有这些要求都旨在围绕我们的Kafka功能构建弹性层。我需要所有这些都由一个单独的可执行类管理,该类可以手动触发以提供相关数据(如时间戳等)。此类应确定偏移量,然后搜索该偏移量,检索与这些偏移量相对应的消息,并将其发布到单独的主题。有人可以指出正确的方向吗?恐怕我会绕圈转。

和平, 番红花

1 个答案:

答案 0 :(得分:0)

  

以便新用户可以处理这些消息,从而使偏移量保持原主题不变。

只需创建一个具有不同组ID(新使用者)的新侦听器容器,并在分配分区时使用ConsumerAwareRebalanceListener(或ConsumerSeekAware)执行查找即可。

Here is a sample CARL that seeks all assigned topics based on a timestamp.

您将需要某种机制来了解新使用者何时应停止使用(在什么时候可以stop()新容器)。也许在新使用者上设置了max.poll.records=1,这样他就不会预取失败点。

我不确定#3是什么意思。