Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡主题消息的动态消费_Java_Apache Kafka_Kafka Consumer Api_Spring Kafka - Fatal编程技术网

Java 卡夫卡主题消息的动态消费

Java 卡夫卡主题消息的动态消费,java,apache-kafka,kafka-consumer-api,spring-kafka,Java,Apache Kafka,Kafka Consumer Api,Spring Kafka,我需要使用来自生产者动态创建的主题的消息。 为此,我在consumer@KafkaListener(topicPattern=“topicname_979;.*)中使用了主题模式方法,并设置了metadata.max.age.ms=3000。 但显然,除非我将offset.auto.reset设置为最早,否则我无法实现这一点。 在我们的要求中,offset.auto.reset必须设置为最新,以避免问题的重复 关于如何实现同样的目标,有什么想法吗?从顶层讲,卡夫卡的设计理念不允许这样做,因为在运

我需要使用来自生产者动态创建的主题的消息。 为此,我在consumer@KafkaListener(topicPattern=“topicname_979;.*)中使用了主题模式方法,并设置了metadata.max.age.ms=3000。 但显然,除非我将offset.auto.reset设置为最早,否则我无法实现这一点。 在我们的要求中,offset.auto.reset必须设置为最新,以避免问题的重复


关于如何实现同样的目标,有什么想法吗?

从顶层讲,卡夫卡的设计理念不允许这样做,因为在运行时添加主题会导致经纪人难以重新平衡,因此必须避免这种情况,但如果我们在每次将新主题添加到列表时都设法重新启动消费者群体,我们就可以优雅地完成避免这种危险

最新的Spring Kafka集成及其用法包括注释
@KafkaListener
,该注释通过使用传递给它的容器工厂创建一个KafkaListener容器,将POJO侦听器转换为Kafka使用者。该使用者侦听硬编码为主题、主题表达式、主题模式的字符串数组的主题等。这限制了我们的设计,通过Java DSL以max的形式获取这些主题作为键,而不是直接硬编码。但是,这些键仍然在作为参数传递给
@KafkaListener
的数组中硬编码

例如:

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

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

我没有硬编码它。我在application.properties中有它。@KafkaListener(topicPattern=“${topic.prefix}”,值topic.prefix具有要读取的模式。
>必须设置为最新,以避免问题的重复。
这是不正确的;
auto.offset.reset
仅适用于具有特定
组.id
的使用者第一次从分区消费时。一旦提交了偏移量,以后将立即停止消费在该冲销处的轧棉机-除非冲销过期,因为消费者已经一周没有消费了(默认情况下)。我已经创建了一个消费者,它根据模式使用主题,我已经将offset.auto.reset设置为latest,并将metadata.max.age.ms设置为5秒,但消费者始终缺少起始/第一条消息,但从那里开始使用消息。我正在使用Spring kafka module.producer=KafkaProducer(bootstrap_servers='localhost:9092')record_metadata=producer.send(主题,数据)消费者代码是请建议解决此问题的方法,或者我必须在生产者和消费者实例中包含的任何配置。您必须使用
最早的
来获取新主题中的所有记录。Kafka并不是真正为您的用例而设计的。5秒的元数据时代是相当激进的。