从卡夫卡主题动态消费消息

时间:2019-12-09 09:24:34

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

我需要使用生产者动态创建的主题中的消息。 我在使用者@KafkaListener(topicPattern =“ topicname _。*”)中使用了主题模式方法,并且还设置了metadata.max.age.ms = 3000。 但是很明显,除非并且直到我将offset.auto.reset设置为最早,否则我无法实现这一点。 在我们的要求中,必须将offset.auto.reset设置为最新,以避免重复出现该问题。

关于如何实现相同的任何想法?

1 个答案:

答案 0 :(得分:0)

在最高层次上讲,Kafka的设计理念不允许这样的事情,因为在运行时添加主题会导致代理之间的硬性重新平衡,因此必须避免,但是如果我们每次都设法重新启动消费者组一个新主题添加到列表中,我们可以适当避免这种危险。

最新的Spring-Kafka集成及其用法包括注释@KafkaListener,该注释通过使用传递给它的容器工厂创建KafkaListenerContainer来将POJO侦听器转变为Kafka使用者。该用户收听以主题,主题表达,主题模式等字符串数组硬编码的主题。这将我们的设计限制为最大程度地通过Java DSL而不是直接硬编码将这些主题作为键来获取。但是,密钥仍然在作为参数传递给@KafkaListener的数组中进行硬编码。

示例:

@KafkaListener(topics = {“${kafka.topics.receipt.cancel.name}”}, containerFactory = “kafkaContainerFactory”)

注意:批注属性KafkaListener.topics的值必须是数组初始值设定项,因此硬编码是必需的。