猿问

PHP rdkafka。如何消费主题匹配正则表达式?

我可以使用来自 Kafka 的消息,前提是我使用严格的名称指定主题,例如“some_topic”,但我想使用与特定正则表达式匹配的主题:


<?php


$conf = new RdKafka\Conf();

//$conf->set('log_level', 1);

//$conf->set('debug', 'all');

$rk = new RdKafka\Consumer($conf);

$rk->addBrokers("localhost:9092");


$topic = $rk->newTopic("^postgres.public.table_[0-9]+_");


$topic->consumeStart(0, RD_KAFKA_OFFSET_BEGINNING);


while (true) {

    $msg = $topic->consume(0, 1000);

    if (null === $msg || $msg->err === RD_KAFKA_RESP_ERR__PARTITION_EOF) {

        continue;

    } elseif ($msg->err) {

        echo $msg->errstr(), "\n";

        break;

    } else {

       echo $msg->payload;

        echo "\n\n";

    }

}

如您所见,主题名称是^postgres.public.table_[0-9]+_. 但是,它不起作用。我在控制台中收到这些错误消息:


%3|1579347443.452|ERROR|rdkafka#consumer-1| [thrd:app]: rdkafka#consumer-1: ^postgres.public.object_[0-9]+_ [0]: topic does not exist (Broker: Invalid topic)

那有什么问题,我该如何解决?


慕少森
浏览 171回答 1
1回答

MMMHUHU

newTopic()用于创建RdKafka\Topic对象的新实例。它不用于加入主题。使用该subscribe()方法加入基于模式的主题,在本例中为正则表达式。所以你使用类似的东西:$rk->subscribe('^postgres.public.table_[0-9]+_');
随时随地看视频慕课网APP
我要回答