当我在具有akka流的现有消费者组中创建新消费者时,如何寻求结束kafka主题?

时间:2019-06-24 13:57:37

标签: java scala apache-kafka akka akka-stream

我有一个akka应用程序(在JAVA中),该应用程序使用commitablePartitionedSource来吸收来自kafka主题的消息。我有一些消费者群体,这些消费者将消费者吸引到多个主题。这是由动态配置驱动的,在该配置中,我可以暂时关闭使用者,也可以稍后再启动它们。

当该使用者重新启动时,我只想阅读新消息,而不是从上次中断的地方开始。

是否有一种方法可以从akka-alpakka消费者那里获取kafkaConsumer对象,以便在处理之前可以使用seekToEnd()? 请让我知道是否还有其他方法可以实现?也许使用akka配置或其他类型的使用者?我宁愿不保持自己的偏移量(希望不是唯一的选择)

我的配置设置为在启动使用者组时获得latest偏移,但是由于我要关闭并重新启动各个使用者,所以它总是从我上次中断的地方开始消耗。

我尝试为一个主题创建一个消费者组,但是我有很多主题,事实证明这需要大量资源。我还寻找了一种方法来清除该主题中未成功存储在kafka中的偏移量。

2 个答案:

答案 0 :(得分:1)

最简单的方法就是每次开始重新启动消费者时创建一个新的消费者组。在可配置的时间( retention.ms )之后,Kafka将负责删除过时的消费者组

如果您很少重新启动使用者并始终希望它处理新数据而不是赶上所有丢失的消息,则此策略很好。

编辑

据我所知,访问底层KafkaConsumer的唯一方法是使用committableExternalSource。这样,您就可以访问seekToEnd方法,但是,您还需要订阅提供每个分区的起始偏移量的主题(类似于您现在设置{{1 }},但在 Akka 之外)。

答案 1 :(得分:0)

<div> <p class="text">{props.text}</p> <Link to="/search/test">Test link</Link> </div> commitablePartitionedSource作为输入,您不能指定偏移量。

您需要一种采用AutoSubscription或更高级别ManualSubscription的方法,例如

Subscription