繁体   English   中英

如何通过 DelphiKafkaClient(或 librdkafka.dll)使用通配符订阅 Kafka 主题?

[英]How to subscribe to Kafka topics using wildcards with DelphiKafkaClient (or librdkafka.dll)?

我正在使用 DelphiKafkaClient ( https://github.com/norgepaul/DelphiKafkaClient ),它是 Apache Kafka (librdkafka.dll) 的包装器。

在创建新的消费者并指定要订阅的主题名称时(在TKafkaFactory.NewConsumer ),普通名称可以很好地工作,但正则表达式通配符似乎不起作用( ^**#^.*或其他任何东西)。

这是来自 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描述说

支持通配符(正则表达式)主题:
\\p 主题列表中以 \\c "^" 为前缀的任何主题名称都将
将正则表达式匹配到集群中的完整主题列表并匹配
主题将被添加到订阅列表中。

但是,为其指定任何通配符并调用rd_kafka_subscribe似乎也不起作用(请参阅上面的代码)。

因此我的问题是 - 如何格式化字符串并将其传递给 DelphiKafkaClient 或 librdkafka.dll 以作为匹配主题订阅的有效正则表达式?

DelphiKafkaClient ( https://github.com/norgepaul/DelphiKafkaClient ) 带有一个非常老的 DLL。 将 DLL 从版本 0.9.2 升级到更新版本使 RegEx 正常工作。

暂无
暂无

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

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