繁体   English   中英

如何通过springboot Kafka中的kafkalistener服务根据传入的主题模式自动创建Kafka主题?

[英]How to AutoCreate Kafka Topic according to incoming topic pattern through kafkalistener service in springboot Kafka?

我将订阅 kafka 主题模式,例如“topic.*”我的目标是为我收听的每个 kafka 主题创建死信队列。

例如,当我收听名为“topic.1”的主题时,我想自动创建名为“topic.1_deadletter”的死信队列。

到目前为止,我尝试做的事情如下:

我的消费者:

@Component
@Slf4j
public class LibraryEventsConsumer {

    @Autowired
    LibraryEventConsumerConfig libraryEventConsumerConfig;

    @KafkaListener(topicPattern = "kafka.*")
    public void onMessage(String consumerRecord, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic) throws Exception{

        log.info("ConsumerRecord : {}", consumerRecord);

        String deadlettertopic = String.format("%s_deadletter",topic);
        System.out.println(deadlettertopic);
        System.out.println(KafkaHeaders.RECEIVED_TOPIC);

        libraryEventConsumerConfig.getTopic(topic);`

在这里,我尝试使用 getTopic 方法自动创建 kafka 主题。 在下面你可以看到 libraryEventConsumer class:

@Configuration
@EnableKafka
public class LibraryEventConsumerConfig {

    @Bean
    public void getTopic(String topic){
        NewTopic deadlettertopic = TopicBuilder.name(String.format("%s_deadletter",topic))
                .partitions(1)
                .replicas(1)
                .build();
    }
}

不幸的是,这种方法不起作用,我收到以下错误消息:

Parameter 0 of method getTopic in com.kafkalibrary.Config.LibraryEventConsumerConfig required a bean of type 'java.lang.String' that could not be found.

知道如何继续吗?

添加一个重新平衡侦听器,或扩展AbstractConsumerSeekAware (或仅实现ConsumerSeekAware )。

public class LibraryEventsConsumer extends AbstractConsumerSeekAware {

然后,在onPartitionsAssigned()中使用AdminClient检查 DLT 主题是否存在,如果不存在,则创建它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM