春天的卡夫卡寻找主题中的最新消息

时间:2019-01-10 17:20:19

标签: java apache-kafka kafka-consumer-api spring-kafka

我有一个Kafka使用者,它订阅了以下主题MY_TOPICMY_UNINTERESTED_TOPIC

在以下情况下,我对第二个主题不感兴趣,但我不得不提及它,因为如果使用auto.offset.reset之类的东西对其进行配置,则可能会影响所有主题。

MY_TOPIC主题上,我发布了不同类型的消息:MESSAGE_TYPE_AMESSAGE_TYPE_B。这两个消息都是具有不同属性的BaseKafkaMessage(自定义类)的实例。

现在,我有兴趣查找 MESSAGE_TYPE_A类型的最新消息。我该怎么办?

实际情况是这样的:我在同一主题上发布两种类型的消息。其中之一用于在每个对此主题和消息感兴趣的使用者中准备本地缓存。如果使用者停止使用,则在重新加载时必须使用最新的MESSAGE_TYPE_A重新初始化其缓存。 MESSAGE_TYPE_B应该被忽略。我不想将有关Kafka的通知发送给数据提供者以再次发布数据,因为所有订阅者都需要做很多不必要的工作。

我如何获得?这可能吗?

我找到了https://docs.spring.io/spring-kafka/reference/htmlsingle/#seek,但不确定是不是我要找的东西,或者是否有其他方法可以实现。

1 个答案:

答案 0 :(得分:3)

目前还不清楚这些消息的格式,或者为什么您真的需要它们成为同一主题。

例如,您可以use different Avro types。否则,您将不得不try-catch解析两个不同的字节数组(JSON对象?)

或者您可以按类型对主题进行分区,以使一种类型的所有消息按同一分区的顺序排列。

但是,没有机制可以进行索引查找来获取最近发送的消息。您可以从最新事件开始,然后获取下一条传入消息,也可以从头开始,然后进行扫描,直到在下一个轮询循环中获得0条记录为止,这在理论上是“最新”的< / p>

  

诸如auto.offset.reset之类的东西可能会影响所有主题

这仅会影响消费者感兴趣的主题,而不是全部。