我使用的是DelphiKafkaClient (https://github.com/norgepaul/DelphiKafkaClient),它是Apache (librdkafka.dll)的包装器。
在创建新的使用者并指定要订阅的主题名称(在TKafkaFactory.NewConsumer中)时,普通名称工作得很好,但是regex通配符似乎不起作用(^*、*、#、^.*或其他任何东西)。
下面是来自DelphiKafkaClient的相关代码(请参阅我的评论):
procedure TKafkaConsumerThread.DoSetup;
var
i: Integer;
TopicList: prd_kafka_topic_partition_list_t;
err: rd_kafka_resp_err_t;
begin
FKafkaHandle := TKafkaHelper.NewConsumer(FConfiguration);
if rd_kafka_brokers_add(FKafkaHandle, PAnsiChar(AnsiString(FBrokers))) = 0 then
begin
raise EKafkaError.Create(StrBrokersCouldNotBe);
end;
rd_kafka_poll_set_consumer(FKafkaHandle);
TopicList := rd_kafka_topic_partition_list_new(0);
for i := Low(FTopics) to High(FTopics) do
begin
rd_kafka_topic_partition_list_add(
TopicList,
PAnsiChar(AnsiString(FTopics[i])), // 'test' works, '^*' does not
FPartitions[i]);
end;
err := rd_kafka_assign(FKafkaHandle, TopicList); // no errors returned, all fine
// I have tried using rd_kafka_subscribe alongside or instead - makes no difference
err := rd_kafka_subscribe(FKafkaHandle, TopicList); // no errors returned, all fine
end;rd_kafka_subscribe描述说
支持
通配符(regex)主题:
\p主题列表中以\c "^“为前缀的任何主题名称都将
与集群中的全部主题列表相匹配并进行匹配
主题将添加到订阅列表中。
但是,为它指定任何通配符并调用rd_kafka_subscribe似乎也不起作用(参见上面的代码)。
因此,我的问题--如何格式化字符串并将其传递给DelphiKafkaClient或librdkafka.dll,以作为匹配主题订阅的有效正则表达式?
发布于 2021-12-09 05:42:41
DelphiKafkaClient (https://github.com/norgepaul/DelphiKafkaClient)附带了一个非常老的DLL。将DLL从0.9.2版本升级到更新版本使RegEx正常工作。
https://stackoverflow.com/questions/69794205
复制相似问题